一文教你全自动打卡,解放你的双手!!!
@TOC
起因
你还在为这种消息而烦恼吗???
反正我很烦这种,然后我就在网上搜索自动化脚本。唉!找到了。本文基本上都是搬运,我自己修改并优化了一下原作者的一些小小的功能。
原作者的项目地址
秃头过程
去年疫情期间,根据学校的,在 支付宝 -> 江西省终身学习卡 -> 小程序 -> 校园防疫 -> 健康签到 进行签到
结果老是忘记被班主任点名
本身也就是软件专业,直接上手干他!
iPhone使用Thor软件抓包,走一遍流程,发现这个小程序就是个套壳网页。
测试中发现cookie不会过期,登陆都省了,图方便直接使用苹果的快捷指令app做了一个发送签到请求的POST,再配合苹果的自动化,完成每日签到。
到了21年寒假,在家闲的胃疼,再加上由于需要帮妹子们(手动狗头)签到,使用快捷指令因为步骤太多很容易失败,于是便有了做程序脚本的想法。再加上个学期的Java学摸鱼摸的有点多,下学期还要学j2ee,就打算使用Java来制作签到脚本。
但是程序员懂得都懂,Java做脚本。。。。。。蛋疼,虽然没学过python,但是寒假帮闺蜜抢华为手机摸索写了个python脚本,也就啥都不怕了,肝就完事了。
写之前在gayhub随手搜了一下,居然发现已经有一位大佬@PrintNow已经使用PHP制作了一个同款脚本Jiangxi-University-Health-Check-in。所以本python脚本除了使用python来实现以外,还进行了一些功能上的优化,同时,这个脚本给了我很多的思路和帮助,包括但不限于:
- 免登陆进入系统
- URL中那串数字
- 关于
street
参数的描述(@ChiuJun)- 这个README文档也是从Jiangxi-University-Health-Check-in扒过来修改的哈哈哈哈哈
🧀 食用方法
很乐意解决你在使用过程中遇到的问题,但我也没系统学过python,只能尽力帮忙,欢迎 issues,尽量把整个程序以及产生的log文件全部上传。
A . 部署到自己的服务器 🐂 (适合自己有服务器的童鞋)
克隆或者下载本项目到本地
修改
sign.py
第4 行签到模式,0表示单人签到 1表示多人签到如果使用单人签到模式,即第一步signs = 0,则修改 第8 行 的yourID为你的学号。
否则,如果使用多人签到模式,即第上一步signs = 0,则11 行的 IDs,每个学号之间同英文 , 分隔开,形如以下的模式:
1
IDs = '学号1,学号2,学号3,学号4'
*Ps:部分学校可能用一卡通号等代替。可以到 https://fxgl.jx.edu.cn/你的高校代码/ 自己尝试一下,(你的高校代码 详见后文 江西省100所高校代码)*
修改第15 行 学校代码(详见后文 江西省100所高校代码)
修改第18 行 身份类型(0表示学生 1表示教职工)(暂不支持教职工,部分细节有差异,如果有老师需要可以提交issues我再修改)
修改第21 行 是否为毕业班级(0表示是毕业班的学生 1表示不是毕业班的学生)
修改第28 行 签到模式 (0表示获取前一日的签到定位,1表示使用输入的经纬度)
因为为了使签到位置产生一点点差异,每次签到都会随机偏移一点。
如果获取前一日的签到定位进行签到,长时间签到可能会偏差较大,适合多人签到且时间跨度不是不长。每次签到会在上一次签到的基础上随机偏移1.1m以内,理论上连续签到一年会偏移200m左右
使用输入的经纬度,单人签到推荐,会在你输入的经纬度定位上随机偏移11.1m以内
如果使用输入的经纬度模式,即上一步中的参数
signType = 1
,则还需要配置32行和34行的经纬度、36行的地址,建议在百度拾取坐标系统找到自己的位置。经度是较大的那个。如果需要server酱推送,可在第38-46行了解详情并配置
部署到虚拟主机或者本机,然后cd到相关文件夹,运行命令
python3 sign.py
即可1
2
3
4
5# Ubuntu 安装 python3 方法,其它如 CentOS 可以网上搜
sudo apt install python3
sudo apt install python3-pip
#安装完成后继续配置python
pip3 install requests对于liunx系统,建议使用
crontab
定时运行上述命令。Windows可以使用定时任务,macOS也有定时。crontab
使用方法可以网上查找资料
B . 部署免费GITHUB服务器(Github Workflows)🔥 (!!推荐!!)(适合自己没有服务器的童鞋)
克隆/派生本项目到你自己的仓库
克隆你的项目到本地,在本地编辑sign.py,同A方案的2-9步骤,然后提交回去
或者直接在GitHub上编辑sign.py并保存
点开你项目的Actions,点击左侧Workflows-All workflows-Auto ZFB XiaoYuanFangYi Sign,点击黄色警示⚠️条右边的Enable workflow
至此,GitHub workflow已经成功开启。默认理想情况下将会在每天的凌晨0点半、9点半、18点半进行三次签到。如果想修改定时时间,可以看下一部分。
C . 部署到腾讯云云函数(免费) 🦄
自己研究咯,只是以前知道这玩意也能免费定时运行代码。
🏪关于GitHub workflow的更多说明
测试一下,怎么知道自己的能不能正常运行呢?
在成功编辑完sign.py和打开workflow后,每次 提交一次push,就可以手动出发运行workflow。此时打开项目的Action,就会发现出了一个新的workflow正在运行或刚刚运行完毕,点击即可查看详情。
点击Do sign可以查看运行详情,当然,每次运行,你的仓库log文件夹下也会自动生成了日志文件,可以进行查看。
如果你配置了SERVER酱,也会将签到日志一起推送。
如果运行失败,你的GitHub绑定的邮箱会收到相关提醒。
以上不仅适用于手动出发的action,每天自动运行的action也是一样的。
怎么修改定时运行的时间?
打开Action,找到一个运行的记录,点击右侧的三个点,再点击View workflow file(推荐)
或者在项目中打开文件夹.github/workflows/autosign.yml
然后点击右上角的笔进入编辑,在第十二行找到:
1 | - cron: '30 */9 * * *' |
至于cron的用法,大家具体百度。要注意的是,这里的时间是UTC协调世界时,简单的说,就是要在你理解的北京时间上减去8小事。比如凌晨一点,这里你要输入17点(|1点-8小时|),凌晨十二点,这里你要输入16点(|0点-8小时|),随后右上角提交即可。
注意!github action存在一定的延迟,测试发现可能是几分钟,也可能是几十分钟,也可能是一个多小时。所以到了定时时间却没有运行请不必担心,等一天你再看看。
❗ 关于 street
参数与 zddlwz
参数(平常使用支付宝和微信进行签到的童鞋直接略过)
原项目文档描述:
基于对签到数据的改动较以往数据尽量小的原则,作详细说明(感谢原项目 @ChiuJun >
issues: street参数确定是可选项吗? )
定位部分为三个环境:
支付宝环境
支付宝环境需要street
参数,参考支付宝H5开放文档street
参数由返回结果的pois[0].address
与pois[0].name
拼接而成,最后再拼接成address.zddlwz
1
2
3address.street = result.pois[0].address + result.pois[0].name;
//...
var zddlwz =address.province+address.city+address.district+address.street;而
Singleton.php
中$street
为空,并且没有将$street
拼接至zddlwz
,所以造成了本签到程序提交的签到记录中缺失具体的街道信息。
考虑到大部分人的环境都是支付宝,建议将具体的街道信息加入到POST参数中
修改Singleton.php
第 92 行为1
"zddlwz" => $province . $city . $district . $street,//自动地理位置:省市县(区)街道 拼接结果
微信环境
微信环境中同样需要street
参数,并且不同于支付宝环境,微信环境中street
参数不包含streetNumber
信息,拼接地理位置时zddlwz
同样需要详细到街道号。
至于street
参数中具体填什么,建议自行查看微信小程序开发者文档。1
2
3address.street = addComp.street;
//...
address.zddlwz = addComp.province+addComp.city+addComp.district+addComp.street+addComp.streetNumber;H5环境
H5环境street
参数为可选项,对于H5环境的同学,不需要对Singleton.php
做额外更改。1
var addressStr = address.province + address.city + address.district;
备注:由于据了解大家基本上都是使用的支付宝环境,所以本脚本不对H5环境,也就是通过浏览器进行签到的情况不做适配。(我感觉没有使用浏览器签到的,大家应该都是用的支付宝吧,如果有,提交issues,我再进行适配。)
🎨 相关 API 说明
登录 API
https://fxgl.jx.edu.cn/学校标识码/public/homeQd?loginName=你的学号&loginType=0
签到 API
签到记录页面
是否签到
https://fxgl.jx.edu.cn/学校标识码/studentQd/studentIsQd
data为1即为已经签到
签到记录API
https://fxgl.jx.edu.cn/学校标识码/studentQd/pageStudentQdInfoByXh
百度地图API
从这个签到系统里提取出的ak,正好省了我们去申请
🙇 感谢名单
感谢它们对本文做出的巨大贡献
💻测试环境
系统:macOS Big Sur 11.3 BETA ubuntu18.04
python版本:Python 3.9
🙋♀️ 未来计划
可能会有,可能不会有
- 加入多人签到的完整支持
- 支持通过server酱进行签到成功/失败通知
- 配合GitHub Action达到利用GitHub来做服务器免费进行签到
- 通过获取上一次的签到记录进行签到,并进行随机偏移
- 支持通过QQ机器人(httpAPI)插件进行签到成功/失败通知
我优化的功能
在sign.py下加入的代码
我优化的主要是原作者是每一天都会重复打卡三次,所以我的手机每一天都重复收到三次消息,就很麻烦。而且使用多人打卡的话,每一个间隔时间就只有几秒钟,长时间有点危险,我就被坑,被辅导员发现了,然后我就优化了。
==这里的意思是每一天太平洋时间4点8点和0点运行本程序,由于太平洋时间和北京时间相差8个小时==
==我所优化的功能一定要按照我三张图片去添加,不然的话还是用原作者的。当然最好是自己主动打卡。==
放心食用,我已经食用了一两个月了。。👨🍳👨🍳👨🍳