微信小程序自动签到
功能描述
目标
完成多账号微信小程序每天自动签到
输出
签到成功则向微信群发送签到成功的信息
否则提示用户签到失败,需手动签到
包管理
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&exten