auto-video-player v2.1.2(自动连播助手)

释放双眼,带上耳机,听听看~!

自动连播助手

auto-video-player v2.1.2(自动连播助手)

自动连播助手是一款 Chromium 内核浏览器(Chrome / Edge)扩展,针对网课平台的课件目录实现自动播放与自动跳转到下一节,支持倍速播放、商业授权等,帮助你无人值守地完成课件连播。

下载安装包

点击下方按钮下载 v2.1.2 安装包(zip,约 136 KB):

⬇️ 下载 auto-video-player-v2.1.2.zip

⚠️ 原创作品 · 著作权声明

© 2026 胡昱晨 (hu_yu_chen) 保留所有权利。

本扩展为原创作品,依据 MIT 许可证开源。依据 MIT 条款及《中华人民共和国著作权法》:

  • 必须保留署名:任何使用、复制、修改、分发本作品的行为,都必须完整保留 源码中的版权头、LICENSE 文件与 NOTICE 文件中的作者署名;
  • 禁止冒名:未经书面许可,任何人不得宣称自己为本作品的原始作者, 亦不得以作者名义进行宣传、推广或背书;
  • 修改须标注:修改后再分发须显著标注「已修改」及修改日期。

违反上述条款即构成侵权,权利人保留追究法律责任的权利。 完整条款见 LICENSE 与 NOTICE。

一个通用的浏览器扩展:自动识别网页里正在播放的视频和播放列表,视频暂停时自动续播,播放结束后自动点击下一个视频。

支持的平台

扩展会按域名自动判定当前平台,并只启用该平台的一套策略。各平台可单独启停(见下方「使用」)。

平台 域名 处理方式 状态
网梯科技 webtrn.cn .s_point[itemtype="video"] 目录识别 · completestate 完成判定 已冻结
江西师范大学 jxnu.edu.cn 百家云播放器接管(无 <video>)· 目录百分比进度 维护中
通用兜底 其余站点 <video> 元素基础连播能力 维护中

为什么按平台隔离:不同平台的目录结构与完成标记完全不同,早期把各平台的特判都写在 同一条共享路径上,改动一个平台存在波及另一个的风险。现在每个平台的专属逻辑都受 profileAllows(id) 准入保护——在 A 平台上,B 平台的判定分支根本不会执行。

「已冻结」表示该平台的逻辑不再随其他平台的开发而改动,任何变更必须先让 tests/selftest_whaty_frozen.js 全绿。

功能

  • 平台自动识别:打开页面即按域名判定平台,面板上会显示当前平台名。
  • 自动识别视频:扫描页面中所有 <video> 元素,并监听动态加载的新视频(含 iframe 内嵌播放器、Shadow DOM)。
  • 自定义播放器接管:播放器不在 <video> 里(canvas + WebAudio,如百家云)时,直接从播放器控制条读取进度并模拟起播。
  • 暂停自动续播:检测到视频被暂停(非播放结束)时,自动恢复播放。
  • 识别待播列表:用启发式算法解析课程/播放列表,区分 已播 / 播放中 / 待播 状态;自动穿透 iframe,识别主页面和子页面中的目录。
  • 自动连播:当前视频播放结束后,优先点击平台自带的”下一集”按钮;没有时按目录顺序点下一个待播项,遇到未展开目录会自动展开父级后再点击。
  • 倍速播放:可选开关,支持 1.0x ~ 5.0x 多档倍速,视频切换后自动保持,关闭即恢复 1 倍速。
  • 读取视频进度条:实时显示当前视频播放进度(00:33 / 34:06)和课程总进度百分比。
  • 悬浮面板:页面右下角实时显示运行状态、视频数量、目录统计,可拖拽、可折叠,支持手动”立即播放下一集”,可展开调试日志查看识别过程。

安装步骤

  1. 打开 Chrome 或 Edge,地址栏输入 chrome://extensions(Edge 为 edge://extensions)。
  2. 打开右上角 「开发者模式」 开关。
  3. 点击 「加载已解压的扩展程序」。
  4. 选择本文件夹(auto-video-player,包含 manifest.json 的那一层)。
  5. 打开任意视频网站(B站、YouTube、课程网站等),页面右下角会出现悬浮面板即表示已生效。

