
自动连播助手(Chrome / Edge 扩展)
一个通用的浏览器扩展:自动识别网页里正在播放的视频和播放列表,视频暂停时自动续播,播放结束后自动点击下一个视频。
功能
- 自动识别视频:扫描页面中所有
<video>元素,并监听动态加载的新视频(含 iframe 内嵌播放器、Shadow DOM)。 - 暂停自动续播:检测到视频被暂停(非播放结束)时,自动恢复播放。
- 识别待播列表:用启发式算法解析课程/播放列表,区分 已播 / 播放中 / 待播 状态;自动穿透 iframe,识别主页面和子页面中的目录。
- 自动连播:当前视频播放结束后,优先点击平台自带的”下一集”按钮;没有时按目录顺序点下一个待播项,遇到未展开目录会自动展开父级后再点击。
- 倍速播放:可选开关,支持 1.0x ~ 5.0x 多档倍速,视频切换后自动保持,关闭即恢复 1 倍速。
- 读取视频进度条:实时显示当前视频播放进度(
00:33 / 34:06)和课程总进度百分比。 - 悬浮面板:页面右下角实时显示运行状态、视频数量、目录统计,可拖拽、可折叠,支持手动”立即播放下一集”,可展开调试日志查看识别过程。
安装步骤
- 打开 Chrome 或 Edge,地址栏输入
chrome://extensions(Edge 为edge://extensions)。 - 打开右上角 「开发者模式」 开关。
- 点击 「加载已解压的扩展程序」。
- 选择本文件夹(
auto-video-player,包含manifest.json的那一层)。 - 打开任意视频网站(B站、YouTube、课程网站等),页面右下角会出现悬浮面板即表示已生效。
使用
- 面板 / 扩展图标弹窗里可开关:总开关、暂停自动续播、播完自动下一集、倍速播放。
- 设置通过 Chrome 同步存储,改动会实时生效到已打开的页面。
- 若不希望某些页面自动运行,可在扩展详情里通过「网站访问权限」限制。
文件说明
| 文件 | 作用 | | — | — | | manifest.json | 扩展清单(Manifest V3) | | content.js | 核心逻辑:视频识别、续播、列表识别、连播、悬浮面板 | | content.css | 悬浮面板样式 | | popup.html / popup.js | 扩展图标弹窗(设置面板) | | icons/ | 扩展图标 | | gen_icons.py | 图标生成脚本(可删除) |
更新日志
v1.7.9
- 新增倍速播放功能:
- 默认 1 倍速,最高 5 倍速,档位:1.0x / 1.25x / 1.5x / 2.0x / 2.5x / 3.0x / 4.0x / 5.0x。
- 悬浮面板新增「倍速播放」开关 + 「播放速度」下拉选择;扩展图标弹窗同样支持设置。
- 默认关闭(
speedEnabled: false),避免与平台自带倍速冲突或触发违规检测;开启后所有帧的视频统一应用倍速。 - 视频切换(重新播放)时自动重新应用倍速,防止播放器重置;设置实时同步到所有已打开页面,关闭开关即恢复 1 倍速。
v1.7.8
- 修复「任何网页都触发扩展、很麻烦」:
manifest.json的content_scripts.matches从<all_urls>收紧为常见视频/网课平台清单(网梯、B站、优酷、爱奇艺、腾讯视频、网易云课堂、中国大学MOOC、学堂在线、智慧树、慕课网、超星、网易公开课、腾讯课堂、高顿、抖音、快手、虎牙、斗鱼、YouTube 等),未列入的网站完全不会注入。content.js顶层 frame 启动时再次校验:不在已知平台域名 且 没有<video>元素时,整个 IIFE 立即return,不绑定任何事件、不创建面板、不扫描 DOM。- 子 frame 仍正常工作(依赖父 frame 的 postMessage 唤醒),但只在匹配的网课平台子页面里才会注入。
- 调整清单:若遇到扩展在某个网课平台未生效,可编辑
manifest.json的matches加上对应域名后重新加载。
v1.7.7
- 修复「仍未按顺序播放,且播完最后一个视频后不会回头补齐漏看课时」:
findNextItem改为自动补齐模式:自动连播时按目录顺序取第一个未完成课时,不再局限于「当前项之后」。这样即使前面有漏掉的视频,播完后也会回头继续播放,直到课程全部完成。- 手动点击「立即播放下一集」仍优先取当前项之后的下一个未完成课时,保持操作预期;当前项之后没有待播项时,再兜底取全局第一个未完成项。
clickNext增加autoEnded参数,自动结束事件与手动按钮使用不同策略,并在跨帧广播中传递manual标志。- 全部课时完成后日志输出「全部课时已完成」,避免无意义重复跳转。
v1.7.6
- 修复「v1.7.5 仍未拦住播放器帧乱点 / 当前项识别错位」:
clickNext目录有效性判断由「leafCount ≥ 3」改为「本帧必须含.s_point[itemtype="video"]」。网梯内容帧(播放器控件)即便识别出 3 项也不算目录,必须让顶层调度到真正拥有.s_learnlist的目录帧。pickBestFrameForNext同样过滤掉不含.s_point的无效帧,委派的目标帧一定是真实目录帧。analyzeList当前项识别顺序改为 URL 匹配优先,再退回到s_pointerct类标记。原因:平台可能在目录上保留对某一项的s_pointerct高亮,但用户实际播放的是另一项(URL 不同),此时按s_pointerct找当前项会指错,导致下一集跳过多个真实未看项。- 行为:用户从 leaf[N](未标
s_pointerct)播放结束 → 用 URL 识别为 leaf[N] → 下一集严格取 leaf[N+1] 之后的第一个非已完成项。
v1.7.5
- 修复「播完下一集仍不按顺序乱跳」:
- 顶层统一调度:视频结束后由顶层挑选「目录项最多」的帧执行下一集,避免多个 iframe 同时点击导致乱跳;
- 子帧目录项不足 3 个时不再处理下一集,防止播放器画质选择(全高清等)被误当目录点击;
- 网梯平台直接调用
openLearnResItem(itemId, 'video', null, title),比点击元素更稳定; - 新增全局 8 秒跳转锁,防止重复触发下一集。
v1.7.4
- 修复「播完跳转下集不按顺序、中间跳过的视频被误认为已看完」:
- 目录状态判定只信任平台真实标记(
completestate="1"、s_pointerct等),不再把当前项之前的所有课时默认标为已播; - 修复后:跳过未看的视频仍保持「待播」,课程总进度与待播数量与平台实际状态一致;
findNextItem严格按 DOM 顺序取当前项的下一个非已完成课时,避免跳集。
v1.7.3
- 修复「点击播放下一集仍跳回当前正在播放的视频」:
findWangtiCatalog移除.learn-menu(左侧导航)误命中,只认#learnMenu/.s_learnlist等真正的课程目录;- 目录容器搜索改为跨所有同域 iframe 取评分最高者,
.s_point[itemtype="video"]目录永远优先,左侧导航强烈减分; - 移除「兜底点击随机元素」逻辑(此前顶层帧找不到下一节时会乱点顶层元素,导致跳到当前视频);
- 「下一集」支持跨帧委托:没有目录的帧返回失败后,由顶层广播给拥有目录的子帧执行精准跳转,子帧成功即停止向下广播。
- 日志新增帧标识(
TOP/IFRAME|页面名),便于定位问题帧。
v1.7.2
- 修复
collectItems中const candidates被重新赋值导致的Assignment to constant variable错误(该错误使目录分析中断)。 - 目录识别优先使用网梯平台专用
findWangtiCatalog,避免把左侧「课件/课程简介/学习进度」导航菜单当成课程目录。 - 在启发式评分里:包含
.s_point[itemtype="video"]大幅加分,包含.learn-menu-cell大幅减分。 collectItems增加过滤,排除左侧导航、播放器控件(高清/标清等)等非课时项。
v1.7.1
- 加入设置版本迁移:升级后强制把「暂停自动续播」重置为关闭,避免旧设置残留导致继续触发平台警告。
- 进一步增强网梯平台目录识别:新增
findWangtiCatalog,直接命中#learnMenu/.s_learnlist/[class*="learnlist"],并以包含最多.s_point[itemtype="video"]的div作为兜底。
v1.7
- 风险规避:默认关闭「暂停自动续播」,移除直接调用
video.play()的逻辑,改为仅在开启开关时模拟点击播放按钮。 - 降低视频进度上报频率(500ms → 2000ms)和子帧 ping 频率(1s → 3s),减少被平台检测为异常播放的可能性。
- 面板与弹窗对「暂停自动续播」增加 ⚠️ 风险提示。
- 修复目录识别为 0 项:增加对网梯平台
#learnMenu/.s_learnlist的直接命中与兜底选择。
v1.6
- 针对网梯 / whaty-learnspace 课程平台做精准适配:
- 目录叶子项直接识别
.s_point[itemtype="video"],避免取到内部.wrap导致 class/状态丢失; - 已完成状态读取
completestate="1"属性; - 当前播放中状态识别
s_pointerct类; - 当前课时通过
onclick中的itemId与 URL 中的params.itemId前 8 位匹配,解决无<a href>时无法定位当前项的问题。 - 课程总进度计算更准确:1 个已完成 + 1 个播放中 + 11 个待播 = 13 项。
v1.5
- 目录识别只保留“带播放时长的视频课时”,剔除「第X讲」「章节」等非视频项,避免把 15 项误算成视频数。
- 当前课时定位增强:支持从目录项的
onclick/data-*属性中提取真实跳转链接,再与当前 iframe URL 匹配。 - 面板新增「复制日志」「复制目录HTML」按钮,可一键复制识别结果与目录 HTML,方便针对性适配。
- 调试日志改为输出全部课时的文本、类名、完成标记、跳转链接。
v1.4
- 修复“所有课时都识别为已播、课程总进度 100%”的误报:
- 已完成检测更严格,避免
checkbox/checked等子元素误匹配; - 新增“URL 匹配”定位当前课时,适配 whaty / webtrn 类课程平台;
- 新增页面标题、章节标题匹配当前课时;
- 当全部课时都被标记为已完成、但当前视频尚未结束时,自动判定为误报并清空已完成标记。
- 调试日志默认输出目录分析详情,方便定位识别问题。
说明与限制
- “识别列表”采用通用启发式策略,大多数主流视频网站都能命中;极少数结构特殊的网站可能需要针对该站做适配。
- 自动续播依赖页面已发生过用户交互(浏览器自动播放策略),正常浏览观看场景下均满足。
- 本工具仅用于个人学习、课程连播等合法场景,请遵守目标网站的条款。
