中国农业大学实验室安全 - 课程与答题自动完成

Created 2 hours ago
Updated 2 hours ago
动态解析知识树接口获取全部课件,自动答题、上报进度并完成
#自动化
#视频刷课
#答题辅助
#中国农业大学
Statistics
Total Installs
0
Last 24h
+0
User Rating
-
Ad
An automated course-completion and quiz-assistance script fo

CAU 实验室安全平台 · 动态自动化答题与刷课脚本 (v3.0.0) 详细说明文档

本说明文档针对中国农业大学实验室安全考试系统([https://sysks.cau.edu.cn/](https://sysks.cau.edu.cn/))的动态自动化脚本进行完整架构解析、接口调用说明与部署操作指引。


目录

  1. 工作原理与系统架构
  2. 后台接口交互全景
  3. 核心算法与设计细节
  4. 安装与部署指南
  5. 使用说明与运行反馈
  6. 常见问题排查 (FAQ)

一、工作原理与系统架构

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)

  • 直接命中:优先提取后台实体中下发的隐藏字段(answerrightAnswercorrectAnswer 等)。
  • 多选题适配 (kind: "3"):自动将逗号分隔或无分隔的字符串(如 "ABC")转为数组 ["A", "B", "C"];若无答案则自动采取全选策略兜底。
  • 单选/判断适配 (kind: "1" / kind: "2"):标准化为大写字母选项("A" ~ "D")。

3. 请求节流与反封控保护

  • 每次单题提交之间设置 250ms 缓冲。
  • 每个完整课件提交后设置 1000ms 安全冷却延时,避免因高频并发触发服务端的 WAF 限流或账号风控。

四、安装与部署指南

1. 准备运行环境

确保浏览器已安装扩展管理器:

  • 脚本猫 (ScriptCat)(推荐,原生支持中文生态)
  • Tampermonkey (油猴)

2. 新建脚本

  1. 打开脚本管理器控制面板,点击 「新建脚本」(或 「+」)。
  2. 将最新版代码完整覆盖粘贴到编辑器中。
  3. Ctrl + S(Mac 为 Cmd + S)保存脚本。
  4. 确认脚本管理列表中该脚本的开关处于 开启(Enabled) 状态。

五、使用说明与运行反馈

  1. 进入平台:打开并登录 CAU 实验室安全平台,进入学习页面(如 /students/myCourse)。
  2. 启动执行
  • 页面右下角将出现紫色悬浮按钮 「⚡ 一键动态刷课」
  • 点击按钮,脚本会首先调用接口抓取课程树。
  • 抓取成功后会弹出确认框,提示检测到的总课件数,点击 「确定」 启动流水线。
  1. 状态指示与监控
  • 按钮状态变色

  • 🟡 黄色:正在请求树形数据或执行中(显示 ⏳ (当前数/总数) 课程名...)。

  • 🟢 绿色:任务全部成功执行完毕(显示 🎉 已完成)。

  • 🔴 红色:请求异常或 Token 失效。

  • 控制台日志:按 F12 切换至 Console,可查看每道题目的题干、提交答案与后台接口的具体返回。

  1. 刷新验证
  • 全部执行完毕后,按 F5 刷新页面,课程列表中所有小节的状态将同步更新为 (学完)

六、常见问题排查 (FAQ)

Q1: 点击按钮提示「获取课程树为空,请确认是否已加入课程」?

  • 原因:账号尚未在系统中选择或关联具体的知识图谱课程,或者当前页面登录态已失效。
  • 解决方案:在系统网页端手动点击进入一次课程大纲页面,确保页面能正常渲染课程目录后再次点击脚本按钮。

Q2: 控制台报错 401 Unauthorized 或提示「未读取到 Token」?

  • 原因:平台的 JWT 登录凭证已过期。
  • 解决方案:退出系统重新登录,脚本即可重新捕获最新的 pro__Access-Token

Q3: 为什么刷完后页面显示还是「未学」?

  • 原因:JeecgBoot 前端使用了 Vuex/Pinia 页面状态缓存,未重新向后台拉取最新进度。
  • 解决方案:手动按 Ctrl + F5 强制刷新页面即可看到更新后的「(学完)」状态。
Script Details
Applicable Sites
License
Not declared
No license declared — reuse with caution