// ==UserScript== // @name 人民教育出版社新教材培训 // @namespace free // @version 1.0 // @description 当前是免费版本,只包含了视频页面自动播放、解除播放暂停限制功能。如需自动下一集、自动换课程、秒过、全自动无人值守高级功能可升级付费版本|接各类脚本开发、代挂工作,微信:zhanyc_cn 个人网站:http://doc.zhanyc.cn // @include *://*pep.com.cn* // @include *://*.pep.com.cn/* // @include *://*.gensee.com/* // @run-at document-end // @require http://libs.baidu.com/jquery/2.0.0/jquery.min.js // @antifeature payment // @license Creative Commons // ==/UserScript== (function () { let $ = unsafeWindow.jQuery || unsafeWindow.$ || window.jQuery || window.$; let docLink = "http://doc.zhanyc.cn/pages/cbsjcpx/"; // ========== 样式注入 ========== function injectStyle() { let styleEl = document.createElement("style"); styleEl.textContent = ` .freePanel{position:fixed;left:10px;top:10px;z-index:2147483647;background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);border-radius:8px;box-shadow:0 4px 20px rgba(0,0,0,0.3);padding:15px;min-width:320px;max-width:400px;color:#fff;font-family:microsoft yahei,sans-serif} .freePanel .fpTitle{font-size:16px;font-weight:bold;text-align:center;margin-bottom:10px;padding-bottom:8px;border-bottom:2px solid rgba(255,255,255,0.3)} .freePanel .fpStatus{background:rgba(255,255,255,0.2);border-radius:4px;padding:10px;margin:8px 0} .freePanel .fpProgress{font-size:20px;font-weight:bold;text-align:center;color:#ffd700;text-shadow:0 0 10px rgba(255,215,0,0.5)} .freePanel .fpPlayStatus{font-size:14px;margin-top:5px;text-align:center} .freePanel .fpPromo{background:rgba(255,255,255,0.1);border-radius:4px;padding:10px;margin-top:10px;font-size:12px;line-height:1.6} .freePanel .fpPromo b{color:#ffd700;font-size:14px} .freePanel .fpClose{position:absolute;top:5px;right:10px;background:none;border:none;color:#fff;font-size:24px;cursor:pointer;padding:0;line-height:1} .freePanel .fpClose:hover{color:#ff6b6b} `; document.head.appendChild(styleEl); } // ========== 视频工具 ========== let videoHelper = { getVideoEl() { return $("video")[0]; }, getCurTime() { try { return videoHelper.getVideoEl().currentTime || 0; } catch (e) { return 0; } }, getTotalTime() { try { return videoHelper.getVideoEl().duration || 0; } catch (e) { return 0; } }, formatTime(sec) { sec = Math.floor(sec); let h = Math.floor(sec / 3600); let m = Math.floor((sec % 3600) / 60); let s = sec % 60; return (h < 10 ? "0" + h : h) + ":" + (m < 10 ? "0" + m : m) + ":" + (s < 10 ? "0" + s : s); }, isVideoPlaying() { return new Promise((resolve) => { try { let t1 = videoHelper.getCurTime(); setTimeout(() => { let t2 = videoHelper.getCurTime(); resolve(t2 > t1); }, 300); } catch (e) { resolve(false); } }); }, tryPlayVideo() { let vid = videoHelper.getVideoEl(); if (vid) { vid.volume = 0; setTimeout(() => { vid.play().catch(() => {}); }, 200); } }, unlockPause() { let vid = videoHelper.getVideoEl(); if (!vid || vid._freeUnlocked) return; vid._freeUnlocked = true; vid.pause = function () {}; vid.addEventListener("pause", function () { if (!vid.ended) { setTimeout(() => { vid.play().catch(() => {}); }, 100); } }); }, }; // ========== 悬浮面板 ========== let panelCtrl = { panelTimerId: null, build() { let panelHtml = `
🎬 视频播放助手(免费版)
检测中...
⏳ 正在检测视频状态
⭐ 一次付费 · 永久使用 · 免费维护 ⭐
📌 免费版功能:解除视频暂停限制 / 自动播放检测
🔥 付费版功能:自动下一集 / 自动换课程 / 秒过视频 / 全自动无人值守
👉 点击升级付费版本
接各类脚本开发、代挂、网站小程序开发工作
微信:zhanyc_cn
`; $("body").append(panelHtml); $("#freePanelCloseBtn").on("click", function () { $("#freePanelBox").remove(); if (panelCtrl.panelTimerId) { clearInterval(panelCtrl.panelTimerId); panelCtrl.panelTimerId = null; } }); panelCtrl.panelTimerId = setInterval(() => { panelCtrl.refreshProgress(); }, 1000); }, refreshProgress() { let cur = videoHelper.getCurTime(); let total = videoHelper.getTotalTime(); if (total > 0) { let pct = Math.min(100, (cur / total) * 100).toFixed(1); $("#freeProgressTxt").text(`${videoHelper.formatTime(cur)} / ${videoHelper.formatTime(total)}(${pct}%)`); } }, updateStatus(text) { $("#freePlayStatusTxt").html(text); }, }; // ========== 主监控逻辑 ========== let monitorCtrl = { timerId: null, lastTime: null, stallCount: 0, stallMax: 60, start() { if (monitorCtrl.timerId !== null) return; monitorCtrl.timerId = setInterval(async () => { try { let vid = videoHelper.getVideoEl(); if (!vid) { $("#freeProgressTxt").text("等待视频加载..."); panelCtrl.updateStatus("⏳ 正在检测视频状态"); return; } if ($("#videoStartBtn:visible").length > 0) { $("#videoStartBtn:visible").click(); } videoHelper.unlockPause(); let curSec = videoHelper.getCurTime(); if (curSec === monitorCtrl.lastTime) { monitorCtrl.stallCount += 2; if (monitorCtrl.stallCount >= monitorCtrl.stallMax) { monitorCtrl.stallCount = 0; panelCtrl.updateStatus("⚠️ 视频疑似卡住"); } } else { monitorCtrl.lastTime = curSec; monitorCtrl.stallCount = 0; } vid.volume = 0; let playing = await videoHelper.isVideoPlaying(); if (!playing) { videoHelper.tryPlayVideo(); panelCtrl.updateStatus("▶️ 正在自动播放"); } else { panelCtrl.updateStatus("✅ 视频播放中"); } } catch (e) { console.error("monitor error", e); } }, 2000); }, }; // ========== 启动 ========== injectStyle(); panelCtrl.build(); monitorCtrl.start(); })();