研修网 · 学习助手(自动连播 + 学情看板)
版本 v3.1.1 · 作者 爱国者 · 适用站点 ipx.yanxiu.com
反馈群:https://qm.qq.com/q/Kacqy4da26
一句话简介
教师研修网(中国教师研修网)辅助油猴脚本:帮你自动连播刷课 + 学情一目了然,全程只做你本来就要点的「播放 / 下一节」,学时是真看出来的,不伪造任何数据。
📦 下载与安装
前提:浏览器装好 Tampermonkey(篡改猴) 扩展。
浏览器
安装
Chrome / Edge
扩展商店搜 Tampermonkey
360 极速浏览器
扩展中心搜 Tampermonkey
安装脚本(2 步):
- 下载本仓库的 研修网学习助手.user.js
- 把文件拖进浏览器窗口 → 油猴弹出安装页 → 点「安装」
验证:打开研修网任意页面,右下角出现蓝色 「研」 按钮 = 安装成功。
✨ 核心功能
功能
说明
🎬 自动连播
静音播放 → 一节播完自动下一节 → 本门播完自动下一门 → 队列跑完自动停
📄 文本/文档段自动推进
按平台 sgmd 字段正确识别文档段(1/2=文档,3+=视频),混合课程(视频+文本)也能顺畅往下走;文本段自动滚动阅读浮层,等平台「已完成本节内容」后继续
📜 自动阅读课程指南/专家介绍
一键「读指南」自动滚动长文本;可设「本门学完自动读」(仅信息区,不影响学时)
⚡ 加速学习(合规看板)
实时显示平台真实心跳上报次数与累计位置;明确告知「最快路径 = 1 倍速真实观看 + 自动连播 + 后台保活」
📖 课程信息回显
播放页面板显示课程名 / 教师 / 全部章节名 / 每节时长,当前节高亮
📎 课件 / 文稿直达
每节带类型徽标;视频段附着的 Word/PDF/PPT 资料点 📎 新标签页打开,文稿点 📄 打开
⏭ 一键跳章 / 断点续播
点任意章节直接切;重进课程自动从第一个未学段开始,已学完的自动跳过
💤 后台保活 + 看门狗
切到别的窗口不被冻结;播放页意外关掉,学习空间页自动重新拉起
📊 学情看板
1440 分钟达标进度、折算得分、最短达标排程、课程库搜索/排序、CSV 导出
🧪 随堂测识别与提醒
自动识别「看课N%开启随堂测」的测验型课程,面板标注 随堂测 @95%(需本人作答);进入时提示、快到阈值前提前提醒、弹题时响铃通知并暂停连播(不代答)
🔔 声光提醒
平台弹验证题时响铃 + 桌面通知,你处理完自动继续
🖼 精美界面
玻璃拟态 + 深蓝金橙渐变,面板可拖动、可缩放,位置和大小自动记忆
🆕 v3.1.3 本版修复(重点)
问题:播放中弹出「点我继续计时」,视频就卡死不动了,也不会自动播下一节。
根因(翻平台播放器源码拿到的):srt-player.vue 里
popupAlarmClock(){ this.isShowAlarmClock = true; this.heartbeatPause(); } // heartbeatPause:暂停视频 + 清掉心跳定时器
alarmClockClose(){ this.isShowAlarmClock = false; this.heartbeatStart(); this.MSEPlayer.play(); } // 点按钮才恢复
也就是说,闹钟弹窗一出现,平台自己就把视频暂停了、心跳定时器也停了 —— 只有点掉它才会恢复。旧版把「继续计时」归类为「必须本人处理」的拦截,碰到就暂停排队等人工,于是人不在时视频就一直停在那里,看起来像卡死。
修复:新增 resumeAlarmClock()(默认开)
- 识别可见的 .alarmClock-wrapper(平台 alarm-clock.vue,data-v-20ad932e,文案「点我 / 继续计时」);
- 点的是平台自己的那个按钮 → 平台 handleClick() → $emit('on-close') → alarmClockClose() 完整恢复(关弹层 + heartbeatStart() + MSEPlayer.play());
- 兜底:400ms 后弹层还在,就直接驱动组件 $emit('on-close'),再不行重置节流重试;
- 再兜两层 play()(900ms / 1800ms),确保关掉弹窗后一定回到播放态;
- 同一次弹窗连续 8 次都点不掉,才回落到原来的响铃 + 桌面通知提醒(用于平台改版或滑块验证的场景);
- 设置里新增开关「继续计时自动点」,不想要可关掉。
边界(保持不变)
- 只点这个在场确认按钮,不伪造心跳、不改任何上报数据;播放与心跳恢复全部由平台自己的 alarmClockClose() 完成;
- 需要答题的「回答问题完成验证」依旧只提醒、不代答;
- verificationMethod=2 的课程平台渲染的是滑块(slider 组件),不是「点我继续计时」—— 滑块属行为验证,脚本不代拖,仍走提醒。
验证:用 CDP 在真实域名/真实播放页 URL 下拦截返回自制页,触发与平台完全一致的 popupAlarmClock()(暂停视频 + 弹层)→ 助手在 1 秒内点掉 → 弹层消失、状态条显示「已自动点「继续计时」,恢复播放」、后续 tick 继续走完播判定 ✅
🆕 v3.1.2(上一版)
适配学习空间主页:https://ipx.yanxiu.com/train2/workspace/{项目ID}/member
- 读取「看课 / 学习」板块信息:板块标题、考核要求(「统一按时长考核(必修、选修)观看课程 1440 分钟,总分 45 分」)、已完成(「已学习 1459 分钟,已得 45 分」),显示在面板副标题、顶部进度条与总览卡片;
- 达标与折算得分改用平台真实考核值(本项目 1440 分钟 / 45 分),换到别的项目会自动跟随该项目的考核要求;接口取不到时回退默认值,不会报错;
- 课程模块名取平台真实值(师德教育课程 / 业务课程),不再是内部编号占位;
- 课程列表一次拉全(本项目 43 门,含必修/选修、时长、进度、是否可看),可直接生成队列自动学习;
- toolId 采集更稳:除嗅探页面请求外,新增「读页面组件」一路兜底;
- 不删减任何旧功能:原 /training/member 页面、播放页自动连播、自动评分、随堂测关闭续播等全部保持原样。
🆕 v3.1.1 修复(上一版)
问题 1:设置里「自动评分 5 星」没反应 —— 评分弹层出现时,星星点不亮,「提交」按钮一直是灰的,点了也白点。
根因(翻平台源码拿到的):评分组件 rating.vue 的数据里 pointerAtLeftHalf 的初值是 true,而它的 changeValue() 是这么写的——
changeValue(e){
this.allowHalf && this.pointerAtLeftHalf
? this.$emit('input', this.currentValue) // ← currentValue 初值 0
: this.$emit('input', e) // ← e 才是"第几颗星"
}
而 pointerAtLeftHalf 只在 mousemove 里才会被更新。旧版自动评分只发了一个孤零零的 .click(),从来没派发过鼠标移动 → 该标志一直是 true → 永远提交 currentValue(0)→ 弹层里 rate 恒为 0 → 提交 永久禁用。
修复 1:改为先按真实指针轨迹在目标星右半区派发 mousemove(2*offsetX > 图标宽,从而取整星而非半星),再补 click;随后校验「提交」是否解禁再提交,并带 Vue 实例兜底。
真机 A/B 实测(同一门课、同一个弹层):
旧逻辑 → rate=0、提交 disabled=true、5 颗星全是 icon-star__default(复现失效)
新逻辑 → rate=5、提交 disabled=false、5 颗星全变 icon-star__checked、弹层已提交关闭 ✅
问题 2:随堂测弹出来就卡住,想让它关掉继续播。
修复 2:新增「随堂测自动关闭续播」(默认开)。脚本识别随堂测弹层(用 multiple/index.vue 独有的 .form-answers .close「×」按钮做特征),自动点它关闭弹窗并立刻恢复播放。
- 平台源码里该「×」就是它自己提供的关闭入口:close() → $emit('close') → 父组件 isShowAnswerCard = false;
- 关闭后平台不会自动继续播(heartbeatPause() 把视频暂停了),所以脚本立刻 play();播放一恢复,平台的 handlePlaying() 就会 heartbeatStart(),学时照常累计;
- 防挂机验证题(回答问题完成验证)没有这个「×」,属于真·在场校验 —— 脚本依旧只响铃 + 通知 + 暂停,不代答、不代关;
- 「继续计时」是另一种弹层(alarm-clock.vue,纯按钮无题目),v3.1.3 起改为自动点掉并恢复播放,见上。
真机实测:beginExam() 弹层出现(3 题,closable 3 个 ×)→ closeQuizCard() → isShowAnswerCard=false、弹层 answerCard-hidden、视频 isPlaying=1 恢复播放 ✅
修复 3(顺带):页面上同时存在多个 .answerCard-wrapper(防挂机验证卡常驻 DOM,只是加了 answerCard-hidden)。旧写法 $('.answerCard-wrapper') 只会抓到第一个(隐藏的那个)→ 找不到关闭按钮。改为遍历所有未隐藏的答题层再定位「×」。
🆕 v3.1.0 修复(上一版)
问题:带「随堂测」的课程(课程页显示 看课95%开启随堂测)一进播放页,脚本就永久暂停 + 一直响铃,完全不能自动学习;同时换个人/换个项目进去,课程列表还可能是空的。
根因 1(随堂测误判):翻平台播放器源码 spring-grain / srt-player.vue 发现 examState 的规则是——
只要本课是「看课 + 测验」型(typeOfCompleted === 3),.action-timer 里的「去测验」按钮就常驻可见(灰底 default 状态),它只是入口,不是弹窗。旧版把它当成「需要本人处理的拦截」,于是每帧都判定为「必须本人作答」→ 永久暂停。真正的弹题是看课到 95% 时平台自动弹出的答题层 .answerCard-wrapper。
修复 1:把常驻的「去测验」按钮排除出拦截判定,只在答题层真正出现时才暂停提醒;并新增随堂测识别(解析 看课N%开启随堂测 的阈值),面板标注 + 进入提示 + 到点前提前响铃通知。
根因 2(列表为空):成员培训页(/train2/workspace/{项目ID}/training/member)的课程不由模块接口下发,而是按多个 toolId(学段/学科课程包)分别查询;旧版只认一个 toolId,且会跨项目复用缓存。
修复 2:嗅探页面自身发出的全部 toolId 并发查询、合并去重,并记住每门课归属的 toolId;toolId 改为按项目隔离存储,根治跨项目污染。
🚀 三步上手
- 在做任务的电脑上登录研修网,打开「学习空间」(/train2/workspace/)
- 点右下角 「研」 → 切到 「自动挂机」 → 选队列模式(推荐「最短达标」)→ 点 「⚡ 开始自动看课」
- 第一门课的播放页自动打开,右上角出现悬浮面板 → 你就可以去干别的了
看板和播放页面板都能拖动、缩放,位置下次打开还在原处。
💬 反馈与打赏
全部功能永久免费,没有任何「赞助解锁」。 打赏只是表示你愿意让工具继续被维护。