迪尔集团有限公司(高新区)公需课刷课脚本分享
# 写在前面
上个月有个济宁的朋友在技术群里问我,说他们公司是迪尔集团高新区那边的继续教育基地,每次安排公需课培训都要在这个平台上进行,网址是 https://drgxpx.qzjystudy.com/ 。登录进去之后课程倒是不多,但每门课都是四五十分钟的视频,看完之后还有测试,算下来一个培训周期也得花不少时间。
这个朋友在的单位是个施工单位,平时白天都在工地上跑,根本没机会坐下来看课。晚上回去累得只想躺着,但公需课又不能不修。每次都是拖到快截止了才想起来,然后连续熬几个晚上硬看,眼睛酸脖子僵的,体验很差。
我了解了一下情况,他们公司的培训任务是每年都要完成的,不修的话会影响年度考核什么的。这种机制怎么说呢,虽然有点形式化,但身在职场,有些事情不是想不想的问题,是必须得做的问题。
后来我抽空研究了一下这个平台,找到了可以用脚本自动化处理的方法。不是那种完全不用管的代学,而是让视频能够自动播放、遇到问题自动恢复、播完自动跳下一节,最大程度减少人工干预。脚本安装地址暂时下架了,这个先说清楚,没法直接获取的话只能看看其他渠道。
这个平台的视频播放器用的是比较常见的那套方案,加载速度还行,就是有防挂机检测。这个机制其实挺讨厌的,明明是正常学习,但凡离开一会儿就暂停,给你弹出个提示说什么检测到长时间无操作。学习平台的设计者们可能觉得这样能督促学员认真学习,实际上对于工作繁忙的成年人来说,这种机制反而造成了困扰。
# 迪尔集团公需课平台的情况
迪尔集团高新区继续教育基地的公需课培训平台,网址是 https://drgxpx.qzjystudy.com/ ,这个平台主要是给济宁地区的企业专业技术人员提供公需科目培训的。
平台首页进去之后界面还算清晰,有课程列表、已学学时、总学时要求这些基本信息。课程分类主要是按照公需科目来的,比如什么职业道德、知识产权、安全生产之类的,都是些常规内容。每一门课程下面有若干小节,每小节是一段视频加一段测试,看完视频并通过测试才能算这一节完成。
问题主要有这么几个。第一个是防挂机机制,平台会检测用户操作状态,超过几分钟没有鼠标或键盘活动就会自动暂停视频。虽然不是每个课程都这样,但确实有部分课程有这个限制。第二个是视频不能快进,必须按顺序一节一节看,有时候你想回头复习一下某个知识点都做不到。第三个是进度同步偶尔会出问题,明明看了半天的进度,刷新一下就丢了。
还有一个情况是,这个平台的部分课程是限时开放的,不是全年都能学。错过了开放时间就只能等下一期,所以每年都得记得在规定时间内完成培训任务。
说实话,相比之前接触过的一些教师培训平台,这个迪尔公需课平台的技术水平算是中等偏下的。页面加载慢、播放器偶尔卡顿这些问题都存在过。但胜在课程内容还算实用,单位组织培训的话质量有保证。
用脚本辅助的话,基本上能够满足自动化刷课的需求。但有一点必须提醒,测试题目还是得自己做,脚本只能处理视频部分。
# 脚本的主要功能
这个脚本是我之前为了类似的继续教育平台开发的,迁移到迪尔这个平台之后做了一些适配调整。主要实现了以下几个功能:
视频自动播放,这是最基础的。脚本会持续监测视频播放状态,如果发现因为各种原因导致的暂停,就自动重新开始播放。
智能倍速设置,默认是1.5倍速,平台上的讲课视频语速偏慢,1.5倍基本上不影响内容理解,能节省不少时间。如果觉得1.5倍太快也可以调到1.25倍,看个人适应情况。
防挂机检测模拟,这是比较关键的功能。脚本会每隔一段时间自动触发一些模拟的用户操作,让平台认为用户还在正常浏览,从而避免触发那种"长时间无操作"的警告。
视频卡顿自动恢复,有时候视频会因为网络波动或者服务器负载而出现卡顿,脚本检测到这种情况会自动暂停再播放,相当于手动重新缓冲。
课程完成后自动跳转下一节,一节视频播放完成后会自动检测并点击下一节,整个培训周期内的课程可以连续自动化播放。
静音播放选项,考虑到有些用户可能在办公环境或者公共场所使用,脚本提供了静音选项,避免声音外放造成困扰。
进度同步保护,这个功能是尽量保证观看进度能够正确保存到平台服务器。因为有些平台在进度同步方面做得不太好,脚本会主动触发一些通信操作。
在开发脚本的过程中,遇到的主要问题有两个。一个是平台的视频播放器不是标准的HTML5 video标签,而是用了第三方插件,兼容性不太好,脚本里加了好几个选择器来适配。另一个是防挂机的时间间隔不是固定的,有长有短,脚本采用了随机间隔的方式来模拟,显得更自然一些。
脚本安装地址暂时下架了,这一点要提前说明。如果确实急需的话,可以看看页面底部的联系方式问问有没有其他方式。
# 使用场景
之前有济宁本地的几个学员跟我交流过这个平台的使用情况,整理了一下大概有这么几种场景。
第一种是平时工作忙的,像我前面提到的那位朋友,在施工单位上班,白天根本没时间看课。晚上回去累得不行,但又惦记着培训任务没完成,心理压力挺大。用脚本辅助的话,把浏览器开着让视频自动跑,自己可以先休息一下,等过几个小时再看进度,已经刷了不少了。
第二种是距离截止日期不远但还没开始看的,很多人都有拖延症,培训任务下来了不着急,一直拖到快过期了才想起来。这种情况下要短时间刷完所有课程,靠人工看根本来不及,脚本能帮上忙。
第三种是想边刷边做别的事的,有些课程内容其实挺有用,但无奈工作太忙没时间仔细听。用脚本挂着1.25倍或1.5倍速播放,大概了解下内容,等有空的时候再回头细看。
第四种是重复学习需要的,有些课程是每年都要修的,内容差不多,可能去年就看过了。今年又要修同样的课,用脚本直接挂起跳过,省得再花一遍时间。
不管是哪种场景,脚本能解决的主要是视频观看这部分。测试题目还是得自己做的,这部分没法自动化,至少在我研究的范围内没有找到特别好的方案。
# 几点建议
用脚本刷课虽然方便,但有些事情还是要注意一下。
关于倍速设置,建议先从1.25倍开始尝试,如果感觉影响不大再调到1.5倍。不要一上来就用2倍速,一方面是内容可能听不太清楚,另一方面也存在被平台检测的风险。平台的防挂机机制虽然主要针对无操作,但不排除有其他维度的检测手段。
关于浏览器选择,推荐使用Chrome或者Edge浏览器,兼容性最好。360浏览器的话也可以,但要用极速模式,兼容模式有时候会出现各种奇怪问题。如果用的是Safari或者火狐,可能需要额外做一些配置。
关于进度保存,建议每隔一段时间检查一下学习进度,看看有没有及时同步到平台服务器上。虽然脚本有进度保护机制,但毕竟不是百分之百可靠,万一服务器端出了问题,脚本这边也无能为力。
关于测试题目,看完视频之后一定要认真做。测试一般不难,都是课程内容里的知识点。如果视频内容完全没看就去做题,那测试的意义就没了。有些平台会记录测试作答情况,作为培训考核的一部分。
关于账号安全,不要使用来源不明的脚本,或者在非官方渠道购买所谓的代学服务。账号信息泄露的话后果可能很严重,之前有过类似的案例,某些平台上你的账号可能关联了一些敏感信息。
最后想说的是,脚本只是提高效率的工具,不是用来偷懒的借口。公需课培训虽然有些形式化,但内容本身可能还是有价值的。如果完全不看内容就让它跑,其实浪费了一个学习的机会。
# 济宁地区的情况
之前帮几个济宁的朋友看这个平台的时候,了解了一下当地的情况。迪尔集团在济宁高新区这边还是有点规模的,涉及的业务范围也比较广,所以每年的继续教育任务不少。
济宁这边的专业技术人员继续教育好像是由好几家基地共同承担的,迪尔集团是其中之一。不光是迪尔,济宁还有其他的继续教育基地,不同基地的培训平台可能不一样。如果你在其他基地学习,可能就不适用我今天分享的这个脚本了。
不过方法思路都是类似的,核心都是浏览器自动化脚本。只要平台的技术架构差不多,脚本迁移过来稍微改改参数就能用。如果你用的平台跟我今天说的这个不一样,但又想用类似的方法,可以找平台的技术人员了解一下情况,或者在文章下面留言交流。
总体来说,迪尔集团高新区这个公需课平台用起来还算顺手,课程内容也还行。唯一的问题就是视频太长了,而且有防挂机限制,让人没法安心做其他事情。脚本能够在一定程度上缓解这个问题,但最终还是建议大家认真对待培训学习这件事。
# 安装步骤
假设脚本恢复上架了,安装其实不复杂,整个过程大概分这么几步。
第一步,先给浏览器装一个脚本管理器。推荐用Edge浏览器,在扩展商店里搜"Tampermonkey"或者"ScriptCat",挑安装量大的那个就行。Chrome、360浏览器、搜狗浏览器等基本上都支持这些插件,安装方法都差不多。
第二步,安装好脚本管理器之后,访问脚本的链接地址,点击安装按钮。有些浏览器会弹出确认提示,确认一下就行。安装完成后会在浏览器右上角看到脚本管理器的图标。
第三步,打开迪尔集团公需课平台的网址,正常登录自己的账号。登录完成之后,脚本管理器会自动检测页面,如果发现有支持的课程页面就会自动启用。
第四步,进入想要学习的课程,开始播放视频。此时脚本会在后台运行,自动调整倍速、处理暂停、跳转下一节等等。浏览器可以最小化或者做其他事情,只要保持页面标签页打开就行。
第五步,如果需要调整倍速或者开关某些功能,点击浏览器右上角的脚本管理器图标,在弹出的菜单里进行设置。
有一点需要特别提醒,脚本运行的时候尽量保持浏览器标签页处于活动状态,不要把整个浏览器最小化到任务栏。有些浏览器的标签页在后台会降低JavaScript的执行频率,可能导致定时器不准确,进而影响脚本的运行效果。
# 技术细节
有些朋友对脚本的技术实现比较感兴趣,这里简单说说实现思路,不涉及具体的代码细节。
整个脚本是一个自执行的JavaScript函数,主要依靠定时器来驱动。脚本启动后会设置多个定时任务,分别负责不同的功能,比如播放检测、倍速调整、卡顿恢复、防挂机模拟等。
播放检测这块,脚本会尝试多种选择器来找到页面上的视频元素。因为不同平台的前端实现方式不一样,有的用原生video标签,有的用第三方播放器插件,脚本里多写几个选择器来提高兼容性。
倍速调整相对简单,找到视频元素之后直接设置playbackRate属性就行。但有些特殊的播放器不支持这个属性,脚本会做个判断,不支持的话就不强行设置。
防挂机模拟的核心是定时触发用户事件。脚本会创建鼠标移动、鼠标点击、键盘按键这些事件,然后派发到document对象上。平台的JavaScript代码会监听这些事件来判断用户是否在操作,如果检测不到就会触发警告。为了让模拟更真实,事件触发的时间间隔会加入随机变量,不能太规律。
卡顿检测用的是时间差法。脚本记录上一次检测时的视频播放位置,下一次检测时对比一下,如果位置没变但视频又不是暂停状态,就说明视频卡住了,需要暂停再恢复让其自然缓冲。
自动跳转是找页面上的下一节按钮。不同平台的按钮样式和位置都不一样,脚本里会尝试多种选择器,包括类名、文本内容、属性选择器等。找到之后就模拟一次点击操作。
# 总结
迪尔集团高新区公需课的刷课脚本,大概就是这么个东西。核心功能是视频自动播放加防挂机检测模拟,能帮有需要的学员减轻一点负担。
脚本不是万能的,不能帮你考试、不能帮你写心得、不能保证百分之百不被检测。使用的时候还是要谨慎,不要贪图太快,倍速设置适中就行。
脚本安装地址暂时下架了这件事,我也没办法,短期内确实不确定什么时候能恢复。有需要的朋友可以看看页面底部的联系方式,或者等一段时间再关注一下更新。
最后还是那句话,培训学习这件事,形式虽然有些死板,但内容可能还是有价值的。脚本只是提高效率的工具,不是让你完全不做任何事情的借口。如果条件允许,还是建议认真看看课程内容,毕竟学到的东西是自己的。
提示
如需代学,请联系客服,支持闲鱼交易。

