// ==UserScript==
// @name 广开网络教学平台/广东开放大学【10倍速度】自动刷视频(带控制面板)
// @namespace 一心向善
// @version 2.0.0
// @description 广开/广东开放大学全自动播放视频+可视化控制面板,模拟观看行为
// @author 一心向善
// @match *://course.ougd.cn/*
// @grant none
// @license MIT
// ==/UserScript==
(function() {
'use strict';
// ===================== 核心配置(面板可修改) =====================
let currentPlaybackRate = 10.0; // 默认倍速
const watchInterval = 30000; // 模拟观看间隔(毫秒)
// ================================================================
// ===================== 悬浮控制面板(新增) =====================
let panel, rateInput, statusText;
// 创建控制面板DOM + 样式
function createControlPanel() {
// 面板CSS样式
const style = document.createElement('style');
style.textContent = `
#gk-video-panel {
position: fixed;
bottom: 20px;
right: 20px;
width: 280px;
background: rgba(20, 20, 20, 0.95);
color: #fff;
border-radius: 10px;
padding: 12px 15px;
box-shadow: 0 0 15px rgba(0,0,0,0.3);
z-index: 999999;
font-family: "Microsoft YaHei", sans-serif;
user-select: none;
cursor: move;
}
#gk-video-panel .title {
font-size: 16px;
font-weight: bold;
margin-bottom: 10px;
text-align: center;
color: #42b983;
}
#gk-video-panel .row {
display: flex;
gap: 5px;
margin: 8px 0;
align-items: center;
}
#gk-video-panel button {
padding: 6px 8px;
border: none;
border-radius: 5px;
background: #42b983;
color: white;
cursor: pointer;
font-size: 12px;
flex: 1;
}
#gk-video-panel button:hover { background: #359469; }
#gk-video-panel input {
width: 60px;
padding: 6px;
border-radius: 5px;
border: none;
text-align: center;
font-size: 12px;
}
#gk-video-panel .status {
font-size: 12px;
color: #ccc;
text-align: center;
margin-top: 5px;
}
/* 普通提示文案样式 */
#gk-video-panel .tips {
font-size: 11px;
line-height: 1.6;
margin-top: 8px;
text-align: center;
color: #eeeeee;
}
/* Q群高亮标亮样式 */
#gk-video-panel .q-group {
background: #ffd700;
color: #c00000;
font-weight: bold;
padding: 2px 4px;
border-radius: 3px;
margin: 4px 0;
}
`;
document.head.appendChild(style);
// 面板HTML
panel = document.createElement('div');
panel.id = 'gk-video-panel';
panel.innerHTML = `
广开视频控制面板
状态:等待视频加载
本脚本仅适用于处理视频
Q群一:949193546 群二:756253160
个人或机构如需处理答题、考试等联系群主
`;
document.body.appendChild(panel);
// 获取面板元素
rateInput = document.getElementById('gk-rate-input');
statusText = document.getElementById('gk-status');
// 绑定面板事件
bindPanelEvents();
// 绑定拖拽功能
bindDragEvent();
}
// 面板拖拽功能
function bindDragEvent() {
let isDragging = false, offsetX, offsetY;
panel.addEventListener('mousedown', (e) => {
isDragging = true;
offsetX = e.clientX - panel.getBoundingClientRect().left;
offsetY = e.clientY - panel.getBoundingClientRect().top;
});
document.addEventListener('mousemove', (e) => {
if (!isDragging) return;
panel.style.left = e.clientX - offsetX + 'px';
panel.style.top = e.clientY - offsetY + 'px';
panel.style.bottom = 'auto';
panel.style.right = 'auto';
});
document.addEventListener('mouseup', () => isDragging = false);
}
// 面板按钮/输入事件绑定
function bindPanelEvents() {
// 快捷倍速按钮
document.querySelectorAll('[data-rate]').forEach(btn => {
btn.addEventListener('click', () => {
const rate = parseFloat(btn.dataset.rate);
setVideoRate(rate);
});
});
// 自定义倍速应用
document.getElementById('gk-apply').addEventListener('click', () => {
const rate = parseFloat(rateInput.value);
if (rate > 0) setVideoRate(rate);
});
// 播放/暂停切换
document.getElementById('gk-play').addEventListener('click', () => {
const video = document.querySelector('video');
if (!video) return;
video.paused ? video.play() : video.pause();
});
}
// 设置视频倍速(同步面板+视频)
function setVideoRate(rate) {
currentPlaybackRate = rate;
rateInput.value = rate;
const video = document.querySelector('video');
if (video) video.playbackRate = rate;
updateStatus(`倍速:${rate}x`);
}
// 更新面板状态文本
function updateStatus(text) {
if (statusText) statusText.textContent = `状态:${text}`;
}
// ================================================================
// ===================== 原脚本核心逻辑(无修改) =====================
// 主函数
function main() {
// 先创建控制面板
createControlPanel();
// 检查视频页面
if (isVideoPage()) {
console.log('检测到视频页面,开始自动播放...');
autoPlayVideo();
} else {
console.log('这不是一个视频播放页面。');
updateStatus('非视频页面');
}
}
// 判断是否为视频播放页面
function isVideoPage() {
return document.querySelector('video') !== null;
}
// 自动播放视频
function autoPlayVideo() {
const video = document.querySelector('video');
if (!video) {
updateStatus('未找到视频');
return;
}
// 应用当前倍速
video.playbackRate = currentPlaybackRate;
updateStatus(`播放中 ${currentPlaybackRate}x`);
// 自动播放
if (video.paused) {
video.play().then(() => {
console.log('视频开始播放...');
setupVideoListeners(video);
}).catch(err => {
console.error('自动播放失败:', err);
updateStatus('自动播放失败');
});
} else {
setupVideoListeners(video);
}
}
// 设置视频事件监听器
function setupVideoListeners(video) {
// 播放结束
video.addEventListener('ended', () => {
console.log('视频播放结束...');
updateStatus('播放完成');
markVideoAsCompleted();
setTimeout(() => window.history.back(), 5000);
});
// 播放中
video.addEventListener('play', () => {
updateStatus(`播放中 ${currentPlaybackRate}x`);
simulateWatchingBehavior();
});
// 暂停自动恢复
video.addEventListener('pause', () => {
updateStatus('已暂停,5秒后恢复');
setTimeout(() => {
if (video.paused) {
video.play().catch(err => console.error('恢复播放失败:', err));
}
}, 5000);
});
// 实时同步倍速
video.addEventListener('ratechange', () => {
currentPlaybackRate = video.playbackRate;
rateInput.value = currentPlaybackRate;
updateStatus(`播放中 ${currentPlaybackRate}x`);
});
}
// 模拟观看行为
function simulateWatchingBehavior() {
console.log('模拟观看行为...');
}
// 标记视频完成
function markVideoAsCompleted() {
console.log('标记视频为已完成...');
}
// =================================================================
// 启动脚本
main();
})();