// ==UserScript==
// @name 万能视频倍速自动播放切换 华医 医博士 好医生 医教管理 双卫网 岐黄天使 青书学堂 国家开放大学 学习通 融学 专业技术继续教育平台 公需课 专项培训 住院规培 三基培训 中医培训 基层培训
// @namespace https://jiaobenmiao.com/
// @version 1.1
// @description 全局视频倍速、自动播放、自动下一集、循环播放 华医 医博士 好医生 医教管理 双卫网 岐黄天使 青书学堂 国家开放大学 学习通 融学 专业技术继续教育平台 公需课 专项培训 住院规培 三基培训 中医培训 基层培训
// @author 蓝色魔宙
// @match *://*/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
// 配置区自行修改
const config = {
defaultSpeed: 2, // 默认倍速
autoPlay: true, // 自动播放
autoNext: true, // 视频结束自动下一集
loop: false, // 单视频循环
checkInterval: 1000, // 检测间隔毫秒
nearEndSec: 3 // 还差多少秒结束就切下一集
};
let video = null;
let controlPanel = null;
// 查找video
function getVideo() {
return document.querySelector('video');
}
// 设置倍速
function setSpeed(num) {
if (!video) return;
num = Math.max(0.25, Math.min(16, num));
video.playbackRate = num;
document.getElementById('sp_input').value = num;
}
// 创建悬浮控制面板
function createPanel() {
if (controlPanel) return;
const div = document.createElement('div');
controlPanel = div;
div.style = `
position:fixed;top:120px;right:10px;z-index:999999;
background:rgba(0,0,0,0.8);color:#fff;padding:10px;border-radius:8px;
font-size:14px;min-width:160px;
`;
div.innerHTML = `
视频控制器
倍速:
刷新页面关闭面板
`;
document.body.appendChild(div);
// 绑定按钮事件
document.getElementById('sp_btn').onclick = ()=>{
const val = parseFloat(document.getElementById('sp_input').value);
setSpeed(val);
};
div.querySelectorAll('button[data-s]').forEach(btn=>{
btn.onclick = ()=> setSpeed(parseFloat(btn.dataset.s));
});
}
// 自动下一集按钮选择器,覆盖多数平台
const nextBtns = [
'[title*="下一集"]','[title*="下一个"]','.next','.next-btn','.btn-next','#next',
'.video-next','.jump-next','.control-next','a[href*="play"]:not([href*="comment"])'
];
function tryClickNext(){
for(let sel of nextBtns){
const btn = document.querySelector(sel);
if(btn && btn.offsetParent){
btn.click();
setTimeout(initVideo,1200);
break;
}
}
}
function initVideo(){
video = getVideo();
if(!video) return;
// 基础设置
video.playbackRate = config.defaultSpeed;
video.loop = config.loop;
if(config.autoPlay){
video.play().catch(e=>{});
}
// 结束监听
video.onended = function(){
if(config.autoNext) tryClickNext();
if(config.loop) video.play();
};
}
// 定时检测视频状态
setInterval(()=>{
if(!getVideo()) return;
if(!controlPanel) createPanel();
initVideo();
// 快结束预判切集
const v = getVideo();
if(v && v.duration && v.currentTime > v.duration - config.nearEndSec){
tryClickNext();
}
}, config.checkInterval);
// 页面加载完成初始化面板
window.addEventListener('load',()=>{
setTimeout(createPanel,800);
});
})();