使用

  • 面板 / 扩展图标弹窗里可开关:平台启停、总开关、进入页面自动起播、暂停自动续播、播完自动下一集、倍速播放。
  • 平台启停:可单独关闭某个平台。关闭后,该平台所属域名上扩展完全不动(不建面板、不扫描、不接管),适合在其中某个平台出问题时先隔离该平台、不影响其他平台。重新勾选即可恢复,无需刷新页面。
  • 设置通过 Chrome 同步存储,改动会实时生效到已打开的页面。
  • 若不希望某些页面自动运行,可在扩展详情里通过「网站访问权限」限制。
  • 只在有播放内容的页面工作:打开白名单内的普通页面(首页、列表页等没有任何视频/播放器特征的网页)时,扩展不会弹出面板、不做任何扫描;页面后续真的出现播放内容才会自动启动。

商业授权(作者必读)

本插件采用离线授权码机制:没有有效授权时,插件在网页上完全不工作(不扫描、不起播、不自动下一集),只在页面右下角显示「🔒 插件未授权」卡片,需联系作者获取授权码。

授权为程序级授权(v2.1.1 起):不绑定域名、不绑定平台——授权码只证明”该用户有权使用本程序”,激活后全部功能、全部已支持网站均可使用。

用户激活(两种方式任选):

  1. 打开任意已支持的学习网站,页面右下角「🔒 插件未授权」卡片里粘贴授权码 → 点「激活」;
  2. 点浏览器工具栏扩展图标,在弹窗顶部的授权卡里输入激活。

授权码保存在 chrome.storage.sync,随 Chrome/Edge 账号同步,换电脑登录同一账号无需再次激活。

开发者:改动前请跑自检

平台越多、判定分支越容易互相影响,因此所有平台相关改动必须通过回归门禁:

node tests/run-all.js        # 跑完全部自检,全绿才可合入
测试文件 覆盖范围
tests/selftest_whaty_frozen.js 网梯冻结门禁:黄金用例 + 隔离边界 + 冻结标记完整性
tests/selftest_lessonfilter.js 课时/章节标题过滤,含平台隔离断言
tests/selftest_customplayer.js 自定义播放器读数与起播(含源码级断言)
tests/selftest_autostart.js 首次起播行为仿真(虚拟时钟驱动真实 tick)
tests/selftest_videostate.js video 状态与空壳过滤
tests/selftest_license.js 授权算法(SHA-256 向量 / 签名 / 程序级授权 / 过期)+ 授权闸门与待命守卫断言
tests/selftest_robust.js 健壮性回归:readCustomPlayer/background 行为测试(DOM/chrome API 桩)+ 修复断言

新增平台时的约定:在 PLATFORMS 里登记,用 profileAllows(id) 包住专属分支,并为新平台补一套自检。

文件说明

文件 作用
manifest.json 扩展清单(Manifest V3)
content.js 核心逻辑:视频识别、续播、列表识别、连播、悬浮面板
content.css 悬浮面板样式
popup.html / popup.js 扩展图标弹窗(设置面板)
background.js 后台看门狗 Service Worker(chrome.alarms 驱动,解决后台节流)
license.js 商业授权:离线授权码签发/校验(content script、popup、生成器三方共用)
tools/gen-license.js 授权码生成器(作者本地运行,不随买家分发)
icons/ 扩展图标
LICENSE MIT 许可证全文
NOTICE 知识产权与著作权声明(中英双语)
gen_icons.py 图标生成脚本(可删除)

上述所有源文件头部均嵌著作权声明,使用时请勿删除。

版权与二次分发

本项目以 MIT 许可证开源,允许自由使用、复制、修改与分发(含商业用途), 但必须满足以下保留义务:

  1. 保留每个源文件的版权头注释;
  2. 保留 LICENSE 与 NOTICE 文件;
  3. 保留界面上的作者署名(悬浮面板底部、扩展弹窗底部);
  4. 不得宣称自己为原始作者,或修改后不标注即行分发。

简洁地说:代码可以免费用,作者的名字不可以拿掉。

更新日志

v2.1.2(2026-10-27)全栈体检:5 个 bug 修复 + 性能优化

