我在校园自动打卡程序:zimin9/WoZaiXiaoYuanPuncher 的 Github Action 版。
基于原仓库中 @Chorer 贡献的腾讯云函数版脚本修改。
如脚本运行有任何问题,请先参考文末常见问题;如实在无法解决,请在本仓库直接发issue描述你的问题。不留联系方式,不接受私下交流。
请勿骚扰他人,包括但不限于:在已有issue中回复无关内容、在我的个人博客中留言脚本相关问题。谢谢合作。
更新日志
-
2022.01.24 新增 支持自定义打卡问题的选项或回答。
-
2021.12.25 修复 pushplus 的推送问题。
-
2021.11.17 新增 支持基于 go-cqhttp 的 QQ 机器人推送。
-
2021.10.08 新增 支持钉钉机器人推送。
🎉 感谢 @baifan97 的贡献!
-
2021.09.28 修复无法更新 jwsession 的问题。
-
2021.09.19 新增 支持多账户。
⚠重要提醒: 该版本对配置文件中调用配置的默认参数进行了修改,请旧有用户 Fetch 最新代码后,删除原有的 Secret 和 Environment,并参考新的文档重新配置所有参数。
-
2021.09.03 新增 支持喵推送。
-
2021.08.04 新增 支持多种通知方式(Serverchan-Turbo、pushplus、Bark)。
🎉 感谢 @LeslieLeung 的贡献!
-
添加脚本
wzxy-healthcheck.py
,适配部分学校的打卡项目“健康打卡”。关于本项目中的两个脚本:
-
wzxy-dailyreport.py
,对应打卡项目“日检日报”(一天多时段打卡,需要提交位置信息与体温信息)。 -
wzxy-healthcheck.py
,对应打卡项目“健康打卡”(一天只需打卡一次,仅需提交位置信息)。
两个脚本请按需启用,详见下方使用指南。
-
-
利用 actions/cache@v2 实现缓存 jwsession,避免频繁登录可能导致的账号登录问题。
-
利用 Github Action 的 Secrets 加密储存所有配置信息,任何人都无法从项目仓库中直接读取这些敏感信息。
-
支持多用户/多地点打卡,利用 Github Action 的 Environment 实现多配置文件的储存。
-
对原代码部分逻辑结构进行修改优化。
-
支持多种通知方式(Serverchan-Turbo、pushplus、Bark、喵推送、QQ机器人(go-cqhttp)、钉钉机器人)
欢迎 Issue & Pull request !
- 对小程序进行抓包,抓取自己的打卡数据,请参见文末抓包教程。
- 在小程序 我的-设置 中修改自己的密码。
- 注意:密码为6-12位
- 修改完成后请勿马上重新登陆
-
点击本仓库页面中右上角的
Fork
按钮。 -
稍等片刻,将自动跳转至新建的仓库。
如需配置多用户,请参考文末“其他需求”中的介绍。
-
在新建的仓库页面,点击选项
Settings
,进入项目仓库设置页面。 -
在左方侧边栏点击选项
Environments
,点击右上角按钮New environment
创建用于存放用户配置的 Environment,命名为WZXY_CONFIG_01
。
-
进入新建的 Environment ,在 “Environment Secrets” 一栏中点击
Add Secret
按钮,根据需要新建下列的 Secret,并填写对应 Value 值:基本参数
由于不同的学校情况与实际需求,以下数据需要自行抓取。
-
USERNAME
:我在校园账号的用户名。 -
PASSWORD
:我在校园账号的密码。 -
CACHE_NAME
:值任意,用于储存 jwsession 的缓存文件的前缀名。为避免信息泄露,建议使用包含数字与大小写英文的无序字符串,且长度在32位以上(可以尝试键盘乱打 or 使用生成器)。请注意:配置多账户打卡时,不同环境中的
CACHE_NAME
不能相同!! -
TEMPERATURE
(可选):打卡提交体温信息时使用的体温值,数值要求精确到1位小数。可以仅指定一个温度值(例:36.0
),也可以指定温度值范围,两个温度值间使用符号~
连接(例:36.1~36.3
),打卡时将随机从指定的范围中选取一个值作为体温数据提交。如不创建该 Secret,脚本将使用默认值36.0~36.5
。 -
ANSWERS
(可选):打卡时所提交的选项回答,对应抓包信息中的“answers”。可以通过该 Secrect 自定义打卡问题的选项或回答。对于健康打卡
wzxy-healthcheck.py
,你可以通过修改体温相关的回答为%TEM%
,让脚本每次打卡时根据上面TEMPERATURE
的设置自动生成体温。例:健康打卡的抓包结果中,anwsers字段对应的value为
["0","36.2","无"]
;即:第2个关于体温的回答为36.2。如果直接将抓到的
["0","36.2","无"]
作为新建SecrectANSWERS
的值,那么脚本将一直使用36.2回答第2个关于体温的问题。你也可以将填到Secrect
ANSWERS
里的值改为["0",%TEM%,"无"]
。这样,脚本将根据上面SecrectTEMPERATURE
的设置,每次打卡时选取一个体温值;如果你没有创建SecrectTEMPERATURE
,脚本将在默认的范围36.0~36.5
中随机选取。 -
LATITUDE
:打卡该项目时所提交位置信息的纬度,对应抓包信息中的 “latitude”。 -
LONGITUDE
:打卡该项目时所提交位置信息的经度,对应抓包信息中的 “longitude”。 -
COUNTRY
:打卡该项目时所提交位置信息的经度,对应抓包信息中的 “country”。 -
CITY
:打卡该项目时所提交位置信息的市,对应抓包信息中的 “city”。 -
CITY_CODE
:打卡该项目时所提交位置信息的城市编码, 对应抓包信息中的 “city”。 -
DISTRICT
:打卡该项目时所提交位置信息的区,对应抓包信息中的 “district”。 -
PROVINCE
:打卡该项目时所提交位置信息的省,对应抓包信息中的 “province”。 -
TOWNSHIP
:打卡该项目时所提交位置信息的街道,对应抓包信息中的 “township” 。 -
STREET
:Value 值填写 打卡该项目时所提交位置信息的路,对应抓包信息中的 “street”。
如果需要两个打卡项目所需提交的地理位置信息不一样(比如“日检日报”在校打卡,“健康打卡”在家打卡),可以分别抓取两个打卡项目的提交数据,并参考文末“常见问题 - 3.如何配置多账户/多地点打卡?” 新建 Environment 并配置对应 Secect。
推送服务(可选)
目前支持的推送方式:
- Serverchan-Turbo
- Bark
- pushplus
- 钉钉机器人
- QQ机器人(go-cqhttp)
需要使用哪一种方式推送,创建该方式对应的 Secret 即可。
可以同时推送多个渠道,只需额外创建这些推送方式对应的 Secret 即可。
如不创建这些推送方式对应的 Secret,则不会推送打卡结果通知。
Serverchan-Turbo
SCT_KEY
(可选):填写自己 Serverchan-Turbo 的 SendKey,用于 Serverchan-Turbo 推送打卡结果的通知。
Bark
BARK_TOKEN
(可选):填写自己 Bark 的推送 URL。形如
http://yourdomain.name/thisisatoken
,用于 Bark 推送打卡结果的通知;请注意不要以斜杠结尾。为避免输入错误,建议从 Bark 客户端直接复制。
pushplus
PUSHPLUS_TOKEN
(可选):填写自己 pushplus 的 token,用于 pushplus 推送打卡结果的通知。⚠本脚本使用的 pushplus 地址为www.pushplus.plus,并非百度搜索的第一个结果,请注意甄别。
喵提醒
MIAO_CODE
(可选):填写 喵提醒 的喵码,需要先创建提醒获取,具体见喵推送公众号,用于 喵提醒 推送打卡结果的通知。
钉钉机器人
-
DD_BOT_ACCESS_TOKEN
(可选):钉钉机器人推送 Token,填写机器人的 Webhook 地址中的 token。只需https://oapi.dingtalk.com/robot/send?access_token=XXX
等于=符号后面的XXX即可。 -
DD_BOT_SECRET
(可选):钉钉机器人推送SECRET。官方文档如需配置钉钉机器人,上述的
DD_BOT_ACCESS_TOKEN
和DD_BOT_SECRET
两条 Secrect 都需创建。
QQ机器人(go-cqhttp)
-
GOBOT_URL
(可选):go-cqhttp 推送的 URL推送到个人QQ:
http://127.0.0.1/send_private_msg
推送到群:
http://127.0.0.1/send_group_msg
-
GOBOT_TOKEN
(可选):填写在go-cqhttp文件设置的访问密钥access-token
,可不填 -
GOBOT_QQ
(可选):go-cqhttp如果GOBOT_URL设置 /send_private_msg 则需要填入 user_id=个人QQ,相反如果是 /send_group_msg 则需要填入 group_id=QQ群如需配置基于 go-cqhttp 的 QQ 机器人推送,上述的
GOBOT_URL
和GOBOT_QQ
为必填项,GOBOT_TOKEN
可为空。详情请参考:go-cqhttp相关API
-
脚本的触发运行时间由项目仓库内.github/workflows
的两个 Workflow 文件配置:
-
wzxy_dailyreport.yml
-
对应脚本“
wzxy-dailyreport.py
”(打卡项目“日检日报”)。 -
默认在每天北京时间 0:30 执行。
-
-
wzxy_healthcheck.yml
-
对应脚本“
wzxy-healthcheck.py
”(打卡项目“健康打卡”)。 -
默认在每天北京时间 7:30 和 20:30 执行。
-
如果需要修改脚本的运行时间:
-
点击页面上方选项
Code
,回到项目仓库主页。 -
点击文件夹
.github/workflows
,修改所需要的 Workflow 文件。以修改
wzxy_dailyreport.yml
为例: -
修改完成后,点击页面右侧绿色按钮
Start commit
,然后点击绿色按钮Commit changes
。注意:
出于开发者个人使用需要,
wzxy_healthcheck.yml
里设定的environment
参数默认为environment: WZXY_CONFIG_02
;如果你严格按照上述教程操作且没有多账户/多地点打卡需要,请找到该行代码并将02改为01。
关于多账户/多配置文件的设置,请参考文末“常见问题”
-
点击页面上方选项
Actions
,进入 Github Actions 配置页面。 -
左侧边栏点击需要测试的脚本:
WZXY_DailyReport
:对应脚本“wzxy-dailyreport.py
”,打卡项目“日检日报”。WZXY_HealthCheck
:对应脚本“wzxy-healthcheck.py
”,打卡项目“健康打卡”。
以测试 WZXY_DailyReport
为例:
-
在未自行打卡的打卡时段,点击右侧按钮
Run workflow
,再次点击绿色按钮Run workflow
。 -
等待几秒后刷新页面。
-
2分钟后登入我在校园小程序;如无意外,打卡将被完成;如果你正确配置了 PUSH_TOKEN,应同时在2分钟内收到微信消息推送。
-
如果出现以下情况:
- 2分钟后仍未自动打卡。
- Github Actions 界面最新的 workflow run
WZXY_HealthCheck
状态为红色错误。 - 以及其他错误情况。
请在Github Actions 配置界面中,打开最新的 Workflow run
WZXY_HealthCheck
,查看错误日志,并检查自己的参数配置是否正确。
两个脚本对应的 Workflow 都默认开启定时执行任务,如果你无需使用/需要暂时停用某一脚本,请参照以下步骤停用其对应的 Workflow:
- 在 Github Actions 配置页面中,左侧边栏选择需要停用的脚本所对应的 Workflow。
- 点击搜索栏右边的
...
按钮,然后点击Disable workflow
。
-
即便所配置的密码正确,脚本执行时仍然提示
用户名或密码错误,还可尝试*次
?- 在小程序中重新修改密码。
- 修改密码后不要马上在小程序上重新登陆。
- 更新对应用户配置文件中的 Secret
PASSWORD
,填写新密码。 - 再次尝试运行脚本,查看是否正常登陆并获取 jwsession。
- 如仍有问题,请在确保配置文件中密码信息正确的后提 issue。
-
日检日报提交的选项不对?/ 提示
服务出错(500)
?- 请参照 Step2 中的介绍,创建并填写 Secrect
ANSWERS
。
- 请参照 Step2 中的介绍,创建并填写 Secrect
-
如何配置多账户/多地点打卡?
- 参照 Step 2,新建并配置另一环境;环境名建议保持
WZXY_CONFIG_**
的格式。 - 参考 Step 3,打开打卡脚本所对应的 workflow 文件,复制末尾的多账户配置示例代码,注销注释后填写另一配置的环境名即可。
- 参照 Step 2,新建并配置另一环境;环境名建议保持
-
打卡不准时?
- Github Action服务器使用的时间是UTC,设置定时时请注意转换为北京时间(UTC+8)。
- Github Action执行计划任务需要排队,并不会准时运行脚本,大概会延迟1h左右,请注意规划时间。
-
需要其他推送通知渠道?
- 请提 issue 或参考代码自行实现。
-
其他问题?
- 欢迎提 issue。
-
在电脑上安装配置好 Fiddler。
-
启动微信电脑版和 Fiddler,打开我在校园小程序,先手动打卡一次日检日报/健康打卡。
-
提交打卡信息的同时观察 Fiddler 左侧栏中最新出现的 Host 为
student.wozaixiaoyuan.com
的信息(如果打卡的是日检日报,URL 为/heat/save.json
;健康打卡则为/health/save.json"
)。 -
双击打开这条信息,然后点击右侧上方的
WebForms
一栏,对照显示抓取到的信息填写 Environment Secrets 就可以了。 -
Fiddler 配置与抓包操作参考:
- 解耦推送模块
-
why20hh/WoZaiXiaoYuan-SVTCC ,健康打卡脚本参考了其代码。
-
@LeslieLeung ,贡献了对多种通知方式(Serverchan-Turbo、PushPlus、Bark)的支持。
-
本项目仅供编程学习/个人使用,请遵守Apache-2.0 License开源项目授权协议.
-
请在国家法律法规和校方相关原则下使用。
-
开发者不对任何下载者和使用者的任何行为负责。
-
程序使用的所有信息均利用 Github 的 Secrets 加密储存。