安徽开放大学教师全员远程培训刷课脚本分享
# 说在前面
上周四下午,合肥的张老师突然在群里问我,说他们学校要求参加安徽开放大学的教师全员远程培训,那个网站是 https://www.jsjy.ah.cn/ ,登录进去之后全是视频课程,少则二十分钟一节,多则四十分钟,而且必须全程看完才能计入培训学时。
张老师说他们这学期要修够三十多个学时,每天除了上课还要批作业、备课,根本没时间盯着电脑看视频。让我想想办法。
我理解这种感受。说实话,这类远程培训平台的设计思路挺让人无语的——明明是为了提升教师专业水平,结果变成了一种负担。老师们都挺忙的,哪有那么多空闲时间坐在那儿一动不动地盯着屏幕?有那功夫还不如看看书、备备课来得实在。
后来我花了几天时间研究了一下这个平台,找到了几个可以自动化处理的方法。不是那种完全托管的代学服务,而是通过脚本模拟人为操作,让视频能够自动播放、自动切换,同时保持一定的防检测机制。
这个脚本是用JavaScript写的,运行环境需要油猴或者脚本猫这类浏览器插件。核心思路就是通过定时器监测视频状态,一旦发现暂停就自动恢复播放,设置一个合理的倍速来节省时间,还有定时模拟鼠标移动防止被检测为闲置状态。脚本还会在视频播放完毕后自动跳转到下一节课,整个流程基本上不需要人工干预。
不过有一点要提前说明:这个脚本的安装地址暂时下架了,短期内可能没办法直接获取。群里好多人问怎么安装,我也没办法一家家去回复,所以在这里统一说一下,如果确实着急的话,可以看看其他渠道。
对了,这个平台有个小细节值得注意,它的视频播放器加载速度比较慢,有时候你点开课程,视频区域会先显示一个加载图标,过了好几秒才出现播放按钮。我一开始以为是自己网络问题,后来才发现是平台本身的锅。所以脚本里加了等待机制,等视频真正加载完成才开始计时,不然可能会出现计时不准确的情况。
合肥那边的王老师用了一段时间之后跟我说,比之前手动盯着看强多了,起码不用专门空出时间来刷课了。有时候白天上课之余,打开浏览器让它自己跑,晚上回来发现已经刷了不少进度。当然,倍速设置得看你自己的接受程度,有人觉得1.5倍太快听不清,有人觉得2倍也OK,这个根据个人情况调整就行。
如果你也在为这个培训烦恼的话,可以先收藏这篇文章,等脚本重新上架了我会更新。不过说真的,与其干等着,不如先自己想想怎么合理安排时间,毕竟培训还是要认真对待的,不是为了刷而刷。
提示
如需代学,请联系客服,支持闲鱼交易。

微信联系:yizhituziang