对全部源码(manifest / background / content / popup / license / shadow_bridge,约 4900 行)做了一次完整通读,修复确认的问题:

  • 修复 readCustomPlayer() 调用未定义的 pick():「时长读不到」分支一进去就抛 ReferenceError 被静默吞掉,自定义播放器会被永远当成”暂停中”(现有测试都走”时长读得到”分支,从未覆盖)。
  • 修复 SPA 路由监听重复注册:待命再唤醒会叠加 popstate/hashchange 监听、反复包装 pushState、1500ms 轮询 interval 越积越多(且不在 tickTimers 里,待命时清不掉);改为监听器只装一次 + 轮询纳入 tickTimers 统一管理。
  • 修复 background 标签页注册竞态:addTab/removeTab 原是”异步读 storage → 改 → 写回”,两个标签页几乎同时注册时后写覆盖先写(丢更新),被丢的标签页收不到看门狗唤醒;改为内存数组为单一事实源 + 启动时恢复一次(单 Promise 去重)。
  • 修复 Shadow 桥升级不刷新 matches:扩展升级后域名清单变了,已注册的 MAIN world 桥不会更新,新域名永远注入不了;改为注册前逐项比对,过期则 updateContentScripts(老内核自动降级为”注销 → 重注册”)。
  • 修复面板”空壳 video”统计错误:改用 isRealVideoObj 直接统计,避免页面存在重复 src 的 video 时虚报空壳数量。
  • 健壮性:chrome.tabs.sendMessage 同时兼容 callback 与 Promise 两种 API 形态;起播复查定时器(3s/8s/16s)重新调度前先作废旧句柄;ping 向孙辈 iframe 转发;倍速下拉存储值不在选项内时动态补选项,updateUI 对面板控件逐个空值保护。
  • 性能:video 元素清单与目录容器查找加 TTL 缓存,大页面 CPU 占用显著下降。
  • 测试:新增 tests/selftest_robust.js(44 项),全量回归 184/184 通过。

v2.1.1(2026-10-27)授权改为程序级:不绑定域名/平台

  • 授权码 payload 去掉域名字段,同一授权码在任何网站、任何平台都有效;旧版(v2.1.1 前)签发的带域名码签名仍然有效且同样不再受域名限制,无需重签。
  • 未授权提示卡移除「当前网站域名 + 一键复制」行(程序级授权不再需要域名信息);popup 授权卡由”适用网站 xxx”改为”程序级授权(全部功能 · 全部已支持网站)”,引导语由”把网站域名发给作者”改为”联系作者购买授权”。
  • tools/gen-license.js 的 --domain 改为非必填(传入会被忽略并提示),签发命令简化为 node tools/gen-license.js --days 365 --customer CUST-001;tests/selftest_license.js 升级为 51 项,全量回归 140/140 通过。

v2.1.0(2026-10-27)商业授权 + 修复”任何网页都蹦出插件”

  • 商业授权(未授权不工作):新增 license.js,离线授权码方案(无需服务器),未授权时不扫描、不起播、不建面板、不注册看门狗,只在页面右下角显示「🔒 插件未授权」卡片(失败原因 + 作者联系方式 + 授权码输入框);新增 tools/gen-license.js 作者签发工具(不随买家分发包)与 tests/selftest_license.js(48 项)。
  • 修复”安装后任何网页都蹦出插件”:新增启动状态机(boot → startFull / startProbe / enterStandby)、待命守卫(看门狗消息 / visibilitychange / window load / SPA 路由变化四个通道待命期直接返回)、host_permissions 与 web_accessible_resources 从 <all_urls> 收紧为与 content_scripts 相同的 27 域名白名单。
  • 其它:escapeHtml() 补全引号转义、面板信息行追加授权状态(客户号 / 到期);全量自检 137/137 通过。

v2.0.1(2026-10-13)平台名称更正

纯文案修正,无逻辑改动。

  • 更正第二个平台的归属名称:jxnu.edu.cn 是江西师范大学的 zjpt 学习平台,此前 content.js 的 PLATFORMS、popup.js 平台清单、README / CHANGELOG 中误写为「江西专技学习网」,现统一更正为「江西师范大学」。
  • 影响面:仅面板 / 弹窗上显示的平台名,以及 platformInfo().name 的诊断输出,不涉及任何平台判定逻辑(detectPlatformByHost() 按域名判定,不受影响)。
  • 网梯冻结区未改动,node tests/run-all.js 全量自检仍为 89/89 通过。

