使用python实现微信小程序自动签到功能

功能描述目标

完成多账号微信小程序每天自动签到

输出

签到成功则向微信群发送签到成功的信息
否则提示用户签到失败,需手动签到

包管理

requests
itchat
time
threading

程序的结构设计步骤1

获取要发送的json数据:地址

步骤2

向服务器发送请求

步骤3

根据服服务器响应判断签到是否完成

步骤4

微信交互

代码实现使用findler抓包工具查看请求类型

https://reserve.25team.com/wxappv1/yi/index?version=13

可以看到,该小程序使用的是https,因此可以使用python爬虫来实现模拟用户签到的功能
我们先对该url发送一次请求,查看服务器返回的内容

import requests
def request_h(url):
  headers = {
    "Accept-Encoding": "gzip, deflate, br",
    "User-Agent": "Mozilla / 5.0",
    "content-type": "application / json",
    "Referer": "https: // servicewechat.com / wxd2bebfc67ee4a7eb / 45 / page - frame.html",
    # 设置token
    "token": "可以再findler请求栏查看自己的token",
    "Connection": "keep - alive",
    "Host": "reserve.25team.com"
  }
  r = requests.get(url, headers=headers, json=json)
  return r

if __name__ == '__main__':
  url = "https://reserve.25team.com/wxappv1/yi/addReport"
  res = request_h(url)
  print(res.text)

在代码当中,最主要的部分是请求头的设置,其中token尤为重要,它是服务器检验用户身份的一个重要手段,当然它的功能不仅于此

什么是token

请求发出后,服务器返回内容是一个json数据,我们在小程序中所看到的内容就是由这些json数据组成的,我们在实现签到功能的时候,也是由客户端向服务器发送一段json数据,我们先来看看我们要发送的json数据的结构

再次使用findler抓包,查看请求内容

https:reserve.25team.com/wxappv1/y1/adReport

当我们点击信息上报的时候,实际上就是向上面的网站发送了一段json数据,具体内容如下

我们可以看到,客户端是使用post请求发送数据的,在findler中点击请求栏上面的JSON,就可以看到我们所发送的JSON数据,如下:

# json = {"content":{"0":"否","1":"","2":"","3":"","4":"","5":"否","6":"否","7":"否","8":"正常","9":"37.2及以下","10":"陕西省延安市子长市子长市统计局政法大楼 经纬度:109.67538,37.14258","11":"否","12":"","13":"","14":""},"version":13,"stat_content":{"今日是否在京":"否","今日是否在湖北?":"否","今日是否“密切接触”疑似或确诊人群?":"否","今日是否在集中隔离点隔离":"否","今日本人身体情况(多选)":"正常"},"location":{"province":"陕西省","country":"中国","city":"延安市","longitude":109.67538,"latitude":37.14258},"sick":"","accept_templateid":""}

这段json数据中,除地址以外,其他的数据都是服务器默认填好的,因此我们在发送数据时,只需要改动一下json数据当中的location即可
那么怎么获取位置呢,腾讯给我我们提供了一个接口,我们可以使用这个接口查看自己的位置信息,代码如下:

# 获取定位信息的.py
import requests
import json
url = "https://restapi.amap.com/v3/geocode/regeo?location=109.67538,37.14258&key=a0599c316b9533a47162b9044a64f659&extensions=base"
headers = {
  "Accept-Encoding": "gzip, deflate, br",
  "User-Agent": "Mozilla/5.0",
  "content-type": "application/json",
  "Referer": "https://servicewechat.com/wxd2bebfc67ee4a7eb/45/page-frame.html",
  "Connection": "keep-alive",
  "Host": "restapi.amap.com"

}
r = requests.get(url, headers=headers)
print(r.json())

这里的url是我点击小程序当中的获取当前位置时,使用findler抓包工具抓取的
同样,这个地址接口也向我们响应了一个json数据

我们直接将返回的json数据插入到要发送的json数据中即可

使用多线程完成多用户提交的功能

代码如下

import requests
from threading import Thread
import time
def request_h(url,json,token):
  headers = {
    "Accept-Encoding": "gzip, deflate, br",
    "User-Agent": "Mozilla / 5.0",
    "content-type": "application / json",
    "Referer": "https: // servicewechat.com / wxd2bebfc67ee4a7eb / 45 / page - frame.html",
    "token": token,
    "Connection": "keep - alive",
    "Host": "reserve.25team.com"
  }
  while True:
    r = requests.post(url, headers=headers, json=json)
    print(r.text)
    time.sleep(60*60*24)