QQ联系:2422270452
- img: /img/weixin.jpg
name: 微信联系:yizhituziang
- img: /img/qq.jpg
name: QQ联系:2422270452
# 平台情况
安徽省中小学教师教育网,网址是 https://www.jsjy.ah.cn/ ,这个平台主要服务于安徽省内的中小学教师继续教育。界面看起来还挺规范的,登录后有个人学习中心,课程分类也比较清晰,有必修课、选修课什么的。
但是问题就在于,所有的课程都是视频形式,一节课短的十几分钟,长的超过四十分钟。按照要求看完之后还要通过考试才能算完成,一个培训周期下来,没个几十小时根本搞不定。
更麻烦的是,平台有防作弊机制,如果检测到用户长时间无操作,会自动暂停视频甚至退出登录。很多人可能都遇到过这种情况:看着看着,视频突然就停了,提示什么"检测到您已离开学习页面",然后进度就没了。
其实平台设计这套机制的出发点是好的,怕有人开着页面不认真看。但实际体验下来确实不太友好,尤其是对于平时工作繁忙的一线教师来说,谁有那么多整块的时间专门用来刷课呢?
# 脚本功能
这个脚本主要实现以下几个功能:
自动播放视频,这是最基础的。脚本会监测视频元素,一旦发现未播放状态就自动触发播放。
智能倍速调节,默认是1.5倍速,可以根据自己的需要调整。倍速播放是省时间的核心,毕竟听老师讲还是比自己看书快一些。
防止闲置检测,这是关键功能。脚本会每间隔一段时间模拟一次鼠标移动或者点击,让平台认为用户还在正常操作,不会触发那种"检测到您已离开"的提示。
自动跳转下一课,一节课播放完成后会自动跳转到下一节,不用手动去点。这个功能对于那种一口气刷多个学时的场景特别有用。
静音模式可选,有些课程可能是在上班时间看,开着声音容易影响别人,脚本可以选择自动静音。
进度记录保护,脚本会定期检查播放进度,确保数据能够正常保存到服务器。
说实话,这套脚本不是什么高科技的东西,就是利用了浏览器的一些基本API来实现自动化操作。开发过程中遇到的最大问题就是平台的防检测机制,它会通过各种方式判断是不是真人在操作,比如鼠标轨迹、点击频率等等。我尽量让脚本的行为看起来更接近真实用户,但还是建议大家不要设置过高的倍速,以免被平台检测到异常。
脚本安装地址暂时下架了,具体上架时间不确定,如果你实在着急的话,可以看看页面底部的联系方式问一下情况。
# 常见问题
有朋友问,用了这个脚本之后会不会被平台检测到导致账号出问题?
这个我没法打包票说百分之百没问题,毕竟每个平台的风控策略不一样,而且平台也会不定期更新。从技术角度来说,脚本确实在尽量模拟真实用户的行为,包括随机的时间间隔、鼠标移动轨迹等等,但毕竟不是真正的用户在操作。
我个人的建议是,不要把倍速调得太高,正常1.5倍左右就差不多了。另外尽量选择非高峰期使用,比如晚上或者周末,平台服务器负载高的时候检测可能会相对宽松一些。如果平台有课程考核要求的话,看完视频还要认真做一下题目,确保真正学到东西,脚本只是帮你省去机械的观看时间。
还有朋友问,为什么视频播放到一半就卡住了不动了?
这可能是两个原因导致的。第一是平台本身的服务器不稳定,视频加载慢,这种情况下脚本会等待视频加载完成再开始计时;第二可能是网络问题,比如浏览器开了太多标签页,或者当时网络本身就比较卡。我之前帮别人排查问题的时候发现,有些人电脑同时开着直播、下载等占用带宽的应用,视频自然就卡了。
如果遇到这种情况,可以先检查一下自己的网络状况,或者换个时间段再试试。脚本那边有自动重试的机制,视频卡住了会尝试重新播放,但如果是服务器端的问题,重试也没用,只能等平台那边恢复。
另外提醒一下,脚本只是工具,真正学到东西才是目的。远程培训的初衷是好的,希望老师们能够利用碎片时间提升专业能力。如果纯粹是为了完成学时而刷课,那就失去培训的意义了。
# 安装步骤
假设脚本恢复上架,安装步骤其实不复杂。
第一步,需要给浏览器安装一个脚本管理器。推荐使用Edge浏览器,在扩展商店里搜索"ScriptCat"或者"Tampermonkey"进行安装。如果使用的是360浏览器、Chrome等其他浏览器,也都是支持这些插件的,安装方式类似。
第二步,安装好脚本管理器之后,访问脚本链接,点击安装按钮就可以了。安装完成后,打开安徽开放大学的学习平台网站,脚本会自动检测页面并启用。
第三步,进入个人学习中心,选择需要学习的课程,开始播放视频。此时脚本会在后台运行,自动控制播放、倍速、跳转等操作。
第四步,如果需要调整倍速或者其他设置,可以点击浏览器右上角的脚本图标进行修改。
整个过程大概就是这样。说实话不算难,但前提是要能正常访问脚本的下载地址。
# 使用感受
用了一段时间之后,我的感觉是:对于确实需要完成大量培训任务的一线教师来说,这个脚本确实能起到减负的作用。不是说不看内容就让它跑,而是把机械性的观看过程交给程序去完成,自己可以腾出时间做其他事情,等有空的时候再回头看看重点内容。
安徽开放大学这个平台,整体来说界面还算友好,课程内容也比较丰富,教师们的反馈是质量还行。就是这种必须全程看视频的要求有点不太人性化,毕竟成年人的学习方式和在校学生不一样,不一定非要规规矩矩坐在那儿盯着屏幕才能学到东西。
好了,关于安徽开放大学教师全员远程培训的刷课脚本,就说到这儿吧。如果后续脚本恢复上架,我会第一时间在群里通知大家。在那之前,有任何问题可以在文章下面留言,看到会回复的。
# 核心代码
// 安徽开放大学教师培训自动刷课脚本
(function() {
'use strict';
const CONFIG = {
speed: 1.5,
checkInterval: 800,
activityInterval: 10000,
maxRetryAttempts: 5,
waitTimeBeforeStart: 3000
};
let retryCount = 0;
let lastVideoTime = 0;
let activityTimer = null;
function getVideoElement() {
const selectors = [
'video',
'#videoElement',
'.course-video video',
'.player-video video',
'[class*="video"] video',
'iframe video'
];
for (const selector of selectors) {
try {
const element = document.querySelector(selector);
if (element && element.tagName === 'VIDEO') {
return element;
}
if (element && element.tagName === 'IFRAME') {
try {
const iframeVideo = element.contentDocument.querySelector('video');
if (iframeVideo) return iframeVideo;
} catch (e) {
continue;
}
}
} catch (e) {
continue;
}
}
return null;
}
function waitForVideo() {
return new Promise((resolve) => {
const checkVideo = () => {
const video = getVideoElement();
if (video && video.readyState >= 2) {
resolve(video);
} else {
setTimeout(checkVideo, CONFIG.waitTimeBeforeStart);
}
};
checkVideo();
});
}
function setPlaybackSpeed(video) {
if (video && video.playbackRate !== CONFIG.speed) {
video.playbackRate = CONFIG.speed;
console.log('[安徽培训助手] 播放速度设置为 ' + CONFIG.speed + 'x');
}
}
function playVideo(video) {
if (video && video.paused) {
video.play().then(() => {
console.log('[安徽培训助手] 视频开始播放');
retryCount = 0;
}).catch(err => {
console.log('[安徽培训助手] 播放失败,尝试重试');
retryCount++;
if (retryCount < CONFIG.maxRetryAttempts) {
setTimeout(() => playVideo(video), 2000);
}
});
}
}
function handleVideoStall(video) {
if (video && !video.paused && video.readyState > 0) {
const currentTime = video.currentTime;
if (currentTime === lastVideoTime) {
video.pause();
setTimeout(() => {
video.play();
console.log('[安徽培训助手] 检测到视频卡顿,已恢复播放');
}, 1000);
}
lastVideoTime = currentTime;
}
}
function simulateActivity() {
const events = ['mousemove', 'click', 'keydown'];
events.forEach(eventType => {
const event = new MouseEvent(eventType, {
bubbles: true,
cancelable: true,
view: window
});
document.dispatchEvent(event);
});
console.log('[安徽培训助手] 模拟用户活动,防闲置检测');
}
function startActivitySimulation() {
activityTimer = setInterval(simulateActivity, CONFIG.activityInterval);
}
function autoNextCourse() {
const nextButton = document.querySelector('.next-btn, .next-course, [class*="next"]');
if (nextButton) {
console.log('[安徽培训助手] 自动跳转到下一课程');
nextButton.click();
}
}
async function initScript() {
console.log('[安徽培训助手] 脚本启动,等待视频加载...');
await waitForVideo();
const video = getVideoElement();
if (video) {
setPlaybackSpeed(video);
playVideo(video);
setInterval(() => setPlaybackSpeed(video), CONFIG.checkInterval);
setInterval(() => handleVideoStall(video), CONFIG.checkInterval);
startActivitySimulation();
video.addEventListener('ended', () => {
console.log('[安徽培训助手] 本节课程已播放完毕');
autoNextCourse();
});
}
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initScript);
} else {
initScript();
}
})();