Skip to content

我在校园自动打卡程序:WoZaiXiaoYuanPuncher 的 Github Action 版。

License

Notifications You must be signed in to change notification settings

yhw03/Actions-WoZaiXiaoYuanPuncher

 
 

Repository files navigation

WoZaiXiaoYuanPuncher-Actions

我在校园自动打卡程序: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 !

使用指南

Step0 准备工作

  • 对小程序进行抓包,抓取自己的打卡数据,请参见文末抓包教程
  • 在小程序 我的-设置 中修改自己的密码。
    • 注意:密码为6-12位
    • 修改完成后请勿马上重新登陆

Step1 Fork本仓库

step1.1

  • 点击本仓库页面中右上角的 Fork 按钮。

  • 稍等片刻,将自动跳转至新建的仓库。

Step2 配置打卡参数

如需配置多用户,请参考文末“其他需求”中的介绍。

  • 在新建的仓库页面,点击选项 Settings,进入项目仓库设置页面。

  • 在左方侧边栏点击选项 Environments,点击右上角按钮 New environment 创建用于存放用户配置的 Environment,命名为 WZXY_CONFIG_01

step2.1

  • 进入新建的 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个关于体温的问题。

      你也可以将填到SecrectANSWERS里的值改为["0",%TEM%,"无"]。这样,脚本将根据上面SecrectTEMPERATURE的设置,每次打卡时选取一个体温值;如果你没有创建SecrectTEMPERATURE,脚本将在默认的范围36.0~36.5中随机选取。

    • LATITUDE:打卡该项目时所提交位置信息的纬度,对应抓包信息中的 “latitude”。

    • LONGITUDE:打卡该项目时所提交位置信息的经度,对应抓包信息中的 “longitude”。

    • COUNTRY:打卡该项目时所提交位置信息的经度,对应抓包信息中的 “country”。

    • CITY:打卡该项目时所提交位置信息的市,对应抓包信息中的 “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_TOKENDD_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_URLGOBOT_QQ 为必填项,GOBOT_TOKEN可为空。

      详情请参考:go-cqhttp相关API

Step3 配置脚本运行时间

脚本的触发运行时间由项目仓库内.github/workflows的两个 Workflow 文件配置:

  • wzxy_dailyreport.yml

    • 对应脚本“wzxy-dailyreport.py”(打卡项目“日检日报”)。

    • 默认在每天北京时间 0:30 执行。

  • wzxy_healthcheck.yml

    • 对应脚本“wzxy-healthcheck.py”(打卡项目“健康打卡”)。

    • 默认在每天北京时间 7:30 和 20:30 执行。

如果需要修改脚本的运行时间:

step3.1

  • 点击页面上方选项 Code,回到项目仓库主页。

  • 点击文件夹.github/workflows,修改所需要的 Workflow 文件。

    以修改wzxy_dailyreport.yml为例:

    • 点击wzxy_dailyreport.yml,进入文件预览。

    • 点击预览界面右上方笔的图标,进入编辑界面。

      step3.2

    • 根据自己的打卡时间需要,修改代码中的 cron 表达式:

      cron是个啥?百度一下!

      step3.3

      定时注意事项:

      • Github Actions 用的是世界标准时间(UTC),北京时间(UTC+8)转换为世界标准时需要减去8小时。
      • Github Action 执行计划任务需要排队,脚本并不会准时运行,大概会延迟1h左右,请注意规划时间。
  • 修改完成后,点击页面右侧绿色按钮 Start commit,然后点击绿色按钮 Commit changes

    注意:

    出于开发者个人使用需要,wzxy_healthcheck.yml里设定的environment参数默认为environment: WZXY_CONFIG_02

    如果你严格按照上述教程操作且没有多账户/多地点打卡需要,请找到该行代码并将02改为01。

    关于多账户/多配置文件的设置,请参考文末“常见问题”