if __name__ == '__main__':

  url = 'https://reserve.25team.com/wxappv1/yi/addReport'
  jsons = [{"content": {"0": "否", "1": "", "2": "", "3": "", "4": "", "5": "否", "6": "否", "7": "否", "8": "正常",
            "9": "37.2及以下", "10": "陕西省延安市子长市子长市统计局政法大楼 经纬度:109.67538,37.14258", "11": "否", "12": "",
            "13": "", "14": ""}, "version": 13,
      "stat_content": {"今日是否在京": "否", "今日是否在湖北?": "否", "今日是否“密切接触”疑似或确诊人群?": "否", "今日是否在集中隔离点隔离": "否",
               "今日本人身体情况(多选)": "正常"},
      "location": {"province": "陕西省", "country": "中国", "city": "延安市", "longitude": 109.67538,
             "latitude": 37.14258}, "sick": "", "accept_templateid": ""}]
  tokens = ["eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjo1MjQzMSwiZXhwIjoxNjg1MDY2MTQ1LCJpc3MiOiJnaW4tYmxvZyJ9.2PB-82BkbgUI6pOzglN6oMP8KpiHJhmu8KF1iilWAgc"]
  threads = []
  n = 0
  for js in jsons:
    t = Thread(target=request_h, args=(url, js, tokens[n]))
    n += 1
    t.start()
    threads.append(t)

  for t in threads:
    t.join()

其中,因为服务器根据token来分辨用户,要注意token和json数据的一一对应

使用itchat第三方库实现微信自动回复

因为微信官方的原因,有些用户无法使用itchat来进行自动回复,因此这部分代码我就不写了,大家可以再网上查到itchat文档
具体实现如下:

  • 微信自动登录
  • 根据服务器返回的json数据判断是否签到成功
  • 签到成功则在对应群里发送成功标志
  • 签到失败则向文件传输助手发送失败原因

正好之前我在阿里云买了一年的服务器,可以将程序安装到服务器上,再设置后台运行,这样的话就可以实现每天自动签到了
没有服务器的话,大家可以将程序部署到自己的电脑上,但是因为程序耗时较长,所以我不建议这么做

使用scp命令将程序发送到 远程 家目录下的 Documents

scp -r app_sign.py  root@47.105.49.126:/Documents

使用ssh命令打开远程服务器

这里不需要密码是因为我之前设置过免密登陆

如何设置免密登陆

ssh root@47.105.49.126

进入到以下页面说明连接成功了

可以看到我之前发送的.py文件已经发送到了服务器目录下

设置程序后台运行

nohup python3 app_sign.py  > run.log 2>& 1

nohup是永久执行的命令,如果疫情结束不需要签到的话,需要使用kiil命令关闭进程

OK,这就是整个程序的实现过程

