HBTech's Blog
HBTech's Blog
学习通健康打卡表单自适配指北

项目介绍

这是一个基于 Python 编写的超星学习通打卡表单自动上报的项目,在架构设计上它就可适配任意学校的打卡表单。

特色:

  • 支持在 GitHub Actions 上使用,以及自建服务器、PC等上使用
  • 自动获取上一次打卡的数据进行自动填写
  • 支持为多用户填报,单用户可填报多个表单,适配学校多个表单的情况
  • 支持各类学校自定义打卡表单
  • 支持自助适配学校的表单模板(详见下面的 开始自助适配 页面)
  • 支持多种消息推送渠道,可将打卡上报结果推送给自己
  • 支持将所有打卡结果推送给指定的一人
  • ……

已适配学校列表,使用方法等请前往 GitHub 主页查看:https://github.com/panghaibin/cx_health_sign

注意:本项目对打卡的内容并不关心且一无所知,程序的原理仅仅是获取上一次的表单数据,再将其自动填写。程序不对使用本程序的用户负责,请自行保证表单的正确性与完整性。使用时请自觉遵守相应的约束性条款。

开始自助适配

下载本项目

前往本项目的 GitHub 主页,将本项目打包下载或解压,或者直接运行

git clone https://github.com/panghaibin/cx_health_sign.git

确保电脑上已配置好Python环境,然后即可进行下一步的操作。

学习通抓包

大部分学校的打卡表单只能在手机上的客户端进入,因此需要使用抓包工具将其实际的表单主页抓包出来,并将其在电脑上的浏览器打开,再进行后续的操作。

Android、iOS上的抓包软件种类繁多,因此本文不会对抓包的具体过程做详细介绍,可以参考互联网上已有的资源。我个人使用的是Android手机,使用的抓包工具是HttpCanary,仅供参考。

可以确定的是,我们要抓包得到的链接将是形如:

http://office.chaoxing.com/front/web/apps/forms/fore/apply?id=xxx&enc=yyy&......

这其中最关键的两个值就是链接中的 idenc 值。如果你的学校的打卡表单提供了Web端的入口,可以在浏览器打开,那么直接获取这两个值即可,省去了在手机上抓包的步骤。

获取表单数据

方法一:通过 F12-本地存储 获取(请直接参照方法二,目前该方法可能已失效。已折叠,点击可查看)

得到表单主页的链接后,我们在PC的浏览器上打开,这里以新版Edge浏览器为例。打开链接后,按下F12,打开开发人员功能。然后点击左上角的这个图标,开启模拟手机UA的功能:

https://hbtech.oss-cn-shenzhen.aliyuncs.com/blog/img.png

若界显示空白,刷新页面即可。表单正常显示后,可能会有部分值无法输入,定位可能也无法获取,这不会影响下一步的操作,尽可能把所有能填写的数据都填上。

然后回到开发人员面板,点击上方的应用程序选项卡,然后定位到左侧的本地存储,点击那个超星的链接:

https://hbtech.oss-cn-shenzhen.aliyuncs.com/blog/img_1.png

此时会进入一个类似数据库详情的页面,这是超星在浏览器上本地存储的数据,其中就有要用于发送填报打卡的数据。在其中找到名称为形如 custom_forms_apply_xxx_yyy 的键值(xxx即为该表单的id,链接中可查看到)。将鼠标至于其对应的“值”一栏,右键,点击“编辑‘值’”,Ctrl+C复制下来:

https://hbtech.oss-cn-shenzhen.aliyuncs.com/blog/img_2.png

此时就获取到了表单数据。

方法二:通过在浏览器中提交一次表单数据以获取
在浏览器中打开抓包得到的链接,F12开启开发人员功能,转到“网络(Network)”选项卡。正常填写表单,随后提交,此时可以看到有一个save请求,点进去,formData的内容即为我们所需的表单数据。

https://hbtech.oss-cn-shenzhen.aliyuncs.com/blog/170412107-d902b48f-f048-4755-8bb6-f95e43d8415c.png

表单数据解析

回到你下载的本项目的目录下,打开任意文本编辑软件,将表单数据直接粘贴,并保存到项目的根目录下。请注意,若使用的是记事本,则记得把编码保存为UTF-8

然后在资源管理器中选中该文件,点击上面的“主页”选项卡,再点击“复制路径”,得到文件的绝对路径

https://hbtech.oss-cn-shenzhen.aliyuncs.com/blog/img_3.png

现在在项目根目录下打开控制台,键入

python compare.py

右键粘贴路径,回车执行:

https://hbtech.oss-cn-shenzhen.aliyuncs.com/blog/img_4.png

即可得到脚本自动解析出来的、程序在自动打卡时需要的各个变量。要注意的是变量值为 -1 或者 [] 的表示没有找到对应的id,若确认表单中没有这些变量,则不影响使用。

创建对应打卡表单类

打开项目下的config文件夹,可以看到有一个example.py文件,创建一份副本,命名为你的学校的英文缩写,建议使用学校官网域名的里的缩写。

然后在代码编辑器中打开该文件:

https://hbtech.oss-cn-shenzhen.aliyuncs.com/blog/img_6.png

将代码里的ExampleHealthReport改成你的学校英文缩写大写+HealthReport。并根据注释,把你获取到的表单idenc粘贴进去,给表单换一个名称,依然可以用学校的缩写命名。再将刚刚运行脚本解析出来的结果,复制粘贴到对应位置:

https://hbtech.oss-cn-shenzhen.aliyuncs.com/blog/img_5.png

最后,打开项目根目录下的main.py,在上方引入这个类:

https://hbtech.oss-cn-shenzhen.aliyuncs.com/blog/img_9.png

xxx即为文件名,XXXHealthReport即为你命名的类名。

然后往下翻到MainHandle这个类,在里面的self._reporters字典变量里追加一行:

https://hbtech.oss-cn-shenzhen.aliyuncs.com/blog/img_8.png

现在对该表单的适配完成,下一步将测试能否运行

运行测试

首先安装依赖

pip install -r requirements.txt

然后在程序根目录下运行

python main.py

根据提示操作即可,详细说明见此处。若运行时出现了报错也建议阅读这个完整的说明

测试无误后可以提Pull Request,完善本项目

若出现问题,说明该表单可能过于复杂,无法自助适配。有能力的话可以自行Debug查看问题在哪,或者在GitHub提Issue请求帮助。

没有标签
首页      工具      学习通健康打卡表单自适配指北

HBTech's Blog

学习通健康打卡表单自适配指北
项目介绍 这是一个基于 Python 编写的超星学习通打卡表单自动上报的项目,在架构设计上它就可适配任意学校的打卡表单。 特色: 支持在 GitHub Actions 上使用,以及自建服务器、PC等…
扫描二维码继续阅读
2022-04-05