中国大学 MOOC 自动化脚本
License: MIT
Platform
Version
当日下载量
总下载量
面向中国大学 MOOC / SPOC(icourse163.org)的 Tampermonkey 用户脚本,自动识别两类课程并走对应前端分支,覆盖四大场景:互评作业自动化、课堂讨论自动回复、随堂测验一键作答、整章自动学习(视频 / 文档 / 测验 / 讨论全类型自动推进),并提供开发者调试日志与页面结构诊断,便于适配新版 UI。
脚本依赖平台 DOM 结构,随慕课新版 UI 持续维护。页面改版后可先用「页面 DOM 诊断」导出结构,反馈给作者精准适配。
功能总览
模块
能力
互评
一键互评 / 快速互评 / 全自动互评 / 评分修复;自动避开测验·作业·考试答题页
讨论
预览回复内容 / 一键回复当前讨论;正文取已有楼层,同一条讨论只回复一次
随堂测验
一键完成并提交:从课件接口取正确答案→逐题填涂→自动提交;只在随堂测验下生效
自动学习
从当前内容开始整章自动推进:视频播完→文档翻页→讨论回复→富文本停留;随堂测验自动作答并提交,提交后停留 10 秒再走;单元测验 / 作业 / 考试不进入
课程类型
自动识别 MOOC / SPOC 两套前端(导航、题块、题库来源各不相同),互不干扰
日志
开发者调试日志:检测结果、跳转决策、异常捕获,可复制可清空
工具
页面 DOM 诊断、解除复制限制
面板结构
面板按功能分成五个选项卡,同一时刻只显示一个视图:
选项卡
内容
互评
一键互评 / 快速互评 / 全自动互评 / 评分修复
讨论
预览将回复的内容 / 一键回复当前讨论
自动学习
开始自动学习(当前章)/ 随堂测验一键完成 / 页面 DOM 诊断
日志
复制日志 / 清空日志 / 实时调试日志
设置
讨论内容来源、视频倍速、解除复制限制、清除回复记录
打开时默认停在哪个选项卡取决于页面:看着像讨论页就开「讨论」,其余开「互评」。只在面板创建时判定一次,之后手动切到哪就留在哪——不跟着单页路由乱跳,免得打断正在进行的操作。
两处是刻意的设计:
- 状态栏和停止按钮在选项卡之外,常驻面板底部。任务进度和停止入口不属于任何一个视图,切走就看不到会很糟。
- 任务运行期间可以自由切选项卡,开关类按钮(解除复制)与日志按钮(复制/清空)也仍可点击——它们和任务状态无关,不该被一起锁住。
课程类型适配(MOOC / SPOC)
平台上有两类课程,前端是两套东西,脚本会先识别课程类型再走对应分支。识别优先看路径(/spoc/ → SPOC,/mooc/ → MOOC),路径判断不了才看 DOM(只认 SPOC 独有的 .up.j-up 下拉),宁可漏判 SPOC,也不把 MOOC 带进 SPOC 分支。
维度
MOOC(新版)
SPOC
路径
/mooc/learn/{课程}/content/{id}
/spoc/learn/{课程}/…
内容项
[role="tablist"] 里的 [role="tab"]
.unitslist > .f-fl(.current 为当前项)
章节 / 小节
header button[aria-expanded]
.up.j-up([0] 章、[1] 节)+ .down.j-list 里的 .list
随堂测验题块
LessonQuizUnit 容器 + article
.m-choiceQuestion
提交 / 重做
文字「提交」/「重新答题」
.j-submit / .j-replay(文字「重做」)
题库来源
front-mooc-learn/api/…/unit-page → result.quizData
dwr CourseBean.getLessonUnitLearnVo → paper.objectiveQList
讨论区
mooc-comment* + contenteditable
.m-data-lists / .f-richEditorText / .ql-editor
各功能在两类课程下的表现
功能
MOOC
SPOC
互评
✅
⚠️ 依赖页面列表结构,识别不到会明确提示而不是乱点
讨论自动回复
✅
✅ 编辑器走 .ql-editor,发布按钮走 .j-edit-btn,回复正文取自 .f-richEditorText
随堂测验一键完成
✅ 走接口
✅ 走 dwr,取不到时提示切一次标签再试
自动学习
✅ tablist + 下拉
✅ .unitslist + .up.j-up 下拉;随堂测验自动作答(见下)
SPOC 的两个特别处理
- 随堂测验不跳过:两类课程一致——小节里的「测试」就是随堂测验(不限次数、可重做),跳过去没人会回来做,所以自动学习走到它时会自动作答并提交,提交后停留 10 秒再进下一个内容。想让随堂测验回到「跳过」的老行为,把 CONFIG.LEARN_AUTO_QUIZ 改成 false。
- dwr 答案靠 hook 捕获:SPOC 的题目和答案在 getLessonUnitLearnVo.dwr 的响应里。脚本注入时首屏那条请求已经发完,所以会挂上 dwr 回调 hook 等下一次;还没等到就把当前内容重新点一次逼平台再请求一回。仍失败时会把「请切到别的测试再切回来」写进状态栏——切换一次内容即可让 hook 收到数据。
随堂测验一键完成
「自动学习」页签里的随堂测验:一键完成并提交,只在随堂测验(小节里那个叫「测试」的标签,和视频 / 文档 / 讨论同一层)页面上生效。
它和单元测验是两套东西,别混用:
随堂测验
单元测验
位置
小节内部,与视频 / 文档平级
左侧目录里单独一个节点
次数
通常不限次数,可反复重做
往往只有一次机会
本功能
✅ 支持
❌ 不处理(考试页也会直接拒绝)
流程:重新答题(若已答过)→ 取正确答案 → 逐题比对填涂 → 点提交 → 处理「确定提交」弹窗。
答案从哪来(两类课程走不同来源):
课程
来源
MOOC
课件接口 front-mooc-learn/api/learn/content/unit-page,result.quizData.questions 每题带 options[{id,label}] 与 correctOptionIds
SPOC
dwr getLessonUnitLearnVo 的 paper.objectiveQList,选项上直接带 answer 标记
映射方式:把正确答案的 ID 映射回对应选项文案,再拿文案匹配页面上每个 label 的文字。
安全约束(和互评、讨论同一套原则):
- 读不到答案就一个选项都不点、也不提交——接口没返回 quizData、或题目全对不上,直接报错退出;
- 只答对得上的题:有题目匹配不上时(或接口题数多于页面渲染数,可能分页),只填不交,把状态写清楚留你手动补完,避免交白卷;
- 不等同于 guessing:判断题、多选题都按接口答案勾选,不猜;
- 只有「确定 / 确认 / 继续」会被点,弹窗里的取消一律不碰。
匹配以文案为主、ID 为辅:页面 input 的 id 常被平台加前缀(_102476797525894),而不同选项的 id 可能互为后缀(102476797525894 正好是 1102476797525894 的结尾),所以 ID 必须整段相等才认,不能用 includes。
自动学习(整章自动推进)
在任意内容页点「开始自动学习(当前章)」即可。脚本从当前内容开始处理,学完一个内容自动进入下一个,直到全部章节学完。页面刷新 / 内容跳转后自动续跑,无需手动干预。
各类型内容的处理规则
内容类型
处理方式
视频
从头播放(支持倍速),播完自动进入下一个内容;不视频接视频——视频看完跳测验 / 文档 / 讨论等,而不是下一个视频
视频中弹出题目
自动作答——只求「让平台放行继续播放」:答对自动继续;答错视频停住时,请手动点一下播放按钮,脚本会继续监控(上限 10 分钟)
文档 / 课件 / PPT
自动翻页,每页停留约 1 秒,翻到底自动进入下一内容
富文本 / 节标题页
停留 10 秒后自动跳转(可随时点右下角【下一节】提前跳)
随堂测验
自动作答并提交(LEARN_AUTO_QUIZ 可关),提交后停留 10 秒(LEARN_QUIZ_AFTER_MS)再进下一个内容;单元测验 / 作业 / 考试页绝不作答
讨论
自动回复(与「讨论」页签同一套逻辑与安全约束)
加载失败页
快速跳过,不停留
跳转逻辑(三级优先级)
跳转一律模拟点击,不直接改 URL,适配新版 SPA 单页应用:
- 同小节内:点击当前内容标签的下一个兄弟标签(随堂测验也进,进去自动作答;单元测验 / 考试类标签才跳过);
- 跨小节:当前小节学完,展开顶部「小节」下拉,点击下一节——支持「第X节」分组标题;若点击分组标题后页面无响应,自动改点该节第一个内容单元;
- 跨章节:当前小节已是最后一项时,展开顶部「章节」下拉,点击下一章,进入新章节后自动点第一个小节、第一个内容标签。
全部查完没有更多内容时提示「课程学习完成!」。
细节
- 视频倍速:「设置」页签可调 0.5x ~ 3x(步进 0.25)。播放前、播放循环中、弹题恢复后都会持续应用——平台切清晰度 / 拖动进度后可能重置倍速,脚本会自动补回;
- 加载就绪等待:进入每个内容先等它真正渲染出来(视频 / 文档查看器 / 讨论页 / 富文本正文任一出现,最长 15 秒),没加载完不跳转,避免“白页秒跳”;
- 【下一节】悬浮按钮:学习过程中出现在页面右下角,视频 / 文档 / 富文本随时可点,立即进入下一个内容;
- 刷新续跑:学习计划保存在 localStorage,页面刷新后自动接着跑;点「停止」或手动清掉状态才结束;
- 平台兼容:开始学习时自动关闭平台自带的“自动播放下一集”,避免与脚本跳转抢节奏。
课堂讨论自动回复
脚本不自己编内容,只从已经有人回复过的楼层里挑一条现成的答复作为正文。来源可在「设置」里切换:
来源
说明
最新答复(默认)
按楼层时间取最新一条;时间解析不出来时退化为页面顺序的最后一条,并在预览里明确写出
点赞最多
取点赞数最高的楼层;页面没显示点赞数时自动退回「最新答复」并说明原因
按下「一键回复当前讨论」之前,建议先点「预览将回复的内容」:浮层会写明选中的是哪一层、点赞数与时间、以及将要发出的正文,确认无误再发。
安全约束:
- 选不出正文就不动手:解析不到楼层、或楼层正文是占位提示,直接报错退出,不拿任何凑数文本去发
- 同一条讨论只回复一次:按「讨论标题 + 页面地址」在本地留痕,重复点击会跳过(可在设置里「清除回复记录」)
- 只写回复输入框:先在「回复区」作用域内找可编辑元素,找不到才看整页——不会把内容写进笔记框、搜索框
- 正文会避开作者名 / 时间 / 点赞条:这些元信息节点不会被当成正文
- 超长正文截到句子边界:默认上限 200 字(脚本内 CONFIG.DISCUSS_MAX_LEN)
- 找不到发布按钮时,内容会留在输入框里并提示手动发布,不会乱点页面上其它按钮
开发者日志
「日志」页签面向开发者排查问题(不是给使用者看完成情况)。它记录“检测到了什么、走到了哪一步、为什么这样决策”,每条带时间戳与分类标签:
分类
含义
type
内容类型检测结果与判定依据(video / doc / quiz / discussion / other / missing)
load
内容加载就绪情况:等了多久、命中哪种正文、是否超时
nav
三级跳转决策:当前标签是谁、同小节目标、跨小节 / 跨章节目标、tablist 是否刷新成功
menu
下拉菜单:识别到的章节 / 小节按钮、菜单项数量、匹配到谁、下一个是谁
learn / video / doc / quiz
主流程与各类型处理的关键事件
err
异常捕获(含自动学习异常)
内存保留最近 500 条,面板展示最近 120 条(自动滚到底部);「复制日志」导出全部,复制失败时自动改用浮层展示。任务运行中日志按钮依然可用。
互评功能
- 自动识别可评阅作业并执行评分
- 默认评语为:科技改变生活
- 支持批量处理与延时控制
- 提供停止按钮与评分修复能力
- 自动避开答题页:在测验 / 作业 / 考试页面上,互评按钮会被拒绝执行(避免把题目选项当作分数选中并提交)
解除复制限制
面板「设置」选项卡下的开关。慕课挡复制通常是三套手段,脚本对应三种反制:
站点手段
反制方式
CSS user-select: none(含 JS 写行内样式)
注入带 !important 的样式表——样式表里的 !important 优先于行内样式
在 document / 元素上挂 copy、cut、selectstart、contextmenu、dragstart 处理器或 on* 属性
在 window 捕获阶段掐断事件传播。捕获阶段 window 早于 document,站点挂在 document 上的捕获监听也拦不住
拦截 Ctrl/⌘ + C / X / A 并 preventDefault
同样在 window 捕获阶段掐断(只收窄到这三个组合键,不影响站点自身的快捷键)
关键点是只掐事件传播、不调用 preventDefault:浏览器的选中、复制、右键菜单等默认行为得以保留,而站点挂的拦截逻辑收不到事件。
开关默认关闭,状态存在本地,刷新后保持。
使用方法
- 安装浏览器扩展 Tampermonkey。
- 打开 main.js,复制全部脚本内容。
- 在 Tampermonkey 中新建脚本并粘贴保存(脚本自带 @match ://www.icourse163.org/)。
- 进入中国大学 MOOC 学习页 / 互评页 / 讨论页,按需使用对应功能。
注意事项
- 请仅在你确认允许自动化处理的课程场景中使用。
- 建议先小范围测试,确认课程页面结构正常再批量执行。
- 脚本依赖慕课新版 UI 的 DOM 结构(顶部章节/小节下拉、内容标签栏 role="tablist" 等),平台改版后优先用「页面 DOM 诊断」导出结构再反馈问题。
- 视频中弹题答错时必须手动点击播放才能继续,这是平台的强制校验,脚本无法绕过。
- SPOC 的随堂测验答案来自 dwr 响应,脚本注入时首屏请求已过。若提示「没拿到 dwr 试题数据」,手动切到别的「测试」标签再切回来即可(切换会触发新请求,hook 已在监听了)。
- 互评功能对 SPOC 课程只做页面结构识别,识别不到会直接提示「未检测到互评列表」而不是乱点。
- 自动学习走到随堂测验时,若读不到答案或有题目对不上,不会提交,但仍会停留 10 秒后继续下一个内容——状态栏会写明原因,需要的话手动补完再点提交。
近期版本记录
版本
要点
1.12.0
自动学习不再跳过随堂测验:走到「测试」标签自动作答提交,提交后停留 10 秒再进下一个内容;同小节导航、跨小节/章节首项都不再跳过测验标签;单元测验/作业/考试页(独立路由、无内容标签栏)仍然零点击零提交
1.11.0
新增 SPOC 兼容:课程类型识别、.unitslist/.up.j-up 导航、.m-choiceQuestion 题块、dwr 取答案、.ql-editor 讨论编辑器;MOOC 路径完全不变
1.10.0
新增「随堂测验一键完成」:接口取正确答案→逐题填涂→自动提交;答案不可得或题目对不上时只填不交
1.9.11
修复「下一节」触发崩溃(日志埋点读取未初始化数组长度)
1.9.10
新增开发者日志页签与全流程埋点
1.9.9
视频倍速设置、内容加载就绪等待(15s)、分组标题「第X节」不再跳过
1.9.8
根治“节未完成就跳章”(菜单项 span 碎片文本导致匹配失败)
1.9.7
下拉按钮黑名单过滤、长菜单滚动补渲染、分组标题识别
1.9.6
富文本停留 10s、测验连进入都跳过、跨小节确认制防误跳章
1.9.5
按新版 SPA 重写跳转核心:tablist 兄弟跳转 + 章节/小节下拉三级优先级
1.9.0 ~ 1.9.4
适配新版路径路由、修复假内容 ID 误跳、跨刷新续跑
许可证
MIT License