到此这篇关于使用python实现微信小程序自动签到功能的文章就介绍到这了,更多相关python 微信小程序签到内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python实现微信小程序自动回复

    本文是使用Python的itchat模块进行微信私聊消息以及群消息的自动回复功能,必须在自己的微信中添加微信号xiaoice-ms(微软的微信机器人)才能实现,直接复制代码运行之后扫一扫二维码即可,经过测试,该程序能够保持几小时的时间. 实现原理,将别人发送给你的消息转发给AI小冰,然后再将AI的回复转回给那个人. 群消息也是如此,此外还添加了新年问候语,是否与他人进行AI聊天等功能.不过只能实现文本消息以及微信自带表情的转发,不能转发表情.语音等. # -*-coding:utf-8-*- i

  • 微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧

    前言 小程序跳一跳最近很火,之前爆出微信游戏小程序漏洞,网上也不乏大神.这里就用一大神的python脚本来刷下高分. 跳一跳python脚本传送门 配置过程 注: 电脑环境未配置python环境,请自行谷歌或者百度配置,这里不再做叙述. 1. 将上述传送门整个项目拷贝到本地(用git命令,或者直接压缩包下载,这里大家随意).比如我这里下载压缩包,解压我电脑以下的目录. 2. 楼主用的是 ios , 操作起来比较繁琐,也懒得找测试要 Android 测试机,所有就下了模拟器测试,首推雷电模拟器,安

  • 基于腾讯云服务器部署微信小程序后台服务(Python+Django)

    一 前言 微信小程序,相信大家早已熟知,它是一种无需下载安装即可使用的轻型应用,具有跨平台和接近 Native App 性能体验的优势.从开发模式上说,它是前后端分离的,微信小程序负责实现前端应用,后端服务可以使用任何你说熟知的开发语言,如 PHP . NodeJs . Java . C# . Python 等,因而,微信小程序的开发文档主要是围绕 WXML . WXSS 等前端框架.组件或样式布局进行讲解,几乎看不到后端技术的身影.本文主要介绍如何在腾讯云服务器上部署 Python+Djang

  • Python Flask 搭建微信小程序后台详解

    前言: 近期需要开发一个打分的微信小程序,涉及到与后台服务器的数据交互,因为业务逻辑相对简单,故选择Python的轻量化web框架Flask来搭建后台程序.因为是初次接触小程序,经过一番摸索和尝试,个人觉得的微信小程序与后台的交互有点像ajax,所以有ajax开发经验的同学开发小程序应该很容易上手,因为本文着重讲解后台程序的搭建,所以,微信小程序的前端开发将一笔带过,有兴趣学习小程序前端语言的同学可移步网易云课堂的一套快速入门课程<轻松玩转微信小程序>. 分三步讲解微信小程序与Python后台

  • python获取微信小程序手机号并绑定遇到的坑

    最近在做小程序开发,在其中也遇到了很多的坑,获取小程序的手机号并绑定就遇到了一个很傻的坑. 流程介绍 官方流程图 小程序使用方法 需要将 <button> 组件 open-type 的值设置为 getPhoneNumber,当用户点击并同意之后,可以通过 bindgetphonenumber 事件回调获取到微信服务器返回的加密数据, 然后在第三方服务端结合 session_key 以及 app_id 进行解密获取手机号. <button open-type="getPhoneN

  • 使用python实现微信小程序自动签到功能

    功能描述目标 完成多账号微信小程序每天自动签到 输出 签到成功则向微信群发送签到成功的信息 否则提示用户签到失败,需手动签到 包管理 requests itchat time threading 程序的结构设计步骤1 获取要发送的json数据:地址 步骤2 向服务器发送请求 步骤3 根据服服务器响应判断签到是否完成 步骤4 微信交互 代码实现使用findler抓包工具查看请求类型 https://reserve.25team.com/wxappv1/yi/index?version=13 可以看

  • 微信小程序实现签到功能

    本文实例为大家分享了微信小程序实现签到功能的具体代码,供大家参考,具体内容如下 效果图: 今天是16号,所以显示已签到,渲染页面时请求后台传的参数为这月签到的日期 如:["16", "14"] 点击签到执行 calendarSign sign.wxml <!--index.wxml--> <view class="calendar"> <view class='bcfff'> <view class=&q

  • 微信小程序 自动登陆PHP源码实例(源码下载)

    微信小程序 自动登陆PHP源码实例 app.js 初始化APP自动登陆 您也可以在任何地方进行用户登陆验证 用法:首先在js文件中定义 var app = getApp(); app.getUserDataToken(); App({ onLaunch: function () { /*初始化APP自动登陆 * 您也可以在任何地方进行用户登陆验证 *用法:首先在js文件中定义 var app = getApp(); app.getUserDataToken(); */ this.getUserD

  • 微信小程序自动客服功能

    微信小程序最近比较火爆,所以抽空做了个客服机器人的小程序,来回答之前坦克游戏中的常见问题.当然这个小程序也很容易修改为其他类型的自动客服,需要做的仅仅是在olami平台加上相应的问题和答案. 整个小程序界面包含2个部分,一部分用于显示回答,一部分为输入框.小程序的核心就是向olami服务器发送http请求,然后处理结果并显示出来.olami接口的详细使用方法可以参考置顶的两篇博客.处理输入的代码如下: bindInput: function (e) { var that = this; var

  • Python实现微信小程序支付功能

    正文 由于最近自己在做小程序的支付,就在这里简单介绍一下讲一下用python做小程序支付这个流程.当然在进行开发之前还是建议读一下具体的流程,清楚支付的过程. 1.支付交互流程 当然具体的参数配置可以参考官方文档https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_3&index=1 2.获取openid(微信用户标识) import requests from config import APPID, SECRET c

  • python实现微信小程序用户登录、模板推送

    Python 实现微信小程序的用户登录 小程序可以通过官方提供的登录邓丽来获取用户身份的标示, 具体文档可以参考 官方文档, 通过流程时序可以看到, 对于需要和前端配合的服务端开发, 主要实现的就是通过小程序提供的 code 换取用户的 openid 和 session_key, 并用换取到的 openid 和 secret_key 作为自定义的登录态. 分析后得知, 作为小程序后端的开发, 主要实现以下几部分内容: 提供一个 HTTP 接口, 供小程序方使用, 传递code; 换取用户身份标识

  • Python Flask微信小程序登录流程及登录api实现代码

    一.先来看看效果 接口请求返回的数据: 二.官方登录流程图 三.小程序登录流程梳理: 1.小程序端调用wx.login 2.判断用户是否授权 3.小程序端访问 wx.getUserInfo 4.小程序端js代码: wx.login({ success: resp => { // 发送 res.code 到后台换取 openId, sessionKey, unionId console.log(resp); var that = this; // 获取用户信息 wx.getSetting({ su

  • 微信小程序实现签到弹窗动画

    本文实例为大家分享了微信小程序实现签到弹窗的具体代码,供大家参考,具体内容如下 效果图如下所示 图片素材: .wxml <button bindtap="popup">签到</button> <view class="load" style="{{sign?'':'top:calc((100vh - 750rpx)/2);opacity: 0;z-index:-1;'}}"> <image class=&

  • 微信小程序连续签到7天积分获得功能的示例代码

    每周每天签到获得积分的案例 功能设计:计算每天签到得1分,显示得到的签到积分,连续签到3天[周一二三]即得+多3分,连续签到7天[周一二三四五六日]+多7分,没有连续即不显示多余的3分或7分的提示- wxml结构: <!--pages/signIn2/signIn2.wxml--> <view class='sign-new'> <view class='in'> <view class='new-head'> <view class='sig-tl'

随机推荐