Files
study-tool/todo.md
T
study-tool 16346159c2 feat: 接入广东公需课平台(jsglpt 登录 + jsxx 进度心跳)
- 新增 platforms/gdgxk.py:base64 登录 → ssoItlmsGxkTicket 换票进 jsxx →
  /uc/store/courseRegister 取课程 → updateViewTime1 心跳上报进度(无需真播)
- platforms/__init__.py 注册;配套抓包脚本与自测脚本
- CHANGELOG / OPTIMIZATION / todo 同步,版本升到 0.0.2
2026-10-30 22:17:47 +08:00

57 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# TODO
## 待评估:接入广东公需课平台(jsxx.gds.edu.cn)
**状态**:已接入,见 `src/study_tool/platforms/gdgxk.py` 与 `OPTIMIZATION.md`;登录 / 课程列表 / 进度心跳已实测,待用未学完课程确认。
### 背景
参考脚本:`2026广东公需课·全自动完美版(后台保活+10分钟刷新).js`(油猴 v1.3,`@match https://jsxx.gds.edu.cn/*`)。
它做的事:悬浮面板 + 后台保活 + 10 分钟整页刷新 + 视频题目题库命中(约 200 条)+ 未命中时 12 轮
暴力试错 + 考核页按课程 id 硬编码两套 30 题答案自动勾选(不代交卷)。
注意:这是**广东专业技术人员继续教育公需课**,跟本项目的 dgjy(东莞教师培训)不是一套系统,
连登录入口都不同。
### 结论:不能直接融合
| 维度 | 该脚本 | 本项目 | 能不能用 |
| --- | --- | --- | --- |
| 站点 | jsxx.gds.edu.cn | jspx / study.dgjy.net | 无交集 |
| 实现层 | 页面 DOM 点击、layui/mylayer 弹层 | 服务端接口 + Playwright 真播 | 不同层 |
| 答案 | 硬编码题库 + 按课程 id 两套答案 | 大模型现算 | 数据不可复用 |
| 保活 | setInterval、伪造 mousemove、整页 reload | 服务端跑逻辑,浏览器只播视频 | reload 会打断播放 |
| 兜底 | 12 轮暴力试错 | LLM + 交卷前人工核对 | 平台限次,会烧光重考机会 |
### 真要接入时的顺序
1. **抓包取证**(阻塞项,必须有公需课账号)
- 登录链路:账号密码还是统一身份认证?落哪些 cookie / token
- 课程列表与课时树接口
- 课时上报接口:视频进度怎么记账,是否要心跳
- 考试接口:取卷、交卷、重考次数(对应 dgjy 的 `surplusExamCount` 那一套)
- 视频是不是直链,需不需要 Playwright 真播到结尾
2. **适配层分派**:`app.py` 现在 `login()` / `discover()` / `detect_platform()` / `StudyClient`
全是 dgjy 专用,得按平台分支;`accounts` 表加平台标识,控制台卡片显示平台
3. **答题**:本地题库命中优先、LLM 兜底(题库得自己攒 dgjy 的,脚本那 200 条是公需课内容,搬不过来)
4. **UI**:课程卡片区分平台;公需课的「考核」页结构跟 dgjy 完全不同,不能复用测验弹窗
### 明确不照抄的部分
- 暴力试错答题:dgjy 平台一般只给 3 次重考,试错直接废掉机会
- 10 分钟整页刷新:打断正在播放的视频,进度白费
- 按课程 id 硬编码答案:换课程批次即失效,脚本注释自己写了「已反转,解决反了问题」,说明是试错出来的
- `.layui-layer` / `.mylayer-wrap` / `#studySelectAct .next` / `#topicList .m-topic-item` 这些选择器
- 用 `innerText` 包含「正确」判断已答弹层:题干带「正确」二字就会被误点
- 把「下一节」按钮 `pointer-events:none` 锁死:平台一改版就失效
### 可以借鉴的
- 题库命中优先、LLM 兜底(省 token、命中时更准)
- 强制播完才放开「下一节」—— 项目已有等价实现(播到 `ended` + `completeTime` 校验)
## 已完成
- 「首次进入课程弹『未加入课堂』」已修复,实测确认见 `OPTIMIZATION.md`。