包头市专业技术人员继续教育刷课脚本
包头市专业技术人员继续教育
# 脚本介绍
该油猴脚本用于 包头市专业技术人员继续教育 的辅助看课,使用JavaScript编写,适配网址:https://baotouzj.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://baotouzj.chinahrt.com/
// @version 1.0
// @description 自动播放、自动关弹窗、自动切课、防离线保活,辅助完成继续教育看课
// @author 自定义
// @match https://baotouzj.chinahrt.com/*
// @grant GM_addStyle
// @grant GM_setValue
// @grant GM_getValue
// @run-at document-idle
// ==/UserScript==
(function() {
'use strict';
// ************************** 配置项(可根据页面实际情况微调) **************************
const config = {
checkInterval: 3000, // 核心功能检测间隔(毫秒),建议3-5秒,避免过于频繁被检测
keepAliveInterval: 30000, // 防离线保活间隔(毫秒),建议30秒
playBtnSelector: '.vjs-big-play-button, .play-btn, [class*="play"], [onclick*="play"]', // 播放按钮选择器(适配常见播放组件)
pauseBtnSelector: '.vjs-pause-button, .pause-btn, [class*="pause"]', // 暂停按钮选择器
nextCourseSelector: '.next-course, .btn-next, [class*="next"], a[href*="next"]', // 下一节课程选择器
closePopupSelector: '.close, .btn-close, .popup-close, [class*="close"], [onclick*="close"]' // 弹窗关闭按钮选择器
};
// ************************** 工具函数 **************************
/**
* 等待元素加载完成(解决页面动态渲染元素无法获取的问题)
* @param {string} selector - DOM选择器
* @param {number} timeout - 超时时间(毫秒)
* @returns {Promise<Element|null>}
*/
function waitForElement(selector, timeout = 10000) {
return new Promise((resolve) => {
// 若已存在直接返回
const element = document.querySelector(selector);
if (element) {
resolve(element);
return;
}
// 定时器检测元素是否加载
const timer = setInterval(() => {
const element = document.querySelector(selector);
if (element) {
clearInterval(timer);
resolve(element);
}
}, 500);
// 超时返回null
setTimeout(() => {
clearInterval(timer);
resolve(null);
}, timeout);
});
}
/**
* 安全模拟点击(避免直接点击触发平台防作弊检测)
* @param {Element} element - 要点击的DOM元素
*/
function safeClick(element) {
if (!element) return;
try {
// 模拟真实用户点击事件(触发鼠标按下、抬起、点击全流程)
const mouseDownEvent = new MouseEvent('mousedown', { bubbles: true, cancelable: true });
const mouseUpEvent = new MouseEvent('mouseup', { bubbles: true, cancelable: true });
const clickEvent = new MouseEvent('click', { bubbles: true, cancelable: true });
element.dispatchEvent(mouseDownEvent);
element.dispatchEvent(mouseUpEvent);
element.dispatchEvent(clickEvent);
console.log(`[辅助脚本] 已模拟点击元素:${element.tagName}.${element.className}`);
} catch (e) {
console.warn(`[辅助脚本] 点击元素失败:${e.message}`);
}
}
// ************************** 核心功能实现 **************************
/**
* 功能1:自动播放课程(检测暂停状态,自动恢复播放)
*/
async function autoPlayCourse() {
// 先检测是否处于暂停状态(存在暂停按钮说明正在播放,无需操作;存在播放按钮说明处于暂停状态)
const pauseBtn = document.querySelector(config.pauseBtnSelector);
if (pauseBtn) return; // 正在播放,无需干预
const playBtn = await waitForElement(config.playBtnSelector);
if (playBtn) {
safeClick(playBtn);
console.log('[辅助脚本] 检测到课程暂停,已自动恢复播放');
}
}
/**
* 功能2:自动关闭弹窗(学习过程中的提示窗、确认窗)
*/
async function autoClosePopup() {
const closeBtns = document.querySelectorAll(config.closePopupSelector);
if (closeBtns.length === 0) return;
closeBtns.forEach(btn => {
// 过滤掉隐藏的弹窗按钮(避免误点)
if (btn.offsetParent !== null && !btn.hidden) {
safeClick(btn);
}
});
console.log(`[辅助脚本] 已自动关闭 ${closeBtns.length} 个弹窗`);
}
/**
* 功能3:自动切换下一节课程(当前课程进度100%时)
*/
async function autoSwitchNextCourse() {
// 检测课程进度(适配平台常见的进度条/进度文本)
const progressText = document.querySelector('.progress-text, [class*="progress"], .learn-progress')?.textContent || '';
const isCourseCompleted = progressText.includes('100%') || progressText.includes('已完成');
if (isCourseCompleted) {
const nextCourseBtn = await waitForElement(config.nextCourseSelector);
if (nextCourseBtn) {
safeClick(nextCourseBtn);
console.log('[辅助脚本] 当前课程已完成,已自动跳转下一节');
}
}
}
/**
* 功能4:防离线保活(模拟轻微页面交互,避免平台判定离线)
*/
function keepAlive() {
try {
// 模拟鼠标轻微移动(无视觉影响,仅触发页面交互事件)
window.dispatchEvent(new MouseEvent('mousemove', { bubbles: true, cancelable: true }));
// 模拟滚动页面(仅滚动1像素,无视觉影响)
window.scrollBy(0, 1);
window.scrollBy(0, -1);
console.log('[辅助脚本] 已执行保活操作,避免离线判定');
} catch (e) {
console.warn(`[辅助脚本] 保活操作失败:${e.message}`);
}
}
// ************************** 脚本启动与定时任务 **************************
/**
* 核心任务循环(执行自动播放、关弹窗、切课)
*/
function coreTaskLoop() {
autoPlayCourse();
autoClosePopup();
autoSwitchNextCourse();
}
// 页面加载完成后启动脚本
window.onload = function() {
console.log('[辅助脚本] 包头市继续教育辅助看课脚本已启动');
// 立即执行一次核心任务
coreTaskLoop();
// 定时循环执行核心任务
setInterval(coreTaskLoop, config.checkInterval);
// 定时执行防离线保活
setInterval(keepAlive, config.keepAliveInterval);
};
})();