// ==UserScript== // @name 北京市东城区卫生教育发展中心 - 智能连续学习(倍速+防检测) // @namespace http://tampermonkey.net/ // @version 1.5 // @description 北京市东城区学习脚本,这是一个初级功能版本,连续观看。后续版本将更新秒课,秒答题功能~敬请期待 // @author VX:hapens1986 // @match https://bjdc.wsglw.net/train/courseware/cc* // @match https://bjdcpx.wsglw.net/train/courseware/list?cid=* // @match https://bjdcpx.wsglw.net/train/courseware/cc?cwid=* // @grant GM_xmlhttpRequest // @grant unsafeWindow // @run-at document-end // ==/UserScript== (function() { 'use strict'; // ===== 配置 ===== const SAFE_RATE = 1; // 安全倍速 const MIN_WATCH = 0.95; // 最小观看比例 const HEARTBEAT_INTERVAL = 25000;// 心跳间隔(ms) // ================ let video = document.querySelector('video'); let isPolyv = !!window.player; // 1. 安全设置倍速 const safeSetRate = () => { if (isPolyv) { try { window.player.j2s_setPlaybackRate?.(SAFE_RATE); window.player.setPlaybackRate?.(SAFE_RATE); } catch(e) {} } if (video) { try { video._realPlaybackRate = SAFE_RATE; video.defaultPlaybackRate = SAFE_RATE; } catch(e) {} } }; // 2. 模拟真实观看行为 const simulateHuman = () => { let lastReportTime = 0; const reportProgress = () => { const now = Date.now(); if (now - lastReportTime < HEARTBEAT_INTERVAL) return; const duration = video?.duration || parseInt(unsafeWindow.course_ware_duration) || 60 * 45; // 默认45分钟 const fakeTime = Math.min( duration * MIN_WATCH, lastReportTime / 1000 * SAFE_RATE ); console.log(`[模拟进度] 上报时间: ${Math.floor(fakeTime)}s`); lastReportTime = now; }; setInterval(reportProgress, 5000); }; // 3. 等待视频加载 const waitForVideo = (retry = 0) => { if (retry > 15) return; video = document.querySelector('video'); isPolyv = !!window.player; if (video || isPolyv) { safeSetRate(); simulateHuman(); console.log('[系统] 初始化完成,安全模式已启动'); } else { setTimeout(() => waitForVideo(retry + 1), 1000); } }; waitForVideo(); })();