upupming / zhr-action

浙江大学健康打卡自动打卡脚本,支持 Node.js 本地运行和 GitHub Action 定时运行。

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

建议:在打卡提交之前增加蓝码检查

ProudZJU opened this issue · comments

具体内容

在原来submit()函数的基础上

zhr-action/src/api.ts

Lines 205 to 210 in 858f2fd

const { vm } = window
for (const key in vm.oldInfo) {
// if it is an empty value ('', null, undefined), skip assigning
if (!vm.oldInfo[key]) continue
vm.info[key] = vm.oldInfo[key]
}

增加用户蓝码的检查。如果发现用户拥有蓝码,而打卡的地点不在杭州、宁波等浙大校区所在城市,则立即返回警告并停止提交打卡。

伪代码

  private async submit(): Promise<void> {
    let errMsg = await this.page.evaluate((__verifyCode: string | null): string | undefined => {
      try {
        const { vm } = window
        if (HasBlueCode() && vm.oldInfo["打卡地点"] != ${浙大各校区所在地}) {
            throw new Error("❌警告:本次打卡终止。你当前拥有蓝码,但是本次打卡所在地不是校区所在地,继续打卡将让你失去蓝码。如果你确定这么做,请手动打卡")
        }
        for (const key in vm.oldInfo) {
          // if it is an empty value ('', null, undefined), skip assigning
          if (!vm.oldInfo[key]) continue
          vm.info[key] = vm.oldInfo[key]
        }
        if (__verifyCode != null) {
          vm.info.verifyCode = __verifyCode
        }
        // confirm 包含一系列前端校验
        vm.confirm()
        // 确认弹窗:「每天只能填报一次,请确认信息是否全部正确?」
        document.querySelector<HTMLObjectElement>('.wapcf-btn-ok')?.click()
        // save 直接发出后端请求
        // vm.save()
      } catch (err) {
        return (err as Error)?.message
      }
    }, this.verifyCode)

此改动的原因

我作为用户肯定是希望这个打卡服务启用后完全不用我管,但是为了减小风险,我在离校后会手动打一次卡,把定位改到我所在的城市。所以返校之后一旦忘记关闭Actions,就会导致第二天失去蓝码:sob:(本人已数次踩坑)

致谢

本来我是想直接为这个项目贡献代码的,奈何本人没有前端经验,虽然看得懂代码但是不知道如何下手,只好提交这个issue来麻烦开发者实现功能了。感谢upupming和其他的contributors!

返校之后要获得蓝码不是得在学校打卡吗?那之后的打卡都会使用你已经打过卡的信息了,就是在学校了哇?
@ProudZJU 感谢建议,如果有人遇到同样的问题可以在 @ProudZJU 的评论上面点赞,如果需求量大的话会考虑实现~

不是,只要返校当天的申请通过就可以获得蓝码,无论当天是否打卡以及打卡的位置。所以我才踩了好几次坑:sob:

如果使用cookie登录,应该是没有权限获取蓝码状态的。这会导致现在使用cookie方式登录的同学无法使用。