中
中国农业大学实验室安全 - 课程与答题自动完成
动态解析知识树接口获取全部课件,自动答题、上报进度并完成
#自动化
#视频刷课
#答题辅助
#中国农业大学
Statistics
Total Installs
0
Last 24h
+0
User Rating
-
Ad
Description
Versions1
Ratings0
Permissions
An automated course-completion and quiz-assistance script fo
CAU 实验室安全平台 · 动态自动化答题与刷课脚本 (v3.0.0) 详细说明文档
本说明文档针对中国农业大学实验室安全考试系统([https://sysks.cau.edu.cn/](https://sysks.cau.edu.cn/))的动态自动化脚本进行完整架构解析、接口调用说明与部署操作指引。
目录
一、工作原理与系统架构
v3.0.0 版本彻底移除了静态写死课程 ID 的机制,升级为全自动动态拓扑解析与链式接口驱动。整体流水线分为四个阶段:
[阶段 1: 凭证解析]
└─ 从 localStorage / sessionStorage 提取 JWT (x-access-token)
↓
[阶段 2: 知识图谱动态遍历]
└─ 请求 /knowledgeGraph/queryGraphTree
└─ 递归遍历树形结构,提取根节点 graphId 并筛选出所有 isLeaf: true 的课件
↓
[阶段 3: 课件流水线批处理 (循环执行)]
├─ 1. 题目发现:GET /courseSource/queryCourseQuestionRelaByMainId
├─ 2. 自动答题:POST /courseSource/submitAnswer (支持单选/多选/判断)
├─ 3. 进度同步:POST /courseSource/finishRate (上报播放进度防审计)
└─ 4. 状态结课:POST /courseSource/finish (标记课件学习完成)
↓
[阶段 4: 结果汇总与 UI 状态复位]
二、后台接口交互全景
脚本在运行过程中,会严格按照业务时序与后台交互以下 4 个核心 API:
| 序号 | 接口路径 | 请求方式 | 功能描述 | 关键参数 / 载荷 |
|---|---|---|---|---|
| 1 | /jcedutec/knowledgeGraph/queryGraphTree |
GET |
拉取知识图谱与全部课程树 | _t (时间戳) |
| 2 | /jcedutec/courseSource/queryCourseQuestionRelaByMainId |
GET |
获取课件绑定的视频内置题目 | id (课件ID), graphId (图谱ID) |
| 3 | /jcedutec/courseSource/submitAnswer |
POST |
提交各题目的选项答案 | id, graphId, questionId, option |
| 4 | /jcedutec/courseSource/finishRate |
POST |
上报视频累计观看时长 | id, graphId, watchDuration |
| 5 | /jcedutec/courseSource/finish |
POST |
最终确认完成该课件 | id, sourceId, graphId |
三、核心算法与设计细节
1. 知识树递归扁平化算法 (extractCoursesFromTree)
系统接口返回的是多层嵌套的树状 JSON(图谱根节点 $\rightarrow$ 二级分类 $\rightarrow$ 具体课件)。
- 根图谱 ID 提取:第一层节点的
key(如2085642784211197954)会被作为上下文graphId递归传递至底层。 - 叶子节点筛选:仅提取
isLeaf: true或携带label: "1"的实体课件,自动剔除无实体视频的中间分类文件夹。
2. 题目答案解析与容错机制 (resolveQuestionAnswer)
- 直接命中:优先提取后台实体中下发的隐藏字段(
answer、rightAnswer、correctAnswer等)。 - 多选题适配 (
kind: "3"):自动将逗号分隔或无分隔的字符串(如"ABC")转为数组["A", "B", "C"];若无答案则自动采取全选策略兜底。 - 单选/判断适配 (
kind: "1"/kind: "2"):标准化为大写字母选项("A"~"D")。
3. 请求节流与反封控保护
- 每次单题提交之间设置 250ms 缓冲。
- 每个完整课件提交后设置 1000ms 安全冷却延时,避免因高频并发触发服务端的 WAF 限流或账号风控。
四、安装与部署指南
1. 准备运行环境
确保浏览器已安装扩展管理器:
- 脚本猫 (ScriptCat)(推荐,原生支持中文生态)
- Tampermonkey (油猴)
2. 新建脚本
- 打开脚本管理器控制面板,点击 「新建脚本」(或 「+」)。
- 将最新版代码完整覆盖粘贴到编辑器中。
- 按
Ctrl + S(Mac 为Cmd + S)保存脚本。 - 确认脚本管理列表中该脚本的开关处于 开启(Enabled) 状态。
五、使用说明与运行反馈
- 进入平台:打开并登录 CAU 实验室安全平台,进入学习页面(如
/students/myCourse)。 - 启动执行:
- 页面右下角将出现紫色悬浮按钮 「⚡ 一键动态刷课」。
- 点击按钮,脚本会首先调用接口抓取课程树。
- 抓取成功后会弹出确认框,提示检测到的总课件数,点击 「确定」 启动流水线。
- 状态指示与监控:
按钮状态变色:
🟡 黄色:正在请求树形数据或执行中(显示
⏳ (当前数/总数) 课程名...)。🟢 绿色:任务全部成功执行完毕(显示
🎉 已完成)。🔴 红色:请求异常或 Token 失效。
控制台日志:按
F12切换至 Console,可查看每道题目的题干、提交答案与后台接口的具体返回。
- 刷新验证:
- 全部执行完毕后,按
F5刷新页面,课程列表中所有小节的状态将同步更新为 (学完)。
六、常见问题排查 (FAQ)
Q1: 点击按钮提示「获取课程树为空,请确认是否已加入课程」?
- 原因:账号尚未在系统中选择或关联具体的知识图谱课程,或者当前页面登录态已失效。
- 解决方案:在系统网页端手动点击进入一次课程大纲页面,确保页面能正常渲染课程目录后再次点击脚本按钮。
Q2: 控制台报错 401 Unauthorized 或提示「未读取到 Token」?
- 原因:平台的 JWT 登录凭证已过期。
- 解决方案:退出系统重新登录,脚本即可重新捕获最新的
pro__Access-Token。
Q3: 为什么刷完后页面显示还是「未学」?
- 原因:JeecgBoot 前端使用了 Vuex/Pinia 页面状态缓存,未重新向后台拉取最新进度。
- 解决方案:手动按
Ctrl + F5强制刷新页面即可看到更新后的「(学完)」状态。
Statistics
Total Installs
0
Last 24h
+0
User Rating
-
Script Details
Applicable Sites
License
Not declared
No license declared — reuse with caution