Math.abs(delta) < 0.001)改为基于 currentTime 的时间增量,阈值自动计算(CONFIG.autoResumeMs / 1000 * 0.5),不受视频时长与倍速影响Set 收集(videoTitles),后续循环按标题匹配过滤,跳过文档类知识点getPageEntries(entries) 复用已采集数据,避免多余 DOM 查询CTRL.videoWatchSec / CTRL.itemsProcessed 通过 localStorage 持久化(xxt_watch_sec / xxt_items),页面刷新后续计,不再归零visibilitychange + focus 事件触发时扫描 iframe 内全部 <video>,自动续播暂停的视频screen wake lock 防止系统/浏览器休眠,切回标签时自动重新获取Date.now())— 原来计数器 × 间隔在后台节流时需 30 分钟才触发,现统一为 30 秒实际停滞即强制完成beforeunload + 每 10 秒自动保存video.play() 被浏览器拒绝。开启 DevTools(F12) 相当于一次用户交互,解除了限制video.play() 前先 video.muted = true(静音视频允许自动播放),监控中恢复播放时也先静音.posCatalog_active 出现(最多 20s)findVideosWithRetry 从 1×3s 改为最多 8×2s 循环重试onerror / unhandledrejection 监听waitForEl 超时 20s→30s,sleep 2s→3spageTotal/pageDone/allTotal/allDone)prevPct 初始值改为视频实际起始位置,避免断点续播时将已看部分计入本次时长currentTime 增量,不受倍速影响)