春宇远程培训平台刷课脚本
春宇远程培训平台
# 脚本介绍
该油猴脚本用于 春宇远程培训平台 的辅助学习,使用JavaScript编写,适配网址:https://study.cyjspx.cn/
脚本功能如下:
- 智能视频播放 自动检测并恢复视频播放,处理各种异常情况
- 倍速播放调节 支持1.2倍-3倍速播放,可自定义
- 静音播放 自动静音视频,不打扰他人
- 自动答题 自动识别并处理弹窗答题,支持各类题型
- 自动切课 课程完成后自动跳转至下一课程
- 防检测机制 模拟用户操作,避免平台检测
脚本安装地址:
暂时下架
如果不会安装脚本,请按照下面安装教程来操作。
# 代学服务
提示
如需代学,请联系客服,支持闲鱼交易。

微信联系: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.体验脚本功能
安装脚本后,需要重新进入学习站点,如果之前已经打开课程学习页面,那么需要刷新页面后脚本才会生效。
# 核心代码
// 春宇远程培训平台辅助脚本
class ChunyuHelper {
constructor() {
this.options = {
autoPlayEnabled: true,
playbackRate: 2.2,
autoMute: true,
autoAnswerEnabled: true,
autoNextLesson: true,
antiDetectionEnabled: true,
mainLoopInterval: 2800,
activityInterval: 13000,
retryAttempts: 6
};
this.retryCount = 0;
this.initialize();
}
logMessage(message) {
console.log(`[春宇远程培训] ${message}`);
}
initialize() {
this.logMessage('脚本正在初始化...');
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', () => {
this.startHelper();
});
} else {
this.startHelper();
}
}
startHelper() {
this.logMessage('春宇远程培训辅助脚本已启动');
setInterval(() => {
this.runMainLoop();
}, this.options.mainLoopInterval);
if (this.options.antiDetectionEnabled) {
setInterval(() => {
this.simulateUserBehavior();
}, this.options.activityInterval);
}
}
findVideoElement() {
const selectorsArray = [
'video',
'.video-player-box video',
'#playerContainer video',
'.video-wrapper video',
'.course-video-player video',
'.media-player video',
'[class*="video"] video',
'[id*="video"] video'
];
for (let idx = 0; idx < selectorsArray.length; idx++) {
const element = document.querySelector(selectorsArray[idx]);
if (element) {
this.logMessage(`定位到视频元素: ${selectorsArray[idx]}`);
return element;
}
}
return null;
}
configureVideoSettings(video) {
if (!video) return;
if (this.options.autoMute && !video.muted) {
video.muted = true;
this.logMessage('视频已设置为静音模式');
}
if (video.playbackRate !== this.options.playbackRate) {
video.playbackRate = this.options.playbackRate;
this.logMessage(`播放倍速已调整为 ${this.options.playbackRate}x`);
}
video.addEventListener('ratechange', () => {
if (video.playbackRate !== this.options.playbackRate) {
video.playbackRate = this.options.playbackRate;
}
});
}
tryPlayVideo(video) {
if (!video) return;
if (video.paused && !video.ended) {
this.logMessage('检测到视频处于暂停状态,尝试恢复播放');
video.play().then(() => {
this.logMessage('视频恢复播放成功');
this.retryCount = 0;
}).catch(error => {
this.logMessage(`自动播放失败,错误信息: ${error.message}`);
this.retryCount++;
if (this.retryCount < this.options.retryAttempts) {
this.logMessage(`尝试点击播放按钮 (${this.retryCount}/${this.options.retryAttempts})`);
this.triggerPlayButtons();
} else {
this.logMessage('已达到最大重试次数');
}
});
}
}
triggerPlayButtons() {
const buttonSelectors = [
'.play-icon',
'.video-play-btn',
'.btn-play-video',
'.vjs-big-play-button',
'.play-button',
'#playVideoBtn',
'[class*="play"]',
'button[title*="播放"]',
'button[aria-label*="播放"]'
];
for (const selector of buttonSelectors) {
const button = document.querySelector(selector);
if (button && button.offsetParent !== null) {
button.click();
this.logMessage(`已点击播放按钮: ${selector}`);
break;
}
}
}
handleQuizModal() {
if (!this.options.autoAnswerEnabled) return;
const modalSelectors = [
'.quiz-window',
'.exam-container',
'.question-dialog',
'.answer-modal',
'.test-box',
'[class*="quiz"]',
'[class*="exam"]',
'[class*="question"]'
];
let targetModal = null;
for (const selector of modalSelectors) {
const modal = document.querySelector(selector);
if (modal && !modal.hidden && modal.offsetParent !== null) {
targetModal = modal;
this.logMessage(`检测到答题弹窗: ${selector}`);
break;
}
}
if (!targetModal) return;
const optionSelectors = [
'input[type="radio"]',
'input[type="checkbox"]',
'.option-item',
'.answer-choice',
'.selection-item',
'[class*="option"]',
'[class*="choice"]'
];
let optionSelected = false;
for (const selector of optionSelectors) {
const options = targetModal.querySelectorAll(selector);
if (options.length > 0) {
for (let i = 0; i < Math.min(2, options.length); i++) {
if (options[i]) {
options[i].click();
}
}
this.logMessage('已选择答案选项');
optionSelected = true;
break;
}
}
if (optionSelected) {
setTimeout(() => {
const submitSelectors = [
'.submit-answer',
'.confirm-btn',
'.btn-submit',
'.submit-button',
'button:contains("提交")',
'button:contains("确定")',
'[class*="submit"]',
'[class*="confirm"]'
];
for (const selector of submitSelectors) {
const btn = targetModal.querySelector(selector);
if (btn) {
btn.click();
this.logMessage('已提交答案');
break;
}
}
}, 1300);
}
}
switchToNextLesson() {
if (!this.options.autoNextLesson) return;
const video = this.findVideoElement();
if (!video || !video.ended) return;
this.logMessage('课程播放完毕,准备切换到下一课');
const nextBtnSelectors = [
'.next-course',
'.next-chapter-btn',
'.btn-next-lesson',
'.lesson-next',
'a[title*="下一课"]',
'a[title*="下一讲"]',
'[class*="next"]'
];
for (const selector of nextBtnSelectors) {
const btn = document.querySelector(selector);
if (btn && btn.offsetParent !== null) {
btn.click();
this.logMessage('已点击下一课按钮');
break;
}
}
}
simulateUserBehavior() {
if (!this.options.antiDetectionEnabled) return;
const x = Math.random() * window.innerWidth;
const y = Math.random() * window.innerHeight;
const mouseMoveEvent = new MouseEvent('mousemove', {
view: window,
bubbles: true,
cancelable: true,
clientX: x,
clientY: y
});
document.dispatchEvent(mouseMoveEvent);
const keyEvent = new KeyboardEvent('keydown', {
key: 'Shift',
bubbles: true
});
document.dispatchEvent(keyEvent);
if (Math.random() > 0.6) {
window.scrollBy(0, Math.random() > 0.5 ? 20 : -20);
}
this.logMessage('已模拟用户行为');
}
runMainLoop() {
const video = this.findVideoElement();
if (video) {
this.configureVideoSettings(video);
this.tryPlayVideo(video);
this.switchToNextLesson();
}
this.handleQuizModal();
}
}
new ChunyuHelper();