西电健康卡自动打卡脚本部署及使用
健康卡填报
前言
今天是2022年10月9日,新冠疫情已经持续2年多了,因为“在学校”经常要填报健康卡,所以今天分享一个快捷的自动化填报工具,亲测有效,非常好用。
本人已fork该项目,项目地址:[🔗西电健康卡自动打卡脚本]
西安电子科技大学健康卡自动打卡脚本,基于 Puppeteer,一种无头(无界面) Chromium 浏览器。因为是基于真实的浏览器,所以相当于模拟真实操作。与直接发送 POST 请求相比,能够更稳定的工作,即使网页提交表单新增或减少字段,它也都能对付,有较强的自适应能力。理论上只要前端不发生大变化就能正常工作。因为是启动了真正的浏览器,所以运行起来会相对慢一些。不过打卡追求什么效率呢?打上就行了!
开学后在校状态是要从填报健康卡转为填报晨午晚检,这里作者提供了一个解决方案:苹果用户可以用[快捷]指令完成该自动化打卡操作,来看晨午晚检自动化快捷指令,可以设置个人自动化定时运行哦。再次说明,仅限 iPhone、iPad 和 Mac 用户。
接下来步入正题:如何使用该脚本呢?该项目提供了两种部署方案:「GitHub Actions 部署」和「自行部署」。前者部署方法简单,也不需要服务器或者不关机的电脑,所以个人更推荐前者,若对后者感兴趣,可自行去项目仓库阅读README文档。
使用前须知
第一次使用前,请确保在你的所在城市至少手动打卡过一次,获取对应打卡的JSON数据,并且开启自动打卡后中途不再切换城市。
GitHub Actions 部署(推荐)
1. Fork 本仓库
点击右上角的「Fork」按钮。
2. 获取位置信息
在这个页面获取位置信息。
- 点击「获取定位信息」。
- 若提示需要权限,请允许。
- 获取成功后,点击「复制打卡用数据」,此时位置信息已存储至剪贴板。
位置信息示例(仅作参考,数据已进行脱敏处理):
{
"type": "complete",
"position": {
"Q": xxxxxxx,
"R": xxxxxxx,
"lng": xxxxxxx,
"lat": xxxxxxx
},
"location_type": "html5",
"message": "Get ipLocation failed.Get geolocation success.Convert Success.Get address success.",
"accuracy": xxxxxxx,
"isConverted": true,
"status": xxxxxxx,
"addressComponent": {
"citycode": "xxxxxxx",
"adcode": "xxxxxxx",
"businessAreas": [],
"neighborhoodType": "",
"neighborhood": "",
"building": "",
"buildingType": "",
"street": "二环xxxxxxx",
"streetNumber": "xxxxxxx号",
"country": "中国",
"province": "陕西省",
"city": "xxxxxxx",
"district": "xxxxxxx",
"towncode": "610113xxxxxxx",
"township": "xxxxxxx"
},
"formattedAddress": "陕西省xxxxxxx",
"roads": [],
"crosses": [],
"pois": [],
"info": "SUCCESS"
}
3. 设置 Secrets
该步骤设置你的信息。
- 如图所示:依次点开「Settings → Secrets → Actions」,点击「New repository secret」。
- Name 填入
USERNAME
,Value 填入你的学号。 - 点击「Add secret」,此时你已经成功新建了一个 repository secret,Name 为
USERNAME
,Value 为你的学号。 - 同理,新建一个 repository secret,Name 为
PASSWORD
,Value 为你的密码。 - 同理,新建一个 repository secret,Name 为
GEO_INFO
,Value 为你的位置信息,请粘贴刚才复制的位置信息。
经过以上步骤,脚本就配置完成了。
4. 测试 Actions
启用 Actions
⬇️ 点击「Actions」,点击那个大大的绿色按钮。
⬇️ 在左侧选择「Auto Health Card Check-in」,点击「Enable workflow」。
⬇️ 手动运行一次。
等待运行结果即可。如果运行成功会显示绿色的 ✅。
⬇️ 如果想以后再手动运行可以这样。
查看更详细的运行结果
-
点击你想看的运行记录「Auto Health Card Check-in」。
-
点击「run」。
-
展开「Run Script」。
-
从第 4 行(行号为 4 的行)起,就是脚本的输出了。
-
正常的输出应该是
操作成功
或者今天已经填报了
。如有不正常的输出请先看 FAQs,若仍未解决请提出 Issues。
如果一切顺利,到这里你的 Actions 已经配置好了,它将会在每天北京时间上午 8:40 自动填写健康卡,无需手动干预。如果打卡失败了,GitHub 会发送邮件通知。
5. 高级设置(可选)
默认配置是每天早上 8:40 进行打卡,如果你有需要更改定时的需求,请阅读此版块。
你可以编辑 .github/workflows 文件夹里的 run-script.yml 以进行自定义配置。
打开这个文件,点击右边的「✏️ Edit this file」按钮可以进行编辑。
该配置文件的第 6 行与定时相关,是一个 cron 表达式。
40 0,8 * * *
这五项分别代表:分,时,日,月,星期。
表示每天 UTC 时间 0:40 和 8:40,即北京时间 8:40 和 16:40 执行此 action。(多执行一次保险)
北京时间的小时数减去 8 就是 UTC 时间了。如果减出来是个负数,请加上 24,所以注意换算哦。
这里举几个例子:
0 23 * * *
:每天 UTC 时间 23:00,即北京时间 7:00 执行。30 10 * * *
:每天北京时间 18:30 执行。
所以看到这里,我相信你应该明白如何修改打卡时间了。
修改后点击「Start commit」,在弹出窗口中点击「Commit changes」即可保存修改。
更多 cron 表达式的高级用法请看这里。
6. FAQs
为什么我运行时,详细的输出里面显示 Timeout?
- 检查学号和密码是否填写正确,如果不确定请更新(Update)
USERNAME
和PASSWORD
两个 secrets 的值。 - 确定至少在所在城市手动打卡过一次。
- 检查定位信息是否和上一次手动打卡的信息在同一城市,如果不确定请手动打卡一次,并紧接着更新
GEO_INFO
的值(获取位置信息的网页)。 - 检查是否在打卡时间范围内,如果不在打卡时间范围内则无法提交。
如何停用脚本?
方法 1
编辑 .github/workflows 文件夹里的 run-script.yml。将第 5 行和第 6 行注释掉(在这两行行首插入 #
)或者删除。
完成操作后,点击「Start commit」,在弹出窗口中点击「Commit changes」即可保存修改。
这样定时就取消了。
方法 2
点开「Settings → Actions → General」,选择「Disable Actions」,点击 Save 后即可禁用 Actions。
晨午晚检填报
最后也考虑到有些小伙伴可能需要晨午晚检的自动化脚本,这里给出别人的项目地址,和上面的部署方式雷同,都通过Github Action来执行,而且该项目同时带了健康卡和晨午晚检的脚本。项目地址:https://github.com/S1mpleBug/xdncov
自动化部署方式:Fork到自己的仓库,然后点击仓库右上角Settings,在侧边栏Security中选中Secrets->Action,添加两个名分别为ID与PASSWD的Secrets,分别对应学号和统一认证密码,添加完成后在上方Action中点击Run workflow并选择xdncov.yml,成功执行后查看日志,若显示填报成功则自动运行成功,并会在每天的8点10分、12点10分、18点10分自动填报,
如果担心晨午晚检填报有遗漏,可以早中晚各填报两次,修改yml文件,可参考第一个项目的方式,在cron部分第二个字段用逗号隔开即可。
上图为第一个项目的方式,下图为第二个项目晨午晚检项目的方式:
修改为:- cron: "10 0,1,4,5,10,11 * * *"
即可,代表填报时间为:8.10
、9.10
、12.10
、13.10
、18.10
、19.10
。避免漏填。
上面晨午晚检项目运行结果(因为是大晚上,非正常填报时间,所以无法填报,明儿早上测试通过后我会补充执行结果图),先放几张自动化脚本执行的图片:
上面是两个脚本workflows,因为健康卡脚本功能我们在上面那个项目用到了,这里只运行第二个脚本xdncov
即可。
补充:2022年10月12日早,第二天早上补充结果,打卡成功截图~:
总结
以上就是该自动打卡脚本的部署和使用教程,切记只有当健康卡或者晨午晚检打卡成功后才会自动化执行,若修改了yml配置文件,修改完毕后需要手动打卡一次以后才会自动化执行。
西安最近疫情又严重了,2022年10月11日晚(封校前的一晚,据说封校到14日,希望不会太久吧)。最后还是希望疫情快点结束啊!! 😭😭😭
2022-11-09更:疫情好转点儿了,请假目前是可以进出学校的。可是华子还没有开奖,爱信等..(2022-12-24 等到了!)