青年大学习全自动签到
前言
QNDXX 一周一次,每周一凌晨一点后刷新,周日下午六点截止。但是每到周一就开始催观看以及发截图,一直催到最后一天,十分让人反感。开始自动签到,拒绝焦虑,拒绝被@,每周一自动打卡,不用再为打卡而烦恼。
抓包与分析
微信通过 青年之声
公众号进入到团员主页,点击 开始学习
将链接发送到电脑端发现没有提示未登录,可以正常点击按钮以及观看视频
观察链接地址,发现只传入了一个 sign
参数,将此参数删除提示未登录(无痕浏览)
初步判断页面根据 sign 值判断账号
1 | https://youthstudy.12355.net/h5/#/?sign=xxx%xxxx%xxx |
抓包工具使用的是 Fiddler
,此页面中找到一个有效的数据包,先记录保存
1 | POST https://youthstudy.12355.net/apih5/api/user/get HTTP/1.1 |
1 | { |
继续下一步,点击 参与当期学习
后,信息就很多了
其中包括整个视频,整个音频,以及答题的素材(题目和选项都是图片形式)
在靠前的数据包中看到这一条使用了 token
参数,看链接名称应该用于获取最新的文章
1 | { |
另一条 saveHistory
并不明确意思,同样也用到了 token
。其中 chapterId
在上一个包中有返回。
视频观看完毕后没有新的数据了,猜测 saveHistory
,就是签到数据。
另外找到一个图片地址:https://h5.cyol.com/special/daxuexi/ac7fx0es1z/images/04.jpg
推断其他等级为不同的编号,测试 01.jpg,得到:https://h5.cyol.com/special/daxuexi/ac7fx0es1z/images/01.jpg
后来发现仅本期为此地址,一般的地址应该为 /images/end.jpg
程序编写
数据搜集得差不多了,现在开始编写程序。使用 Python
语言快速实现所需功能,用到的库有 faker
json
以及 requests
。首先获取最新章节的 id,得到后通过已知的 sign 获得 token,最后将章节 id 以及 token 数据提交到签到接口。
获取最新章节的 ID
1 | url = "https://youthstudy.12355.net/apih5/api/user/get" |
获取 token
1 | url = "https://youthstudy.12355.net/apih5/api/young/chapter/new" |
签到
1 | headers["X-Litemall-Token"] = token |
完整程序
1 | import json |
自动签到
利用 github action 服务运行 python 程序,并设置运行时间,实现每周自动签到。
点击 Actions 创建一个新的 workflows
.github/workflows/dxx.yml
1 | # 注意yml文件格式,冒号后面有一个空格 |
获取完成图
图片地址 = 最新章节地址 + /images/end.jpg,一般情况下是这样的,像我这一期刚好就特殊了。在获取最新章节 ID 的返回数据中,其中一项为 “name”,对应的是网页标题。通过这些信息生成 HTML,图片设置不平铺并拉伸填充整个屏幕。利用 Github Pages 免费静态网页服务提供浏览支持,Github Action 中 Push 上最新生成的 HTML。我的 地址
qndxx.py
1 | def html_make(): |
.github/workflows/dxx.yml
1 | - name: Push ready |