西电健康卡自动打卡脚本部署及使用

健康卡填报

前言

今天是2022年10月9日,新冠疫情已经持续2年多了,因为“在学校”经常要填报健康卡,所以今天分享一个快捷的自动化填报工具,亲测有效,非常好用。

本人已fork该项目,项目地址:[🔗西电健康卡自动打卡脚本]

西安电子科技大学健康卡自动打卡脚本,基于 Puppeteer,一种无头(无界面) Chromium 浏览器。因为是基于真实的浏览器,所以相当于模拟真实操作。与直接发送 POST 请求相比,能够更稳定的工作,即使网页提交表单新增或减少字段,它也都能对付,有较强的自适应能力。理论上只要前端不发生大变化就能正常工作。因为是启动了真正的浏览器,所以运行起来会相对慢一些。不过打卡追求什么效率呢?打上就行了!

开学后在校状态是要从填报健康卡转为填报晨午晚检,这里作者提供了一个解决方案:苹果用户可以用[快捷]指令完成该自动化打卡操作,来看晨午晚检自动化快捷指令,可以设置个人自动化定时运行哦。再次说明,仅限 iPhone、iPad 和 Mac 用户。

接下来步入正题:如何使用该脚本呢?该项目提供了两种部署方案:「GitHub Actions 部署」和「自行部署」。前者部署方法简单,也不需要服务器或者不关机的电脑,所以个人更推荐前者,若对后者感兴趣,可自行去项目仓库阅读README文档。

使用前须知

第一次使用前,请确保在你的所在城市至少手动打卡过一次,获取对应打卡的JSON数据,并且开启自动打卡后中途不再切换城市。

GitHub Actions 部署(推荐)

1. Fork 本仓库

点击右上角的「Fork」按钮。

2. 获取位置信息

这个页面获取位置信息。

  1. 点击「获取定位信息」。
  2. 若提示需要权限,请允许。
  3. 获取成功后,点击「复制打卡用数据」,此时位置信息已存储至剪贴板。

位置信息示例(仅作参考,数据已进行脱敏处理):

{
    "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

该步骤设置你的信息。

image
  1. 如图所示:依次点开「Settings → Secrets → Actions」,点击「New repository secret」。
  2. Name 填入 USERNAME,Value 填入你的学号。
  3. 点击「Add secret」,此时你已经成功新建了一个 repository secret,Name 为 USERNAME,Value 为你的学号。
  4. 同理,新建一个 repository secret,Name 为 PASSWORD,Value 为你的密码。
  5. 同理,新建一个 repository secret,Name 为 GEO_INFO,Value 为你的位置信息,请粘贴刚才复制的位置信息。

经过以上步骤,脚本就配置完成了。

4. 测试 Actions

启用 Actions

⬇️ 点击「Actions」,点击那个大大的绿色按钮。
image

⬇️ 在左侧选择「Auto Health Card Check-in」,点击「Enable workflow」。
image

⬇️ 手动运行一次。
image

等待运行结果即可。如果运行成功会显示绿色的 ✅。

⬇️ 如果想以后再手动运行可以这样。
image

查看更详细的运行结果

  1. 点击你想看的运行记录「Auto Health Card Check-in」。
    image

  2. 点击「run」。
    image

  3. 展开「Run Script」。
    image

  4. 从第 4 行(行号为 4 的行)起,就是脚本的输出了。

  5. 正常的输出应该是 操作成功 或者 今天已经填报了。如有不正常的输出请先看 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?
image
  1. 检查学号和密码是否填写正确,如果不确定请更新(Update)USERNAMEPASSWORD 两个 secrets 的值。
  2. 确定至少在所在城市手动打卡过一次。
  3. 检查定位信息是否和上一次手动打卡的信息在同一城市,如果不确定请手动打卡一次,并紧接着更新 GEO_INFO 的值(获取位置信息的网页)。
  4. 检查是否在打卡时间范围内,如果不在打卡时间范围内则无法提交。
如何停用脚本?

方法 1

image

编辑 .github/workflows 文件夹里的 run-script.yml。将第 5 行和第 6 行注释掉(在这两行行首插入 #)或者删除。
完成操作后,点击「Start commit」,在弹出窗口中点击「Commit changes」即可保存修改。
这样定时就取消了。

方法 2

image

点开「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部分第二个字段用逗号隔开即可。
image
上图为第一个项目的方式,下图为第二个项目晨午晚检项目的方式:
image

修改为:- cron: "10 0,1,4,5,10,11 * * *"即可,代表填报时间为:8.109.1012.1013.1018.1019.10。避免漏填。


上面晨午晚检项目运行结果(因为是大晚上,非正常填报时间,所以无法填报,明儿早上测试通过后我会补充执行结果图),先放几张自动化脚本执行的图片:
image
上面是两个脚本workflows,因为健康卡脚本功能我们在上面那个项目用到了,这里只运行第二个脚本xdncov即可。
image


补充:2022年10月12日早,第二天早上补充结果,打卡成功截图~:
image

总结

以上就是该自动打卡脚本的部署和使用教程,切记只有当健康卡或者晨午晚检打卡成功后才会自动化执行,若修改了yml配置文件,修改完毕后需要手动打卡一次以后才会自动化执行。

西安最近疫情又严重了,2022年10月11日晚(封校前的一晚,据说封校到14日,希望不会太久吧)。最后还是希望疫情快点结束啊!! 😭😭😭


2022-11-09更:疫情好转点儿了,请假目前是可以进出学校的。可是华子还没有开奖,爱信等..(2022-12-24 等到了!)

posted @ 2022-10-09 12:20  miseryjerry  阅读(395)  评论(0编辑  收藏  举报