s78910 / fast_yiban

nodejs版快速易班校本化打卡

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

快速易班校本化打卡

自疫情以来,易班打卡成了每天例行的繁琐任务。辅导员天天在年级群里催打卡。早些时候研究的是某高校大佬用python写的代码(项目地址),还很荣幸地贡献了v3版登录api(虽然现在已经废弃了)。后来大佬的代码停止维护了,v3地址也失效了,所以在研究出新的登录api后,用php重写了一遍,当时的思路就已经转换到使用web服务器来为多人提供打卡服务上了。后来觉得php上也不方便,又用nodejs写了一遍,到现在修修改改,已经跑了一年多了。再有一年多可能我也用不着了,所以把它开源了。

然而很遗憾的是距开源已经过去了8个月,还是没能摆脱易班打卡(悲) 而且在10月中旬竟然还有人发issue,索性把整个项目重新粉刷一下。结果就是鸽了一个月( 不过新版总算是在11月20号搞定了。但是有一说一上线还是很匆忙的,欢迎帮忙发掘bug。

结果距新版工具的发布还不到1个月,学校竟然不搞打卡了,有一种很亏的感觉(不是)怎么回事呢( 不过虽然我用不着这个工具了,但到我毕业前还是会尽量维护一下的。毕竟不知道啥时候会又开始要求打卡了呢

食用方法(针对Windows):

  1. 安装最新的nodejs。打开http://nodejs.cn/download/,点击“Windows 安装包”,下载完毕后运行安装包以安装nodejs。
  2. 下载源码zip压缩包,解压,打开解压后含有代码的文件夹,按住Shift不放并右键文件夹空白处,在出现的菜单中选择“在此处打开命令窗口”或者“在此处打开powershell窗口”。
  3. 在出现的黑色窗口中输入npm install,并回车。
  4. 修改config.js:根据config.js一节的指导,获取app_keyapp_secret_key(即安全密钥),并填入config.js中。这一步可以选择跳过,后果是网页将无法正常加载地图模块,也就是说不能用地图选点定位。
  5. 在步骤3的黑色窗口中输入node index,并回车。
  6. 浏览器打开http://localhost:4500,如果能够正常出现网页,就说明程序成功跑起来了。

其他系统下的操作方法类似。

如何打卡?

第一次打开网站时,网站什么都不会做,此时你需要点击“登录易班”,然后分别填入账号、密码,然后点击“登录”。此时页面会跳转到“程序日志”页,那里你可以看到你的登录状态。如果成功登录,你还会看到“开始打卡流程”的文字。你可能会奇怪,我只是点了登录,怎么就开始打卡了?不要急,这时程序会发现现在没有有效的打卡数据,从而转向寻找最新的未完成或待审核的任务。等到显示:“成功获取工作流 xxx 的具体表单项目”后,点击“打卡表单”,页面上会显示出该表单的标题(不是打卡任务的标题)、诸多可供填写的表单项目,和一个“提交表单”按钮。不同的表单项目通常长得不太一样,但是它们都会显示:是否是必填项目、项目标题、是否可应用于自动打卡这三个属性。需要注意的是“是否可应用于自动打卡”属性,它决定了接下来程序是否能够自动打卡,请根据你的需求选择。比如:“获取定位”,我的位置通常不会发生变化,因此该项我选择“可应用于自动打卡”。又比如:“昨天有没有做核酸”,这个是不确定的,因此项我选择“仅应用于当次打卡”。确定所有项目都填写妥当后,请点击“提交表单”按钮。然后等待“程序日志页”出现相应的反馈。如果有显示“提交任务成功”,就代表打卡成功了,一般还会显示当次打卡的分享链接。此时你大可以关闭网页溜之大吉,但如果你不想次次都填写复杂的表单,那么先不要关闭网页,而是保存网页的网址——细心的你可能已经发现,网页的网址已经变成长长的一大串了。把它全部复制下来,发给你的的QQ或微信小号,或者任何其他方法,把它保存下来,确保你需要的时候能找到它。

现在时间来到了第二天,你又需要打卡了,此时你回想起来,昨天你曾经在本网站成功进行了易班打卡,并且你幸运地找到了此前保存的长长的一串网址。你把它用浏览器打开了。如果一切正常,你会发现网页自动执行了登录操作,你不需要手动登录了。此时根据你昨天的选择,网页将会做出以下两种行为之一:自动开始打卡;提示你填写部分需要手动填写的项目。如果是前者,你什么都不用做,如果是后者,请点击“打卡表单”。你会发现少了很多项目需要填。那些项目都是此前被你标记为“可应用于自动打卡”的,因此你不用再填写它们了。等你填写完那些需要手动填写的项目后,点击“提交表单”。网页显示“提交任务成功”后,就可以关闭网页了。

一些说明

  • 上传签名,实质上是易班将你的签名转换为了一张图片,然后上传。所以在本程序里,这一步就被省略了,如需要上传签名,请自行准备一张签名图,最好是png格式。

  • 原来的通过改变url指向的图片,实现不改变打卡数据的情况下改变打卡内容的功能没了,因为我觉得它的成本和收益不对等。不如重新填一遍表来得快。而且现在可以只填写部分项目,更快了

  • 本着尽量少打扰的原则,没有诸如向指定邮箱发送打卡结果的功能。不过打卡成功后会返回分享链接,有截图需求的可以留意该链接。

  • 程序不支持以下表单组件:RelevantApplyGroupCountDurationTypeGroupTreeSelectConverIsInHighRiskArea。因为我还没见过这些组件长啥样,易班校本化的源码又很难看懂,不好反推,所以没法闭门造车。如果你有遇到以上这些组件,可以发个issue给我,协助我完善这个程序。

config.js

配置文件从json格式变成js了,但是并没有增加修改它的难度。反而由于允许注释,可读性更高了。

每项配置都有注释。这里只列3项常用的:

  //port是程序运行的端口
  port = 4500,

  //app_key和app_secret_code用于加载地图选点组件,获取方法见https://lbs.amap.com/api/javascript-api/guide/abc/prepare,网页中提到的Key即是app_key,安全密钥即是app_secret_code
  app_key = "",
  app_secret_code = "",

/public/res/announcement.json

用于实现简单的公告系统。由原来的/data/announcement.json迁移而来。

/data/blacklist.json

黑名单仍然存在,但是没有独立的配置文件了,而是合并到了public/js/index.html.jsApp类里。修改这个类就可以增删黑名单。

更新记录

  • 2022.11.20:大更新。以后应该就是在这个的基础上小修小补了。

    • 前端:有了新的ui;新的渲染表单方式;可以记录用户的操作以及服务器返回的信息
    • 后端:使用了WebSocket来和前端通信;支持各种文件上传;精简了http api(因为都使用websocket了)
    • 写了半天发现没啥好写的。。大概是想写的都写在源码的注释里了
  • 2022.11.28:进一步完善程序。

    • 期间的各种修正错字
    • 新ui反馈不明显,希望点击提交后可以自动跳到程序日志页
    • 建议新功能 为解决该问题,改造了下代码,使得打卡表单的每一项都可以选择是否可应用于自动打卡。这样一来,需要手动填的项目就会少很多了。
    • 明确区分了上传文件、上传图片和上传签名图,使提交的上传数据与官方的一致,避免出现奇怪的bug(比如查看任务结果时,打不开上传的图片)
  • 2023.4.22:解决人机验证问题

    • 网页易班的人机验证,是引入了一个人机验证模块,人机验证通过后生成token,将token和账号密码一块传给登录接口就ok。所以本程序也只需要引入那个人机验证模块就行了。

关于

该程序原本是为了闽江学院而定制的,但理论上能够兼容其他学校的“易班校本化”打卡。也就是说如果你们学校不是用“易班校本化”来打卡的,本工具对你来说就毫无用处了。如果在使用本工具中出现了问题,可以试试发个issue。

自己搭建的demo:https://yiban.doveyige.top

服务器似乎被易班拉黑名单了,没法访问www.yiban.cn,所以demo寄了

前端太丑:没办法,能力有限()能用就行了,要啥自行车

可能存在移动网络环境下打不开这个demo的问题,那是因为服务器地址在海外,移动墙中墙把我的网站风控了,导致打开极其缓慢(等到我忍无可忍了,一定去套cdn

About

nodejs版快速易班校本化打卡


Languages

Language:JavaScript 90.1%Language:HTML 7.4%Language:CSS 2.5%