// ==UserScript== // @name 国家开放大学实验学院/全网办/乡村振兴学院加速自动刷视频 // @namespace ouchn-syxy-auto // @version 2.2.0 // @description 国开实验学院全自动刷课,支持倍速切换、自动翻页、自动续跑 // @author 去有风的地方 // @match *://moodle.syxy.ouchn.cn/* // @grant none // @run-at document-end // ==/UserScript== (function () { 'use strict'; const CONFIG = { speed: 2, mute: true, delay: 1800 }; let logBox; let isDragging = false; let offsetX, offsetY; // 日志输出 function log(msg, type = "info") { const t = new Date().toLocaleTimeString(); const color = { info: "#88ccff", success: "#73d18c", warn: "#ffd173", error: "#ff7373" }[type]; if (logBox) { logBox.innerHTML += `
[${t}] ${msg}
`; logBox.scrollTop = logBox.scrollHeight; } console.log(`[全自动程序] ${msg}`); } // 拖拽功能 function makeDraggable(el) { el.style.cursor = "move"; el.addEventListener("mousedown", e => { isDragging = true; offsetX = e.clientX - el.getBoundingClientRect().left; offsetY = e.clientY - el.getBoundingClientRect().top; }); document.addEventListener("mousemove", e => { if (!isDragging) return; el.style.left = e.clientX - offsetX + "px"; el.style.top = e.clientY - offsetY + "px"; el.style.right = "auto"; }); document.addEventListener("mouseup", () => isDragging = false); } // 创建控制面板 function createPanel() { const panel = document.createElement("div"); panel.style = ` position:fixed;top:20px;right:20px;z-index:9999999; width:330px;background:#1f2937;color:#fff;padding:14px;border-radius:12px; box-shadow:0 4px 20px rgba(0,0,0,0.3);font-size:13px;user-select:none; `; panel.innerHTML = `
国开实验学院视频全自动程序
播放倍速
答题或批量合作,联系作者Q:640105435
Q群1:949193546|Q群2:1103746012
`; document.body.appendChild(panel); makeDraggable(panel); logBox = document.getElementById("logBox"); document.getElementById("startBtn").onclick = startAll; document.getElementById("speedSel").onchange = e => { CONFIG.speed = Number(e.target.value); log(`已切换倍速:${CONFIG.speed}x`); }; } // 自动滚动 async function autoScroll() { return new Promise(resolve => { log("正在自动浏览页面..."); let pos = 0; const step = 120; const interval = setInterval(() => { window.scrollBy(0, step); pos += step; if (pos >= document.body.scrollHeight - 500) { clearInterval(interval); setTimeout(() => { log("✅ 页面处理完成", "success"); resolve(); }, 1000); } }, 120); }); } // 视频播放 async function playVideo() { return new Promise(async resolve => { let video = document.querySelector("video"); if (!video) { const iframes = document.querySelectorAll("iframe"); for (let f of iframes) { try { const v = f.contentDocument?.querySelector("video"); if (v) { video = v; break; } } catch (e) { } } } if (!video) return resolve(false); video.playbackRate = CONFIG.speed; video.muted = CONFIG.mute; log(`检测到视频,${CONFIG.speed}倍速自动播放`); try { await video.play(); } catch (e) { } video.onended = () => { log("✅ 视频播放完毕", "success"); goNext(); resolve(true); }; video.onpause = () => { if (!video.ended) setTimeout(() => video.play().catch(() => { }), 600); }; }); } // 下一页(修复点击) function goNext() { setTimeout(() => { const btn = document.querySelector('a.newgk-prenext.newgk-next-dd8f595d'); if (btn) { log("➡️ 自动点击下一页", "info"); btn.click(); } else { log("⚠️ 第一页,无法自动下一页,请手动点击第二页即可全自动开始!", "warn"); } }, CONFIG.delay); } // 主任务 async function startAll() { log("===== 进课程页,自动任务开始 ====="); const hasVideo = await playVideo(); if (hasVideo) return; await autoScroll(); goNext(); } // 页面加载自动执行 window.addEventListener("load", () => { createPanel(); setTimeout(() => { if (document.getElementById("autoStart").checked) { log("🔄 页面加载完成,自动执行任务", "success"); startAll(); } }, 1200); }); })();