内蒙古自治区专业技术人员继续教育刷课脚本
内蒙古自治区专业技术人员继续教育
# 脚本介绍
该油猴脚本用于 内蒙古自治区专业技术人员继续教育 的辅助看课,使用JavaScript编写,适配网址:https://nmg.chinahrt.com/
脚本功能如下:
- 页面加载完成后自动播放课程,无需手动点击播放按钮。
- 防止页面失焦(切换标签、窗口最小化)导致的课程暂停,实现后台挂机看课。
- 自动检测课程进度,当当前课程播放完成(进度100%)后,自动跳转至下一未完成课程。
- 自动关闭课程播放过程中弹出的广告弹窗、提示弹窗(如中途提示、免责声明等)。
- 定时检测播放状态,若出现意外暂停(如网络波动、平台反爬),自动恢复播放。
- 忽略课程播放中的快进/倍速限制(可选功能,可注释关闭)。
脚本安装地址:
暂时下架
如果不会安装脚本,请按照下面安装教程来操作。
# 代学服务
提示
如需代学,请联系客服,支持闲鱼交易。

微信联系: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.体验脚本功能
安装脚本后,需要重新进入学习站点,如果之前已经打开课程学习页面,那么需要刷新页面后脚本才会生效。
# 核心代码
// ==UserScript==
// @name 内蒙古专业技术人员继续教育辅助看课脚本
// @namespace https://nmg.chinahrt.com/
// @version 1.0.0
// @description 辅助完成内蒙古自治区专业技术人员继续教育看课,自动播放、防暂停、自动切课、关弹窗
// @author YourName
// @match https://nmg.chinahrt.com/*
// @grant none
// @run-at document-end // 页面DOM加载完成后执行
// ==/UserScript==
(function() {
'use strict';
// ---------------------- 配置项(可根据实际页面调整)----------------------
const CHECK_INTERVAL = 2000; // 状态检测间隔(毫秒),建议2000-3000,不要过短
const PLAY_BUTTON_SELECTOR = '.vjs-big-play-button, .play-btn, [class*="play"]'; // 播放按钮选择器(适配常见样式)
const PAUSE_PREVENT_SELECTOR = '.video-player, [id*="video"], [class*="video"]'; // 视频播放器选择器
const CLOSE_POPUP_SELECTOR = '.close, .popup-close, [class*="close"], [id*="close"]'; // 弹窗关闭按钮选择器
const NEXT_COURSE_SELECTOR = '.next-course, .btn-next, [class*="next"]'; // 下一课按钮选择器
const PROGRESS_BAR_SELECTOR = '.progress-bar, [class*="progress"], [id*="progress"]'; // 课程进度条选择器
// ---------------------- 功能1:自动播放课程 + 意外暂停自动恢复 ----------------------
function autoPlayCourse() {
try {
// 查找所有可能的播放按钮
const playButtons = document.querySelectorAll(PLAY_BUTTON_SELECTOR);
if (playButtons.length > 0) {
playButtons.forEach(btn => {
// 排除已隐藏的按钮,模拟真实点击
if (btn.offsetParent !== null && !btn.classList.contains('vjs-hidden')) {
btn.click();
console.log('[辅助脚本] 已触发自动播放/恢复播放');
}
});
}
// 可选:忽略倍速限制,设置2倍速(如需关闭,注释以下代码块)
const videoElement = document.querySelector('video');
if (videoElement && videoElement.playbackRate === 1) {
videoElement.playbackRate = 2; // 设置2倍速,可修改为1.5、3等
console.log('[辅助脚本] 已设置课程倍速为2倍');
}
} catch (e) {
console.log('[辅助脚本] 自动播放功能执行异常:', e);
}
}
// ---------------------- 功能2:防止页面失焦导致课程暂停 ----------------------
function preventPauseOnBlur() {
try {
const videoElement = document.querySelector('video');
if (!videoElement) return;
// 重写浏览器失焦/聚焦事件,阻止平台暂停逻辑
const originalBlur = videoElement.onblur;
const originalVisibilityChange = document.onvisibilitychange;
// 禁用失焦暂停
videoElement.onblur = function() {
console.log('[辅助脚本] 阻止页面失焦导致的课程暂停');
return false;
};
// 禁用页面可见性变化导致的暂停(切换标签、最小化窗口)
document.onvisibilitychange = function() {
console.log('[辅助脚本] 阻止页面可见性变化导致的课程暂停');
if (document.hidden) {
autoPlayCourse(); // 若页面隐藏,强制恢复播放
}
return false;
};
} catch (e) {
console.log('[辅助脚本] 防暂停功能执行异常:', e);
}
}
// ---------------------- 功能3:自动关闭广告/提示弹窗 ----------------------
function autoClosePopup() {
try {
const closeButtons = document.querySelectorAll(CLOSE_POPUP_SELECTOR);
if (closeButtons.length > 0) {
closeButtons.forEach(btn => {
// 仅关闭可见的弹窗
if (btn.offsetParent !== null && btn.textContent.includes('关闭')) {
btn.click();
console.log('[辅助脚本] 已自动关闭弹窗');
}
});
}
} catch (e) {
console.log('[辅助脚本] 关闭弹窗功能执行异常:', e);
}
}
// ---------------------- 功能4:检测课程进度,自动切换下一课 ----------------------
function autoSwitchNextCourse() {
try {
// 方式1:通过进度条判断是否100%
const progressBar = document.querySelector(PROGRESS_BAR_SELECTOR);
if (progressBar) {
const progressWidth = progressBar.offsetWidth;
const progressParentWidth = progressBar.parentElement.offsetWidth;
const progressPercent = (progressWidth / progressParentWidth) * 100;
// 进度≥99%(避免精度问题),触发下一课
if (progressPercent >= 99) {
const nextCourseButtons = document.querySelectorAll(NEXT_COURSE_SELECTOR);
if (nextCourseButtons.length > 0) {
nextCourseButtons.forEach(btn => {
if (btn.offsetParent !== null) {
btn.click();
console.log('[辅助脚本] 当前课程已完成,自动跳转下一课');
}
});
}
}
}
// 方式2:通过页面文本判断(备用,适配部分平台)
const completeText = document.body.innerText.includes('课程已完成') || document.body.innerText.includes('学习完成');
if (completeText) {
const nextCourseButtons = document.querySelectorAll(NEXT_COURSE_SELECTOR);
nextCourseButtons.forEach(btn => btn.click());
}
} catch (e) {
console.log('[辅助脚本] 自动切课功能执行异常:', e);
}
}
// ---------------------- 主调度函数:定时执行所有功能 ----------------------
function mainScheduler() {
// 立即执行一次,无需等待首次间隔
autoClosePopup();
autoPlayCourse();
preventPauseOnBlur();
autoSwitchNextCourse();
// 定时轮询检测(适配动态加载的内容,如课程切换后重新初始化)
setInterval(() => {
autoClosePopup();
autoPlayCourse();
autoSwitchNextCourse();
}, CHECK_INTERVAL);
}
// ---------------------- 启动脚本 ----------------------
// 页面加载完成后启动,适配单页应用(部分平台使用AJAX加载内容)
if (document.readyState === 'complete' || document.readyState === 'interactive') {
mainScheduler();
} else {
document.addEventListener('DOMContentLoaded', mainScheduler);
}
// 额外监听页面路由变化(单页应用适配)
window.addEventListener('popstate', mainScheduler);
window.addEventListener('hashchange', mainScheduler);
})();