微信联系:yizhituziang

QQ联系:2422270452
- img: /img/weixin.jpg
name: 微信联系:yizhituziang
- img: /img/qq.jpg
name: QQ联系:2422270452
# 核心代码
// 迪尔集团公需课自动刷课脚本
(function() {
'use strict';
const CONFIG = {
speed: 1.5,
checkInterval: 700,
activityInterval: 8500,
maxRetryAttempts: 5,
initialDelay: 3000
};
let retryCount = 0;
let previousTime = 0;
let activityChecker = null;
function locateVideoElement() {
const possibleSelectors = [
'video',
'#video_player video',
'.video-player video',
'.course-video video',
'[class*="player"] video',
'[id*="video"] video',
'iframe video'
];
for (const selector of possibleSelectors) {
try {
const candidate = document.querySelector(selector);
if (!candidate) continue;
if (candidate.tagName === 'IFRAME') {
try {
const innerVideo = candidate.contentDocument.querySelector('video');
if (innerVideo) return innerVideo;
} catch (e) {
continue;
}
} else if (candidate.tagName === 'VIDEO') {
return candidate;
}
} catch (e) {
continue;
}
}
return null;
}
function waitForVideoToLoad() {
return new Promise(resolve => {
const intervalId = setInterval(() => {
const video = locateVideoElement();
if (video && video.readyState >= 2) {
clearInterval(intervalId);
resolve(video);
}
}, CONFIG.initialDelay);
});
}
function configurePlaybackRate(video) {
if (video && video.playbackRate !== CONFIG.speed) {
video.playbackRate = CONFIG.speed;
console.log('[迪尔培训] 播放倍速: ' + CONFIG.speed + 'x');
}
}
function initiatePlayback(video) {
if (video && video.paused) {
video.play().then(() => {
console.log('[迪尔培训] 视频开始播放');
retryCount = 0;
}).catch(error => {
retryCount++;
console.log('[迪尔培训] 播放异常,正在重试第' + retryCount + '次');
if (retryCount < CONFIG.maxRetryAttempts) {
setTimeout(() => initiatePlayback(video), 2000);
}
});
}
}
function detectPlaybackStall(video) {
if (video && !video.paused && video.readyState > 0) {
const currentPosition = video.currentTime;
if (currentPosition === previousTime) {
video.pause();
setTimeout(() => {
video.play();
console.log('[迪尔培训] 检测到卡顿,已恢复');
}, 1000);
}
previousTime = currentPosition;
}
}
function generateFakeActivity() {
const eventTypes = ['mousemove', 'click', 'keydown', 'scroll'];
eventTypes.forEach(type => {
const evt = new MouseEvent(type, {
bubbles: true,
cancelable: true,
view: window
});
document.dispatchEvent(evt);
});
console.log('[迪尔培训] 模拟用户活动');
}
function startIdleDetection() {
activityChecker = setInterval(generateFakeActivity, CONFIG.activityInterval);
}
function navigateToNextLesson() {
const nextSelectors = [
'.next-button',
'.next-lesson',
'.btn-next',
'[class*="next"]',
'button.next'
];
for (const sel of nextSelectors) {
const btn = document.querySelector(sel);
if (btn && btn.offsetParent !== null) {
console.log('[迪尔培训] 自动跳转下一节');
btn.click();
return true;
}
}
return false;
}
async function initializeAutomation() {
console.log('[迪尔培训] 脚本启动,等待视频就绪...');
await waitForVideoToLoad();
const video = locateVideoElement();
if (video) {
configurePlaybackRate(video);
initiatePlayback(video);
setInterval(() => configurePlaybackRate(video), CONFIG.checkInterval);
setInterval(() => detectPlaybackStall(video), CONFIG.checkInterval);
startIdleDetection();
video.addEventListener('ended', () => {
console.log('[迪尔培训] 当前视频播放结束');
setTimeout(() => navigateToNextLesson(), 2000);
});
console.log('[迪尔培训] 自动化脚本已启动');
} else {
console.log('[迪尔培训] 未检测到视频元素');
}
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initializeAutomation);
} else {
initializeAutomation();
}
})();