v2.0.0

  • 双平台策略隔离:新增平台 profile(网梯 / 江西师范大学 / 通用兜底),按域名判定后只启用对应平台的一套策略。此前为 jxnu 加的每一处特判都在共享代码路径上,现在它们有了明确边界——改 jxnu 不可能再波及网梯。
  • 前台平台启停:面板与 popup 新增「平台启停」勾选列表,可单独关闭任一平台;关闭后该平台域名上扩展完全不动(不建面板、不扫描、所有 tick 停手),可随时重新开启。
  • 网梯平台正式冻结:网梯目录识别与完成判定标注冻结不再改动;新增 tests/selftest_whaty_frozen.js(20 项)作为回归门禁——任何导致网梯行为变化的改动都会在自检阶段报红。
  • 新增统一自检入口 tests/run-all.js(合计 89 项),建议改动合入前必跑。
  • 说明:未识别到的站点归为「通用兜底」,此时两套平台专属逻辑都放行(向后兼容),真正的隔离发生在两个已知平台之间。

v1.9.3

  • 修复「刷新页面 / 进入视频页后必须人工点一次才会播放」:起播原先被 autoResume(默认关闭)、cur<=15、刚跳转 三道闸门卡住,停在播放中途(如 25:01)时永不出手。
  • 把「首次起播」与「暂停续播」拆开:新增开关 进入页面自动起播(默认开启),负责每一节的第一次播放,播起来即收手,之后用户手动暂停不再打扰;autoResume 维持原语义。
  • 冷启动状态机:接管后 2.5s 出手,3s/8s/16s 三次复查并升级起播方式(media.play → 自带按钮 → canvas → 画面容器 → 空格键),8 分钟 / 6 轮上限。
  • 换课时三重识别信号(容器类名变化 / 本扩展刚跳转 / 播放位置倒退),同时修复”跳到下一集却不起播”。
  • 版本升级不再偷偷还原用户手动勾选的 autoResume。新增 14 项行为级仿真自检(虚拟时钟驱动真实 tick)。

v1.9.2

  • 修复「一会播放一会暂停」:百家云的时间容器本身叫 .duration,导致总时长一直读成 0;同时占位 <audio> 抢占读数通道使播放位置恒为 0 → 误判卡住 → 反复点击播放按钮(而它是播放/暂停开关)。新增 readPlayerClock() 精确读数 + media 可用性判定。
  • 三重防误暂停:UI 显示播放中时判停等待放宽到 90s;读不到位置且在播不出手;复查发现已在播立刻收手。
  • 目录进度不再负责起播(长视频涨幅慢会被误判),交由秒级的自定义播放器心跳接管。

v1.9.1

  • 修复目录驱动 tick 每 3 秒崩溃:catalogDriveAnnounced、currentItemPausedByIcon 未声明/未实现,严格模式下抛 ReferenceError,起播级联一行都没执行到。
  • 接管无 <video> 的自定义播放器(百家云 bplayer:canvas + audio):新增 DOM 状态读取、伪装状态上报、五级起播级联与事后进度校验;面板可显示真实进度,播完自动下一集。
  • 修复摄像头空壳 <video> 冒充”正在播放”堵死兜底路径;新增 24 项自检。

v1.9.0

  • 起播四级级联(按钮/画面点击/空格键/课时图标);扫描覆盖 object/embed;桥上报注入时机;复制目录HTML附带播放器区域 DOM。

v1.8.9

  • Shadow 桥注入改为 registerContentScripts(world:'MAIN', document_start) 原生注册 + 同步内联双通道,彻底消灭竞态;桥上报容器数量,play() 被拒时改点容器内播放按钮;诊断行显示桥状态。

v1.8.8

  • 定位到 jxnu zjpt 播放器的真实藏身处:关闭的 Shadow DOM(页面底部有播放器控制条但查不到可播 video、iframe 为 0)。新增主世界桥接脚本 shadow_bridge.js,截获 closed shadowRoot、回传 video 状态、下发播放/倍速命令,自动起播与播完自动下一集从此直接控制真实播放器。
  • 修复 v1.8.7 的图标误判(pause-circle 是”进行中”不是”播放中”,曾导致卡住不起播);当前课时图标变 check-circle 立即跳下一集。
  • content script 提前到 document_start(抢装 Shadow 钩子),页面早退判断相应延迟到 init。
  • manifest 新增 scripting 权限与 web_accessible_resources。

