山财培训网刷课脚本
山财培训网
# 脚本介绍
该油猴脚本用于 山财培训网 的辅助看课,使用JavaScript编写,适配网址:http://training.sdufe.edu.cn/
脚本功能如下:
- 自动播放:课程加载完成后自动开始播放。
- 防止暂停:自动处理可能导致视频暂停的弹窗或交互。
- 自动下一节:当前课程播放完毕后,自动点击“下一节”按钮。
脚本安装地址:
暂时下架
如果不会安装脚本,请按照下面安装教程来操作。
# 代学服务
提示
如需代学,请联系客服,支持闲鱼交易。

微信联系: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 http://tampermonkey.net/
// @version 1.3
// @description 自动播放、跳过片头片尾、自动下一节、处理弹窗,助你轻松完成山财培训网课程学习。
// @author Your Name
// @match http://training.sdufe.edu.cn/*
// @match https://training.sdufe.edu.cn/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=sdufe.edu.cn
// @grant none
// @run-at document-idle
// ==/UserScript==
(function() {
'use strict';
// --- 脚本配置 ---
const config = {
// 跳过片头/片尾的秒数。如果视频总时长小于此值,则不跳过。
skipSeconds: 5,
// 检查元素是否存在的时间间隔(毫秒)
checkInterval: 2000,
// 模拟点击延迟(毫秒),防止操作过快被检测
clickDelay: 800,
};
console.log('【山财培训助手】已启动,正在监控页面...');
/**
* 主监控函数,使用 MutationObserver 监听 DOM 变化,更高效
*/
function startMonitoring() {
const observer = new MutationObserver((mutations, obs) => {
// 检查并处理视频播放
handleVideoPlayback();
// 检查并点击“下一节”按钮
checkAndClickNextButton();
// 检查并关闭弹窗
closePopups();
// 检查并处理章节测验
handleQuiz();
});
// 配置 observer:监视子节点的添加或删除
const config = { childList: true, subtree: true };
observer.observe(document.body, config);
// 初始加载时立即执行一次
setTimeout(() => {
handleVideoPlayback();
checkAndClickNextButton();
closePopups();
handleQuiz();
}, config.checkInterval);
}
/**
* 处理视频播放逻辑
*/
function handleVideoPlayback() {
// 尝试获取 video 元素
const video = document.querySelector('video');
if (!video) {
// console.log('【山财培训助手】未找到 video 元素。');
return;
}
// 1. 自动播放
if (video.paused) {
console.log('【山财培训助手】检测到视频已暂停,尝试自动播放...');
video.play().catch(e => console.log('【山财培训助手】自动播放失败:', e));
}
// 2. 跳过片头/片尾
// 假设总时长的前5%和后5%为片头片尾
const skipRatio = 0.05;
const skipStart = video.duration * skipRatio;
const skipEnd = video.duration * (1 - skipRatio);
if (video.currentTime < skipStart && video.currentTime > 0) {
console.log(`【山财培训助手】检测到处于片头,跳过至 ${skipStart.toFixed(1)} 秒...`);
video.currentTime = skipStart;
} else if (video.currentTime > skipEnd && video.currentTime < video.duration) {
console.log(`【山财培训助手】检测到处于片尾,跳过至视频末尾...`);
video.currentTime = video.duration - 0.1; // 跳到结束前一点点,确保触发结束事件
}
}
/**
* 检查并点击“下一节”按钮
*/
function checkAndClickNextButton() {
// 定义可能的“下一节”按钮的选择器
const nextButtonSelectors = [
'.next-btn',
'.video-next',
'.btn-next',
'a:contains("下一节")', // 需要 jQuery 支持,这里作为备选
'button:contains("下一节")',
'a[href*="/next"]',
'.vjs-play-control.vjs-paused .vjs-icon-placeholder' // 播放按钮的另一种形态
];
for (const selector of nextButtonSelectors) {
const nextButton = document.querySelector(selector);
if (nextButton && nextButton.offsetParent !== null) { // 确保按钮可见
console.log('【山财培训助手】找到“下一节”按钮,准备点击...');
// 使用 setTimeout 模拟人类操作延迟
setTimeout(() => {
nextButton.click();
console.log('【山财培训助手】已点击“下一节”按钮。');
}, config.clickDelay);
return; // 找到并点击后就退出
}
}
// console.log('【山财培训助手】未找到可见的“下一节”按钮。');
}
/**
* 关闭常见的弹窗
*/
function closePopups() {
// 定义可能的关闭按钮选择器
const closeButtonSelectors = [
'.el-dialog__headerbtn .el-dialog__close', // Element UI 弹窗
'.modal-header .close', // Bootstrap 弹窗
'.layui-layer-close', // layui 弹窗
'.close-btn',
'button:contains("关闭")',
'button:contains("知道了")',
'button:contains("我知道了")',
'a:contains("关闭")'
];
for (const selector of closeButtonSelectors) {
const closeButton = document.querySelector(selector);
if (closeButton && closeButton.offsetParent !== null) {
console.log(`【山财培训助手】发现弹窗,尝试关闭... (Selector: ${selector})`);
closeButton.click();
// 可能有多个弹窗,所以不 return,继续检查
}
}
}
/**
* 处理章节测验
* 注意:此功能非常依赖网站的具体HTML结构,成功率不高,仅作演示。
*/
function handleQuiz() {
// 检查是否存在测验题容器
const quizContainer = document.querySelector('.quiz-container, .test-content, .exam-box');
if (!quizContainer) {
return;
}
console.log('【山财培训助手】检测到测验页面,尝试自动处理...');
// 策略1: 寻找“提交”或“交卷”按钮,如果已存在答案(可能是上次遗留),则直接提交
const submitButton = document.querySelector('button:contains("提交"), button:contains("交卷"), .btn-submit');
if (submitButton && submitButton.offsetParent !== null) {
// 简单判断是否已有选项被选中
const selectedOptions = document.querySelectorAll('input[type="radio"]:checked, input[type="checkbox"]:checked');
if (selectedOptions.length > 0) {
console.log('【山财培训助手】检测到已有答案被选中,准备提交...');
setTimeout(() => {
submitButton.click();
console.log('【山财培训助手】已点击“提交”按钮。');
}, config.clickDelay * 2); // 提交操作延迟长一点
return;
}
}
// 策略2: 尝试为所有单选题选择第一个选项
const radioButtons = document.querySelectorAll('input[type="radio"]:not(:checked)');
const checkedMap = new Map();
radioButtons.forEach(radio => {
if (!checkedMap.has(radio.name)) {
console.log(`【山财培训助手】为题目组 "${radio.name}" 选择第一个选项。`);
radio.click();
checkedMap.set(radio.name, true);
}
});
if (checkedMap.size > 0) {
console.log('【山财培训助手】已为所有单选题选择第一个选项。');
}
}
// 启动监控
startMonitoring();
})();