Step4 手动测试脚本运行

  • 点击页面上方选项 Actions,进入 Github Actions 配置页面。

  • 左侧边栏点击需要测试的脚本:

    • WZXY_DailyReport:对应脚本“wzxy-dailyreport.py”,打卡项目“日检日报”。
    • WZXY_HealthCheck:对应脚本“wzxy-healthcheck.py”,打卡项目“健康打卡”。

以测试 WZXY_DailyReport 为例:

step4.1

  • 在未自行打卡的打卡时段,点击右侧按钮 Run workflow,再次点击绿色按钮 Run workflow

  • 等待几秒后刷新页面。

  • 2分钟后登入我在校园小程序;如无意外,打卡将被完成;如果你正确配置了 PUSH_TOKEN,应同时在2分钟内收到微信消息推送。

  • 如果出现以下情况:

    • 2分钟后仍未自动打卡。
    • Github Actions 界面最新的 workflow run WZXY_HealthCheck 状态为红色错误。
    • 以及其他错误情况。

    请在Github Actions 配置界面中,打开最新的 Workflow run WZXY_HealthCheck,查看错误日志,并检查自己的参数配置是否正确。

两个脚本对应的 Workflow 都默认开启定时执行任务,如果你无需使用/需要暂时停用某一脚本,请参照以下步骤停用其对应的 Workflow:

step4.2

  • 在 Github Actions 配置页面中,左侧边栏选择需要停用的脚本所对应的 Workflow。
  • 点击搜索栏右边的 ... 按钮,然后点击 Disable workflow

常见问题

  1. 即便所配置的密码正确,脚本执行时仍然提示用户名或密码错误,还可尝试*次

    • 在小程序中重新修改密码。
    • 修改密码后不要马上在小程序上重新登陆。
    • 更新对应用户配置文件中的 Secret PASSWORD,填写新密码。
    • 再次尝试运行脚本,查看是否正常登陆并获取 jwsession。
    • 如仍有问题,请在确保配置文件中密码信息正确的后提 issue。
  2. 日检日报提交的选项不对?/ 提示服务出错(500)

    • 请参照 Step2 中的介绍,创建并填写 Secrect ANSWERS
  3. 如何配置多账户/多地点打卡?

    • 参照 Step 2,新建并配置另一环境;环境名建议保持 WZXY_CONFIG_**的格式。
    • 参考 Step 3,打开打卡脚本所对应的 workflow 文件,复制末尾的多账户配置示例代码,注销注释后填写另一配置的环境名即可。
  4. 打卡不准时?

    • Github Action服务器使用的时间是UTC,设置定时时请注意转换为北京时间(UTC+8)。
    • Github Action执行计划任务需要排队,并不会准时运行脚本,大概会延迟1h左右,请注意规划时间。
  5. 需要其他推送通知渠道?

    • 请提 issue 或参考代码自行实现。
  6. 其他问题?

    • 欢迎提 issue。

抓包大致方法

cap-howto

  • 在电脑上安装配置好 Fiddler。

  • 启动微信电脑版和 Fiddler,打开我在校园小程序,先手动打卡一次日检日报/健康打卡。

  • 提交打卡信息的同时观察 Fiddler 左侧栏中最新出现的 Host 为 student.wozaixiaoyuan.com 的信息(如果打卡的是日检日报,URL 为/heat/save.json;健康打卡则为/health/save.json")。

  • 双击打开这条信息,然后点击右侧上方的 WebForms 一栏,对照显示抓取到的信息填写 Environment Secrets 就可以了。

  • Fiddler 配置与抓包操作参考:

Todo

  • 解耦推送模块

参考/致谢

声明

  • 本项目仅供编程学习/个人使用,请遵守Apache-2.0 License开源项目授权协议.

  • 请在国家法律法规和校方相关原则下使用。

  • 开发者不对任何下载者和使用者的任何行为负责。

  • 程序使用的所有信息均利用 Github 的 Secrets 加密储存。

About

我在校园自动打卡程序:WoZaiXiaoYuanPuncher 的 Github Action 版。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%