v1.8.7

  • 修复 jxnu zjpt「不自动播放 / 播完不跳下一集」:页面上的 3 个 video 实为摄像头与人脸检测的空壳元素(无 src、readyState 0),却让脚本误判”播放器已可控”,导致按目录进度驱动的自动连播从未生效。现已剔除空壳。
  • 播完判定:目录进度 ≥99.5% 跳转;95% 以上停滞 4 分钟 / 90% 以上停滞 8 分钟也判定播完。
  • 自动起播:进度卡住时(0% 卡 20 秒、中途停 45 秒)点页面播放按钮或当前课时的播放图标;平台显示”播放中”时不干预。
  • 新增 fireFullClick() 完整鼠标事件序列,修复 Vue / Ant Design 平台点击无响应。
  • 面板与日志区分「可播视频 / 空壳 video」计数。

v1.8.6

  • 修复「立即播放下一集」点了没反应:扩展此前命中了自己的面板按钮;现面板带 data-ap-own 标记,页面级扫描一律排除自身元素。
  • 跳转改为目录优先(平台按钮仅兜底);目录项点击改为点内层容器(适配 Vue 平台事件绑定)。
  • 已完成识别补全:Ant Design anticon-check-circle 图标 + 进度条内联宽度 100%。
  • 自动起播:跳过无媒体源的空壳 video;play() 失败时退回点击页面播放按钮(刚跳转后/开启续播时,30 秒节流)。
  • 诊断:绑定视频输出详情,跳转后 2 秒复查当前项是否切换。

v1.8.5

  • 回归防护:确保 jxnu 平台适配不影响网梯(webtrn.cn)原有识别与连播。
    • 课时序号过滤加双重保护:网梯 .s_point[itemtype="video"] 直接跳过过滤;被剔除项若带 openLearnResItem/itemtype=video/completestate 等课时特征则放弃过滤。
    • 本地完成记账改为 10 分钟有效期,避免误标导致漏看课时被永久跳过。
    • 用户主动暂停判定收紧为”已播超过 15 秒”,网梯切集时的开头暂停仍会自动起播。
  • 新增 tests/selftest_lessonfilter.js 自检脚本(提取真实源码运行,5 项断言全通过)。

v1.8.4

  • 修复「复制目录HTML」点了没反应(顶层目录未写入缓冲区)。
  • 修复目录数量不准:混入的章节标题(SPAN.nav-title)被当成课时,已按”课时文本带序号”剔除(17 项 → 真实 13 课时)。
  • 新增目录进度百分比解析与「无视频状态连播」兜底:播放器在跨域 iframe 里监听不到 ended 时,改由课时进度(100%)驱动跳下一集;面板改用平台课时进度显示。
  • 日志降噪(状态不变不重复输出)+ 输出 video/iframe 诊断清单。

v1.8.3

  • 修复 jxnu zjpt 平台检测数量不对、已播/待播不准、跳转后不自动播放:
    • 起播检查 ensurePlaying() 此前只在后台看门狗(每分钟)里执行,前台循环未调用 —— 跳到下一集后新视频停在暂停态。现在前台 3 秒循环、子帧 1.5 秒循环、ping 应答均执行起播检查,跳转后几秒内自动开播。
    • 平台自定义播放器 duration 为 0/未知时不再被跳过(此前表现为”视频在播但进度 0%”);时长未知时面板显示「当前 xx:xx / 未知时长」。
    • 已完成判定新增「目录项百分比进度 ≥ 99.5%」规则(该平台用 0.0%/78.9%/100% 标记状态,不用 class)。
    • 新增运行时本地完成记账:视频播完或自动跳转后,即使平台完成状态延迟 / URL 与高亮不变,也按目录顺序持续推进,不会反复跳回同一集。
    • 面板视频数按 src 去重;前台手动暂停(未开自动续播)会被记住,起播逻辑不抢启。
    • 新增覆盖常见第三方视频云播放器域名(bokecc / polyv / aliyuncs / qiniudns / cdnhwc1·2),若播放器嵌在跨域 iframe 里也能监听播放结束;页面加载后输出 iframe 地址清单到日志,便于后续精准适配。

