// ==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);
});
})();