功能
python脚本+腾讯云函数,实现微信疫情通每日自动打卡。
打卡记录展示
我用腾讯云函数每天早上8点定时执行脚本,将打卡结果发送到了自己的邮箱,下面是邮箱中收到的2月2日-2月5日打卡记录,“操作成功”就是打卡成功了。

实现思路
正常打卡时,每天只需要填好表单后点击“提交信息”按钮就完成打卡了,本质上是向某个服务器发送了一个POST请求,将体温、位置等信息提交到服务器。所以只需要知道向哪个服务器提交了什么数据这两个信息,就可以用代码向相同的服务器发送相同的数据实现打卡。将打卡代码放置在云服务器上,让脚本每日定时执行,就能够实现每日自动打卡,可以使用腾讯云函数,非常方便,而且免费的流量也足够用了。
实现过程
首先要找到POST请求的地址
打开微信疫情通打卡页面,点击右上角三个点
复制链接
用电脑Edge浏览器(其他浏览器获取不到地址)打开复制的链接,自动跳转到了登录页面,F12打开浏览器控制台,或者点击鼠标右键再点击检查,因为需要查看登录以及提交表单的数据请求和响应
输入学号,密码登录完成后,把表单信息填写完整,点击“提交信息”按钮,控制台切换到network网络面板,点击XHR,可以看到有两条异步请求信息。其中的save就是向服务器提交体温信息的POST请求,打开之后可以看到POST请求的地址
接下来要弄清POST请求提交的数据。
点击save请求查看提交的数据,经过多次提交测试,比较重要的信息是下面这几个包含地区(area、province、city),时间(date),体温(tw)的字段,我的代码里面只提交了这几个重要的信息。其他字段基本都是汉字拼音首字母缩写,不放心可以把全部字段都提交。
表单怎样和学生对应?
提交的表单信息中并没有学号等信息,那提交的信息怎样和每个学生对应起来呢?
上图是POST请求参数,开始以为是用请求参数中这几个id来标识用户的,但多次测试提交失败之后发现这几个id不能标识用户。回想正常打卡流程,第一次打卡时需要登录,以后打卡就不需要登录了,显然用户登录的信息被保存了下来,以后的打卡只需要将保存的用户信息一并提交,服务器就知道是同一个人。
上图是POST请求头信息,仔细观察,发现请求头中cookies有多个字段,经过多次提交测试,发现其中的两个字段,一个是“eai-sess”,另一个是“UUkey”是与鉴别用户有关的。这两字段在随表单数据一起被提交到了服务器后,服务器根据这两个参数就知道是哪个学生提交的信息。所以要先获取这两个参数。
获取“eai-sess”和“UUkey”参数
这两参数应该是登录时创建的,登录验证就是名为check的POST请求,点击check请求查看请求数据,发现果然是登录成功后,服务器为浏览器设置了这两个cookie。所以只需要再提交一个POST请求模拟登录,解析响应头中Set-Cookie字段就能获取到这两个参数。
整个提交流程如下
graph TD A["
操作目的: 获取eai-sess和UUKey参数
POST请求地址: https://app.xaut.edu.cn/uc/wap/login/check
请求参数: {username: 学号, password: 密码}
用正则表达式匹配响应头Set-Cookie字段中的eai-sess和UUKey
"] --eai-sess 和 UUKey--> B[操作目的: 提交信息, 进行打卡
POST请求地址: https://app.xaut.edu.cn/ncov/wap/default/save
请求参数: 表单中的信息
将提交结果通过邮件发送到手机
]增加发送邮件功能
将提交结果发送到指定的邮箱,当程序运行出现错误时,就能及时接收到通知。发送邮件可以用自己的邮箱给自己的邮箱发送,发送方邮箱要开通SMTP服务。如果不需要发送邮件将主函数中调用发送邮件的语句注释掉。
创建腾讯云函数,让脚本每日自动运行,步骤如下
云函数官方简介“云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码。您只需使用平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码”,具体创建步骤看官方文档。这里需要使用定时触发器来触发代码执行,可以规定每天早上8点定时执行代码进行打卡。部署成功后如下
代码及注意
代码
1 | # 文件名:yqt.py |
- 脚本运行环境为python3.6
- 将主函数中用户列表中的信息替换为自己的信息(学号,密码,省,市,县/区,昵称)
- 若需为多人打卡,在用户列表中append多个用户即可,云函数分配的运行内存配额要足够,否则会抛出异常
- 若需要将执行结果发送到邮箱,需将主函数中yqt.send_detail_mail(content)去掉注释,并将此函数内部的邮箱地址改为自己的,且发送方邮箱必须开通SMTP服务,邮件才能发送成功。
- 要将此代码部署到腾讯云函数,需要将主函数名替换为“def main_handler(event, context)”,细节参考云函数创建流程官方文档
本篇是学习记录,难免有误,欢迎指正。有任何问题可以在Issues里提问。