v1.8.1

  • 修复「浏览器最小化 / 切到后台后不自动播放、不自动跳转」(后台定时器节流导致):
    • 根因:Chrome 对后台标签页实施定时器节流(隐藏一段时间后 setInterval 被压缩到每分钟一次)。而 pickBestFrameForNext / pickBestList 用 12 秒有效期过滤 frameStates,另有 15 秒清理定时器直接 delete frameStates[k] —— 后台时帧状态被判为过期或删除,pickBestFrameForNext() 返回 null,日志打出「未找到有效目录帧」,于是跳不动;回到前台定时器恢复,积压任务一起执行,表现为”打开浏览器才继续”。
    • 时效判定按可见性放宽:新增 frameStateMaxAge(),页面不可见时有效期从 15 秒放宽到 5 分钟(目录结构不会因后台而改变),前台保持严格;清理定时器同步放宽。
    • 调度改用消息驱动:ended 到达时先 analyzeAndReport() + broadcastDown(ping) 实时拉起子帧上报(postMessage 投递不受定时器节流影响),并抽出统一入口 dispatchNext();选不到目录帧时安排一次重试。
    • 新增后台看门狗:新增 background.js(Service Worker)+ chrome.alarms,每分钟唤醒一次并向已注册标签页发消息,内容是 scanVideos → analyzeAndReport → ensurePlaying → 必要时补跳下一集。消息投递会立即执行页面脚本,不受节流限制。无需 tabs 权限,仅用已有的 storage 加 alarms。
    • 被动暂停自动恢复:区分”用户主动暂停”与”后台被动暂停”。页面不可见时发生的暂停(浏览器节流或平台防挂机检测)会自动恢复播放,用户在前台的主动暂停不受影响。
    • 保证下一集真的起播:新增 ensurePlaying(),视频刚开始播放(currentTime < 15)却处于暂停时自动尝试启动(优先模拟点击播放按钮,play() 兜底),避免跳过去之后卡住不动。
    • 恢复可见即时补齐:visibilitychange 回到前台时立即刷新并检查是否有遗漏的跳转。

v1.8.0

  • 新增支持 江西师范大学(zjpt 学习平台) zjpt-web.jxnu.edu.cn:
    • manifest.json 与已知平台列表加入 jxnu.edu.cn,扩展会在该平台正常注入。
  • 修复通用平台无法连播的根本问题:hasRealCatalogInList / clickNext 原先写死只认网梯平台的 .s_point[itemtype="video"],导致任何新平台都会被判定为”无目录”而拒绝跳转。现改为通用判断(排除播放器控件 + 课时标题长度校验),网梯平台保留专属快速路径。
  • 新增 SPA 路由变化监听:Vue/React 类平台(如江西师范大学)切换视频不刷新页面,现通过 popstate / hashchange / 劫持 pushState·replaceState + 定时轮询感知 URL 变化,自动重新扫描视频与目录,并重置上一轮跳转锁。
  • 目录识别增强:新增 Element UI / Ant Design / 中文拼音类名目录容器(.el-menu、.ant-menu、.course-list、kecheng、mulu、zhangjie、keshi 等)。
  • 新增”同级重复结构”兜底识别:目录项无典型 class、无时长文本时(SPA 平台常见),按 tag + 首类名分组识别。
  • 播放器控件过滤:新增 isPlayerControl(),统一排除位于 video / .player / .jwplayer / .vjs-control-bar 等播放器容器内的元素,避免画质、时长、进度条被误当课时。
  • 中文完成状态识别增强:新增「已学习 / 已修完 / 已通过 / 完成学习」等文案与 yixue、xuewan 等拼音类名。
  • 中文”下一集”按钮识别:新增按可见文本匹配「下一节 / 下一讲 / 下一集 / 下节课 / 下一个」,并排除「下一页」等分页按钮。
  • 启动日志新增平台判定输出(已知平台 / 是否存在 video 元素),便于排查注入问题。

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 类课程平台;
    • 新增页面标题、章节标题匹配当前课时;
    • 当全部课时都被标记为已完成、但当前视频尚未结束时,自动判定为误报并清空已完成标记。
  • 调试日志默认输出目录分析详情,方便定位识别问题。
声明:本站所有文章,如无特殊说明或标注,均来自于互联网,下载的软件和资源请在24小时之内删除,本站提供的资源只可作为下载、学习交流使用,其版权归原作者所有,其产生的任何后果均自己承担,本站不作任何责任承担,具体可查看本站免责声明。如已声明或标注原创,任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理,客服链接:点此前往,投诉邮箱:nc08wlkj@163.com。

给TA赞赏
共{{data.count}}人
人已赞赏
电脑软件

OPU(开源项目自动化提交程序) — 一键把项目发布到 GitHub / Gitee

2026-9-16 17:27:07

技术教程网络安全

网络工程师必知的默认端口号大全,建议收藏!

2024-7-16 14:44:10

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
❯
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索