医博士刷课脚本
医博士
# 脚本介绍
该油猴脚本用于 医博士 的辅助看课,使用JavaScript编写,适配网址:http://www.yiboshi.com/
脚本功能如下:
1.自动设置视频倍速(默认 2.0 倍,可在PLAYBACK_RATE配置);
2.自动播放视频(兼容浏览器自动播放限制,首次需手动点一次播放);
3.视频播放完毕自动切换下一集;
4.自动跳过 / 隐藏广告容器;
5.自动关闭各类弹窗(提示框、登录提醒等);
6.防视频自动暂停(页面触发的暂停会自动恢复播放)
脚本安装地址:
暂时下架
如果不会安装脚本,请按照下面安装教程来操作。
# 代学服务
提示
如需代学,请联系客服,支持闲鱼交易。

微信联系:yizhituziang

QQ联系:2422270452
- img: /img/weixin.jpg
name: 微信联系:yizhituziang
- img: /img/qq.jpg
name: QQ联系:2422270452
# 安装教程
# 1.安装浏览器扩展插件
首先需要给我们的浏览器安装上脚本猫插件,这是运行所有用户脚本的基础,如果浏览器已经安装过了脚本猫或者油猴插件,那么可以跳过这一步。推荐使用edge浏览器,安装插件更方便。
浏览器打开网址:https://docs.scriptcat.org/ (opens new window)
这里用edge浏览器作为示范,点击 “添加到Edge浏览器”

接着点击 “获取”

在右上角弹出的窗口,点击 “添加扩展”

等待几秒钟,会提示已经安装好脚本猫插件了。

# 2.安装刷课脚本
打开脚本安装地址后,在页面点击 “安装脚本” 按钮,接着在弹出的窗口点击 “安装” ,之后就会提示“安装成功”。
# 3.体验脚本功能
安装脚本后,需要重新进入学习站点,如果之前已经打开课程学习页面,那么需要刷新页面后脚本才会生效。
# 核心代码
/**
* 等待指定元素加载完成
* @param {string} selector 元素选择器
* @param {Function} callback 找到元素后的回调
*/
function waitForElement(selector, callback) {
let timer = setTimeout(() => {
console.log(`[医博士脚本] 超时未找到元素:${selector}`);
}, TIMEOUT);
const observer = new MutationObserver((mutations) => {
const element = document.querySelector(selector);
if (element) {
observer.disconnect();
clearTimeout(timer);
callback(element);
}
});
observer.observe(document.body, { childList: true, subtree: true });
}
/**
* 设置视频倍速
* @param {HTMLVideoElement} video 视频元素
*/
function setVideoRate(video) {
if (video.playbackRate !== PLAYBACK_RATE) {
video.playbackRate = PLAYBACK_RATE;
console.log(`[医博士脚本] 视频倍速已设置为:${PLAYBACK_RATE}x`);
}
}
/**
* 自动播放视频(兼容浏览器自动播放限制)
* @param {HTMLVideoElement} video 视频元素
*/
function autoPlayVideo(video) {
if (video.paused) {
video.play().then(() => {
console.log('[医博士脚本] 视频已自动播放');
}).catch(err => {
console.log('[医博士脚本] 自动播放失败(浏览器限制),请手动点击一次播放后脚本可继续生效:', err);
});
}
}
/**
* 跳过广告/隐藏广告容器
*/
function skipAd() {
// 适配常见广告容器选择器(需根据网站更新调整)
const adSelectors = ['.ad-box', '.advert-container', '.ad-wrap', '#ad'];
adSelectors.forEach(selector => {
const ad = document.querySelector(selector);
if (ad) {
ad.style.display = 'none';
console.log(`[医博士脚本] 已跳过广告:${selector}`);
}
});
}
/**
* 监听视频结束,自动切换下一集
* @param {HTMLVideoElement} video 视频元素
*/
function listenVideoEnd(video) {
video.addEventListener('ended', () => {
// 适配下一集按钮选择器(需根据网站更新调整)
const nextBtnSelectors = ['.next-episode', '#nextLesson', '.btn-next', '.next-btn'];
let nextBtn = null;
for (const selector of nextBtnSelectors) {
nextBtn = document.querySelector(selector);
if (nextBtn) break;
}
if (nextBtn && !nextBtn.disabled) {
nextBtn.click();
console.log('[医博士脚本] 视频播放完毕,已自动切换下一集');
} else {
console.log('[医博士脚本] 未找到下一集按钮或按钮不可点击');
}
});
}
/**
* 自动关闭弹窗(如提示框、登录提醒等)
*/
function closePopup() {
const popupCloseSelectors = ['.close-btn', '.popup-close', '#close', '.btn-close', '.modal-close'];
popupCloseSelectors.forEach(selector => {
const closeBtn = document.querySelector(selector);
if (closeBtn) {
closeBtn.click();
console.log(`[医博士脚本] 已自动关闭弹窗:${selector}`);
}
});
}
/**
* 核心逻辑:防视频暂停(应对页面自动暂停)
* @param {HTMLVideoElement} video 视频元素
*/
function preventVideoPause(video) {
// 监听暂停事件,排除手动暂停场景
video.addEventListener('pause', (e) => {
// 忽略手动暂停(通过点击暂停按钮的事件判断)
if (!e.isTrusted || !video.pausedByUser) {
autoPlayVideo(video);
console.log('[医博士脚本] 检测到视频被自动暂停,已恢复播放');
}
});
// 标记手动暂停(监听播放/暂停按钮点击)
const playBtnSelectors = ['.play-btn', '.pause-btn', '#play', '#pause'];
playBtnSelectors.forEach(selector => {
const btn = document.querySelector(selector);
if (btn) {
btn.addEventListener('click', () => {
video.pausedByUser = video.paused;
});
}
});
}
/**
* 主函数
*/
function init() {
console.log('[医博士脚本] 辅助脚本已启动');
// 1. 跳过广告
skipAd();
// 2. 自动关闭弹窗
closePopup();
setInterval(closePopup, CHECK_INTERVAL); // 持续检测弹窗
// 3. 等待视频元素加载并初始化
waitForElement('video', (video) => {
console.log('[医博士脚本] 找到视频元素,开始初始化');
setVideoRate(video); // 设置倍速
autoPlayVideo(video); // 自动播放
listenVideoEnd(video); // 自动下一集
preventVideoPause(video); // 防自动暂停
// 持续检测倍速(防止页面重置倍速)
setInterval(() => setVideoRate(video), CHECK_INTERVAL);
});
}
// 页面加载完成后执行
if (document.readyState === 'complete') {
init();
} else {
window.addEventListener('load', init);
}