市面上超星、尔雅刷课的软件和脚本很多,但是真正好用的却是很少!有的功能比较少、而有的付费价格太高!今天介绍的这款超星尔雅刷课插件却有不一样的体验!它支持自动挂机看尔雅MOOC,支持视频、音频、文档、图书自动完成,章节测验自动答题提交,支持自动切换任务点、挂机阅读时长、自动登录等,解除各类功能限制,开放自定义参数!
软件截图:
软件功能介绍
V4.0.0版本为超星网课助手的最后一个版本,脚本已停止维护。
脚本功能
解除视频播放限制
支持自动挂机、切换窗口不暂停
屏蔽视频内的题目、图片、PPT
倍速播放、进度条拖动(使用该功能会导致出现不良记录)
自动答题,高准确率题库
支持章节测验、作业,已取消支持考试
支持自动提交或暂时保存答案
全自动挂机切换
支持多视频、多任务点,支持未开放章节
支持自定义响应速度
支持自动切换课程
其他任务点
音频任务点,支持自动播放
图书阅读任务点(非课程阅读)
文档阅读任务点,PPT类任务点自动完成
高级功能
挂机课程阅读时长,需要自行打开阅读页面
自动登录功能需要配置相关参数
复习模式:完整挂机视频(音频)时长,支持挂机任务点已完成的视频和音频
队列模式:单页面所有任务点,支持排队完成或同时进行
脚本亮点
使用html5播放器,支持自动倍速、默认静音等功能,取消支持flash播放器
支持单页面多视频、多测验、视频和测验混合等,支持文档课件等资源下载
支持多账号同时挂机(多开需要使用隐身窗口,建议使用虚拟机)
支持选择视频播放的默认资源线路,支持选择清晰度,默认公网1、标清
自动答题功能已支持单选、多选、判断、填空、分录、资料、简答、论述、计算、名词解释、口语等题型
支持手动更改和补充答案,支持暂时保存已作答的题目
课程阅读支持自定义挂机时间,临时停止可以点击右侧返回顶部按钮
支持解除文本类题目答题框的粘贴限制和大小限制,支持解除手机端限制
切换窗口不会有视频的短时暂停,支持用户主动暂停视频播放,解析视频下载链接
支持自定义部分功能的开启或关闭(脚本18~57行提供自定义参数的配置,详情可见脚本中的注释)
常见问题
Q1:视频无法自动播放,浏览器窗口恢复后视频才播放。
A1:由于浏览器安全策略限制,html5播放器不支持在窗口最小化时自动播放视频(已测试爱奇艺、 *** 视频、YouTube,均存在此问题)。解决 *** :不要最小化浏览器窗口(窗口可以被覆盖,全屏游戏也不影响)。
感谢
@baochen 提交脚本BUG和参与脚本新功能的测试
@Blacrazy 提交优质建议和参与脚本新功能的测试
声明
刷课有风险,脚本的设计已尽可能避免被检测,但仍有出现不良记录的可能性,请合理使用脚本。
使用倍速播放、进度条拖动、秒过功能会导致出现不良记录,请慎重使用。
默认 *** 作,即单选、多选、判断题随机选择,填空、简答等文本类题目不修改。
题库的答案准确率较高,但无法保证自动答题功能始终可用,也无法保证答案全部正确。
自动答题功能会采集部分非隐私数据上传,仅用于提高答案匹配度。
每次脚本更新都会导致自定义参数重置为默认值,如有设置,请更新后及时修改。
更新日志:
v4.1.1
19/1/2021 修改html播放器处理机制,优化部分代码结构
21/12/2020 移除部分失效功能,修复部分功能异常,优化queue、video、audio、face参数功能和部分代码结构
11/12/2020 新增bypass参数功能,修复course参数功能异常
6/12/2020 填空类无答案不修改,修复部分功能异常,优化部分代码结构,移除失效功能
4/12/2020 删除token参数,使之符合最新的脚本发布规则
18/4/2020 V4.0.0版本为超星网课助手的最后一个版本,脚本已停止维护
16/4/2020 精简代码,优化部分代码结构
14/4/2020 修复自动答题功能异常
14/4/2020 修复自动答题功能异常
13/4/2020 优化部分代码结构
12/4/2020 修复填空题无法自动答题,优化部分代码结构
10/4/2020 优化音视频下载功能,优化部分代码结构
7/4/2020 新增队列模式、资源下载、课堂测验自动答题,优化限制解除功能,优化部分代码结构
22/3/2020 修复题目循环查询,精简和优化部分代码结构
15/3/2020 新增超时跳过当前题目按钮,修复脚本功能异常,优化部分代码结构
2/3/2020 修复填空类题目答案丢失空格、标点符号异常等问题
2/3/2020 优化音频题目的采集检索和图片答案的自动答题,提高答案匹配度
29/2/2020 恢复自动提交参数,优化答案匹配,移除上传选项功能,优化部分代码结构
11/2/2020 修复lock参数功能异常
31/1/2020 优化任务点自定义开关和完成的处理方式,优化答案匹配,优化部分代码结构
24/12/2019 新增视频下载功能,优化答案匹配,精简参数,重写和优化部分代码,修复脚本异常
10/11/2019 修复自动答题功能异常,优化答案采集功能
1/11/2019 新增lock参数,优化自动答题功能,修复特殊情况下的脚本功能异常,优化部分代码结构
9/9/2019 优化异常情况处理,优化部分代码结构
30/8/2019 新增异常处理、提示信息,修复跨域问题、作业答题,优化phone参数功能、更改默认值为开启
21/8/2019 修复自动切换课程功能异常,更改check参数的默认值为关闭,优化部分代码结构
9/8/2019 优化自动答题功能,优化部分代码结构
25/7/2019 新增review、total,优化核心代码、任务点功能、限制解除、自动登录,优化部分代码结构
2/7/2019 新增safe参数和答案采集,优化自动答题和自动保存,修复脚本功能异常,优化部分代码结构
31/5/2019 优化部分代码结构
30/5/2019 优化部分代码结构
25/5/2019 修复自动切换功能异常,优化自动切换功能处理逻辑,优化部分代码结构
19/5/2019 优化题库兼容性,修复自动答题功能异常,优化图片答案的显示,优化部分代码结构
7/5/2019 修复自动答题功能异常,优化部分代码结构
4/5/2019 新增支持edu.cn域名和新任务点功能,修复特殊情况下的脚本功能异常,优化部分代码结构
11/3/2019 修复Edge浏览器异常,新增自动登录功能相关参数,优化部分功能的兼容性和使用体验
20/2/2019 功能完善和代码优化,更新日志详细内容在反馈区
11/10/2018 新增wait、none、copy、scale参数,修复自动答题功能异常,优化按钮显示和代码结构
3/10/2018 章节测验和视频共同排队并依次完成,修复flash播放器白屏问题,优化显示提示信息
25/9/2018 修复自动答题功能,移除考试功能,移除已失效的参数,新增auto自动提交参数
17/9/2018 新增支持html5播放器,自动适配 *** 默认播放器(支持自定义默认播放器),修改部分参数
11/9/2018 新增muted参数配置视频静音播放功能,修复考试功能错误加载,优化部分代码结构
2/9/2018 优化自定义参数的处理方式(临时取消任务点),优化脚本错误处理机制,优化部分代码结构
23/8/2018 新增proxy参数配置 *** 服务器,原生js改写ajax请求防止 *** ,部分代码结构优化
16/8/2018 修改自动答题功能的加载方式和判断逻辑,屏蔽ajax全局事件 *** ,增强脚本安全性
8/8/2018 自动切换功能代码重写优化逻辑,部分代码结构优化
26/7/2018 优化视频播放的默认资源线路的选择方式(存在兼容性问题),精简命令,代码结构微调
22/7/2018 新增修改视频播放的默认资源线路,优化代码逻辑,修复特殊情况下的脚本功能异常
18/7/2018 启用沙盒增强脚本安全性,替换参数switch为jump,脚本结构微调
15/7/2018 进一步jQ改写和优化逻辑,修复部分章节无法跳转,修复自动答题功能可能出现的异常
脚本代码:
// ==UserScript==
// @name 超星网课助手
// @namespace wyn665817@163.com
// @version 4.1.1
// @description 自动挂机看尔雅MOOC,支持视频、音频、文档、图书自动完成,章节测验自动答题提交,支持自动切换任务点、挂机阅读时长、自动登录等,解除各类功能限制,开放自定义参数
// @author wyn665817
// @match *://*.chaoxing.com/*
// @match *://*.edu.cn/*
// @connect forestpolice.org
// @run-at document-end
// @grant unsafeWindow
// @grant GM_xmlhttpRequest
// @grant GM_setClipboard
// @supportURL https://greasyfork.org/zh-CN/scripts/369625/feedback
// @license MIT
// ==/UserScript==
// 设置修改后,需要刷新或重新打开网课页面才会生效
varsetting={
// 5E3 == 5000,科学记数法,表示毫秒数
time:5E3// 默认响应速度为5秒,不建议小于3秒
,review:0// 复习模式,完整挂机视频(音频)时长,支持挂机任务点已完成的视频和音频,默认关闭
,queue:1// 队列模式,开启后任务点逐一完成,关闭则单页面所有任务点同时进行,默认开启
// 1代表开启,0代表关闭
,video:0// 视频支持后台、切换窗口不暂停,支持多视频,默认关闭
,work:1// 自动答题功能(章节测验),作业需要手动开启查询,高准确率,默认开启
,audio:0// 音频自动播放,与视频功能共享vol和rate参数,默认关闭
,book:0// 图书阅读任务点,非课程阅读任务点,默认关闭
,docs:0// 文档阅读任务点,PPT类任务点自动完成阅读任务,默认关闭
// 本区域参数,上方为任务点功能,下方为 *** 功能
,jump:0// 自动切换标签、章节、课程(需要配置course参数),默认关闭
,read:'0'// 挂机课程阅读时间,单位是分钟,'65'代表挂机65分钟,请手动打开阅读页面,默认'0'分钟
,face:0// 解除面部识别(不支持二维码类面部采集),此功能仅为临时解除,默认关闭
,total:0// 显示课程进度的统计数据,在学习进度页面的上方展示,默认关闭
// 仅开启video(audio)时,修改此处才会生效
,line:'公网1'// 视频播放的默认资源线路,此功能适用于 *** 默认线路无资源,默认'公网1'
,http:'标清'// 视频播放的默认清晰度,无效参数则使用 *** 默认清晰度,默认'标清'
// 本区域参数,上方为video功能独享,下方为audio功能共享
,vol:'0'// 默认音量的百分数,设定范围:[0,100],'0'为静音,默认'0'
,rate:'1'// 视频播放默认倍率,参数范围0∪[0.0625,16],'0'为秒过,默认'1'倍
// 仅开启work时,修改此处才会生效
,auto:0// 答题完成后自动提交,默认开启
,none:0// 无匹配答案时执行默认 *** 作,关闭后若题目无匹配答案则会暂时保存已作答的题目,默认开启
,scale:0// 富文本编辑器高度自动拉伸,用于文本类题目,答题框根据内容自动调整大小,默认关闭
// 仅开启jump时,修改此处才会生效
,course:0// 当前课程完成后自动切换课程,仅支持按照根目录课程顺序切换,默认关闭
,lock:1// 跳过未开放(图标是锁)的章节,即闯关模式或定时发放的任务点,默认开启
// 自动登录功能配置区
,school:'账号为手机号可以不修改此参数'// 学校/单位/机构码,要求完整有效可查询,例如'清华大学'
,username:''// 学号/工号/借书证号(邮箱/手机号/账号),例如'2018010101',默认''
,password:''// 密码,例如'123456',默认''
},
_self=unsafeWindow,
url=location.pathname,
top=_self;
if(url!='/studyApp/studying'&&top!=_self.top)document.domain=location.host.replace(/.+?\./,'');
try{
while(top!=_self.top){
top=top.parent.document?top.parent:_self.top;
if(top.location.pathname=='/mycourse/studentstudy')break;
}
}catch(err){
// console.log(err);
top=_self;
}
var$=_self.jQuerytop.jQuery,
parent=_self==top?self:_self.parent,
Ext=_self.Extparent.Ext{},
UE=_self.UE,
vjs=_self.videojs,
dl='https://d0.ananas.chaoxing.com/download/';
String.prototype.toCDB=function(){
returnthis.replace(/\s/g,'').replace(/[\uff01-\uff5e]/g,function(str){
returnString.fromCharCode(str.charCodeAt(0)-65248);
}).replace(/[“”]/g,'"').replace(/[‘’]/g,"'").replace(/。/g,'.');
};
_self.alert=console.log;
setting.normal='';// ':visible'
// setting.time += Math.ceil(setting.time * Math.random()) - setting.time / 2;
setting.job=[':not(*)'];
setting.video&&setting.job.push('iframe[src*="/video/index.html"]');
setting.work&&setting.job.push('iframe[src*="/work/index.html"]');
setting.audio&&setting.job.push('iframe[src*="/audio/index.html"]');
setting.book&&setting.job.push('iframe[src*="/innerbook/index.html"]');
setting.docs&&setting.job.push('iframe[src*="/ppt/index.html"]','iframe[src*="/pdf/index.html"]');
if(url=='/mycourse/studentstudy'){
_self.checkMobileBrowerLearn=$.noop;
varclassId=location.search.match(/cla[zs]{2}id=(\d+)/i)[1]0,
courseId=_self.courseIdlocation.search.match(/courseId=(\d+)/i)[1]0;
!setting.jumpsetting.lock$('#coursetree').on('click','[onclick*=void], [href*=void]',function(){
_self.getTeacherAjax(courseId,classId,$(this).parent().attr('id').slice(3));
});
}elseif(url=='/ananas/modules/video/index.html'&&setting.video){
if(setting.review)_self.greenligth=Ext.emptyFn;
vjs.hook('beforesetup',hookVideoB);
vjs.hook('setup',hookVideoS);
Ext.isIos=Ext.isAndroid=false;
}elseif(url=='/work/doHomeWorkNew'url=='/api/work'url=='/work/addStudentWorkNewWeb'){
if(!UE){
varlen=($Ext.queryArray)('font:contains(未登录)',document).length;
setTimeout(len==1?top.location.reload:parent.greenligth,setting.time);
}elseif(setting.work){
setTimeout(relieveLimit,0);
beforeFind();
}
}elseif(url=='/ananas/modules/audio/index.html'&&setting.audio){
if(setting.review)_self.greenligth=Ext.emptyFn;
vjs.hook('beforesetup',hookAudioB);
vjs.hook('setup',hookAudioS);
}elseif(url=='/ananas/modules/innerbook/index.html'&&setting.book){
setTimeout(function(){
if(getTip())_self.setting?_self.top.onchangepage(_self.getFrameAttr('end')):_self.greenligth();
},setting.time);
}elseif(url.match(/^\/ananas\/modules\/(ppt|pdf)\/index\.html$/)&&setting.docs){
setTimeout(function(){
if(getTip())_self.setting?_self.finishJob():_self.greenligth();
},setting.time);
frameElement.setAttribute('download',1);
if(_self.downloadNum=='')_self.downloadNum='1';
}elseif(url=='/knowledge/cards'){
$&&checkToNext();
}elseif(url.match(/^\/(course|zt)\/\d+\.html$/)){
setTimeout(function(){
+setting.read&&_self.sendLogs&&$('.course_section:eq(0) .chapterText').click();
},setting.time);
}elseif(url=='/ztnodedetailcontroller/visitnodedetail'){
setting.read*=60/$('.course_section').length;
setting.read&&_self.sendLogs&&autoRead();
}elseif(url.match(/^\/visit\/(courses|interaction)$/)){
setting.face&&$('.zmodel').on('click','[onclick^=openFaceTip]',function(){
varid=$(this).attr('onclick').match(/(\d+).+?(\d+)/)[];
$(this).closest('li').find('[onclick^=openFaceTip]').removeAttr('onclick').attr({
target:'_blank',
href:'stucoursemiddle?courseid='+id[1]+'&clazzid='+id[2]
});
alert('本课程已临时解除面部识别');
});
}elseif(url=='/mycourse/studentcourse'){
vargv=location.search.match(/d=\d+&/g);
setting.total&&$('<a>',{
href:'/moocAnalysis/chapterStatisticByUser?classI'+gv[1]+'courseI'+gv[0]+'userId='+_self.getCookie('_uid')+'&ut=s',
target:'_blank',
title:'点击查看章节统计',
style:'margin: 0 25px;',
html:'本课程共'+$('.icon').length+'节,剩余'+$('em:not(.openlock)').length+'节未完成'
}).appendTo('.zt_logo').parent().width('auto');
}elseif(location.host.match(/^passport2/)){
setting.username&&getSchoolId();
}elseif(location.hostname=='i.mooc.chaoxing.com'){
_self.layui.use('layer',function(){
this.layer.open({content:'拖动进度条、倍速播放、秒过会导致不良记录!',title:'超星网课助手提示',btn:'我已知悉',offset:'t',closeBtn:0});
});
}elseif(url=='/work/selectWorkQuestionYiPiYue'){
submitAnswer(getIframe().parent(),$.extend(true,[],parent._data));
}
functiongetTip(){
returntop!=_self&&jobSort($Ext.query);
}
functionjobSort($){
varfn=$.fn?[getIframe(1),'length']:[self,'dom'],
sel=setting.job.join(', :not(.ans-job-finished) > .ans-job-icon'+setting.normal+' ~ ');
if(!getIframe()[fn[1]]getIframe().parent().is('.ans-job-finished'))return0;
if(!setting.queue$(sel,fn[0].parent.document)[0]==fn[0].frameElement)return1;
setInterval(function(){
$(sel,fn[0].parent.document)[0]==fn[0].frameElement&&fn[0].location.reload();
},setting.time);
}
functiongetIframe(tip,win,job){
if(!$)returnExt.get(frameElement[]).parent().child('.ans-job-icon')Ext.get([]);
do{
win=win?win.parent:_self;
job=$(win.frameElement).prevAll('.ans-job-icon');
}while(!job.length&&win.parent.frameElement);
returntip?win:job;
}
functionhookVideoB(el,config){
varExtArr=Ext.Array,
line=ExtArr.filter(ExtArr.map(config.playlines,function(value,index){
returnvalue.label==setting.line&&index;
}),function(value){
returnExt.isNumber(value);
})[0]0,
http=ExtArr.filter(config.sources,function(value){
returnvalue.label==setting.http;
})[0];
config.playlines.unshift(config.playlines[line]);
config.playlines.splice(line+1,1);
config.plugins.videoJsResolutionSwitcher.default=http?http.res:360;
config.plugins.studyControl.enableSwitchWindow=1;
config.plugins.timelineObjects.url='/richvideo/initdatawithviewer?';
config.plugins.seekBarControl.enableFastForward=1;
config.playbackRates=[1,1.25,1.5,2];
setting.queuevjs.registerPlugin('studyControl',Ext.emptyFn);
// config.preload = setting.tip ? 'auto' : 'none';
returnconfig;
}
functionhookVideoS(player){
vara='<a href="'+dl+_self.config('objectid')+'" target="_blank">',
img='<img src="'+dl+'e363b256c0e9bc5bd8266bf99dd6d6bb" style="margin: 6px 0 0 6px;">';
player.volume(Math.round(setting.vol)/1000);
Ext.fly(player.controlBar.addChild('Button').el_).setHTML(a+img+'</a>').dom.title='下载视频';
player.on('loadstart',function(){
getTip()&&this.play().catch(Ext.emptyFn);
this.playbackRate(setting.rate>16setting.rate<0.0625?1:setting.rate);
});
player.one(['loadedmetadata','firstplay'],function(){
setting.two=setting.rate==='0'&&setting.two<1;
setting.two&&this.options_.plugins.seekBarControl.sendLog(this.children_[0],'ended',Math.floor(this.cache_.duration));
});
player.on('ended',function(){
Ext.fly(frameElement).parent().addCls('ans-job-finished');
});
}
functionhookAudioB(el,config){
config.plugins.studyControl.enableSwitchWindow=1;
config.plugins.seekBarControl.enableFastForward=1;
setting.queuevjs.registerPlugin('studyControl',Ext.emptyFn);
returnconfig;
}
functionhookAudioS(player){
vara='<a href="'+dl+_self.config('objectid')+'" target="_blank">',
img='<img src="'+dl+'e363b256c0e9bc5bd8266bf99dd6d6bb" style="margin: 6px 0 0 6px;">';
player.volume(Math.round(setting.vol)/1000);
player.playbackRate(setting.rate>16setting.rate<0.0625?1:setting.rate);
Ext.fly(player.controlBar.addChild('Button').el_).setHTML(a+img+'</a>').dom.title='下载音频';
player.on('loadeddata',function(){
getTip()&&this.play().catch(Ext.emptyFn);
});
player.one('firstplay',function(){
setting.rate==='0'&&this.options_.plugins.seekBarControl.sendLog(this.children_[0],'ended',Math.floor(this.cache_.duration));
});
player.on('ended',function(){
Ext.fly(frameElement).parent().addCls('ans-job-finished');
});
}
functionrelieveLimit(){
if(setting.scale)_self.UEDITOR_CONFIG.scaleEnabled=false;
$.each(UE.instants,function(){
varkey=this.key;
this.ready(function(){
this.destroy();
UE.getEditor(key);
});
});
}
functionbeforeFind(){
setting.regl=parent.greenligth$.noop;
if($.type(parent._data)=='array')returnsetting.regl();
setting.div=$(
'<div style="border: 2px dashed rgb(0, 85, 68); width: 330px; position: fixed; top: 0; right: 0; z-index: 99999; background-color: rgba(70, 196, 38, 0.6); overflow-x: auto;">'+
'<span style="font-size: medium;"></span>'+
'<div style="font-size: medium;">正在搜索答案...</div>'+
'<button style="margin-right: 10px;">暂停答题</button>'+
'<button style="margin-right: 10px;">'+(setting.auto?'取消本次自动提交':'开启本次自动提交')+'</button>'+
'<button style="margin-right: 10px;">重新查询</button>'+
'<button>折叠面板</button>'+
'<div style="max-height: 300px; overflow-y: auto;">'+
'<table border="1" style="font-size: 12px;">'+
'<thead>'+
'<tr>'+
'<th style="width: 25px; min-width: 25px;">题号</th>'+
'<th style="width: 60%; min-width: 130px;">题目(点击可复制)</th>'+
'<th style="min-width: 130px;">答案(点击可复制)</th>'+
'</tr>'+
'</thead>'+
'<tfoot style="display: none;">'+
'<tr>'+
'<th colspan="3">答案提示框 已折叠</th>'+
'</tr>'+
'</tfoot>'+
'<tbody>'+
'<tr>'+
'<td colspan="3" style="display: none;"></td>'+
'</tr>'+
'</tbody>'+
'</table>'+
'</div>'+
'</div>'
).appendTo('body').on('click','button, td',function(){
varlen=$(this).prevAll('button').length;
if(this.nodeName=='TD'){
$(this).prev().length&&GM_setClipboard($(this).text());
}elseif(!$(this).siblings().length){
$(this).parent().text('正在搜索答案...');
setting.num++;
}elseif(len===0){
if(setting.loop){
clearInterval(setting.loop);
deletesetting.loop;
len=['已暂停搜索','继续答题'];
}else{
setting.loop=setInterval(findAnswer,setting.time);
len=['正在搜索答案...','暂停答题'];
}
setting.div.children('div:eq(0)').html(function(){
return$(this).data('html')len[0];
}).removeData('html');
$(this).html(len[1]);
}elseif(len==1){
setting.auto=!setting.auto;
$(this).html(setting.auto?'取消本次自动提交':'开启本次自动提交');
}elseif(len==2){
parent.location.reload();
}elseif(len==3){
setting.div.find('tbody, tfoot').toggle();
}
}).find('table, td, th').css('border','1px solid').end();
setting.lose=setting.num=0;
setting.data=parent._data=[];
setting.over='<button style="margin-right: 10px;">跳过此题</button>';
setting.curs=$('script:contains(courseName)',top.document).text().match(/courseName:\'(.+?)\'|$/)[1]$('h1').text().trim()'无';
setting.loop=setInterval(findAnswer,setting.time);
vartip=({undefined:'任务点排队中',0:'等待切换中'})[getTip()];
tip&&setting.div.children('div:eq(0)').data('html',tip).siblings('button:eq(0)').click();
}
functionfindAnswer(){
if(setting.num>=$('.TiMu').length){
vararr=setting.lose?['共有 <font color="red">'+setting.lose+'</font> 道题目待完善(已深色标注)',saveThis]:['答题已完成',submitThis];
setting.div.children('div:eq(0)').data('html',arr[0]).siblings('button:eq(0)').hide().click();
returnsetTimeout(arr[1],setting.time);
}
var$TiMu=$('.TiMu').eq(setting.num),
question=filterImg($TiMu.find('.Zy_TItle:eq(0) .clearfix')).replace(/^【.*?】\s*/,'').replace(/\s*(\d+\.\d+分)$/,''),
type=$TiMu.find('input[name^=answertype]:eq(0)').val()'-1';
GM_xmlhttpRequest({
method:'POST',
url:'http://mooc.forestpolice.org/cx/0/'+encodeURIComponent(question),
headers:{
'Content-type':'application/x-www-form-urlencoded'
},
data:'question='+encodeURIComponent(question)+'&type='+type,
timeout:setting.time,
onload:function(xhr){
if(!setting.loop){
}elseif(xhr.status==200){
varobj=$.parse *** ON(xhr.responseText){};
if(obj.code){
setting.div.children('div:eq(0)').text('正在搜索答案...');
vartd='<td style="border: 1px solid;',
data=String(obj.data).replace(/&/g,'&').replace(/<(?!img)/g,'<');
obj.data=/^http/.test(data)?'<img src="'+obj.data+'">':obj.data;
$(
'<tr>'+
td+' text-align: center;">'+$TiMu.find('.Zy_TItle:eq(0) i').text().trim()+'</td>'+
td+'" title="点击可复制">'+(question.match('<img')?question:question.replace(/&/g,'&').replace(/</g,'<'))+'</td>'+
td+'" title="点击可复制">'+(/^http/.test(data)?obj.data:'')+data+'</td>'+
'</tr>'
).appendTo(setting.div.find('tbody')).css('background-color',fillAnswer($TiMu.find('ul:eq(0)').find('li'),obj,type)?'':'rgba(0, 150, 136, 0.6)');
setting.data[setting.num++]={
code:obj.code>0?1:0,
question:question,
option:obj.data,
type:Number(type)
};
}else{
setting.div.children('div:eq(0)').html(obj.datasetting.over+'服务器繁忙,正在重试...');
}
setting.div.children('span').html(obj.msg'');
}elseif(xhr.status==403){
varhtml=xhr.responseText.indexOf('{')?'请求过于频繁,建议稍后再试':$.parse *** ON(xhr.responseText).data;
setting.div.children('div:eq(0)').data('html',html).siblings('button:eq(0)').click();
}else{
setting.div.children('div:eq(0)').html(setting.over+'服务器异常,正在重试...');
}
},
ontimeout:function(){
setting.loop&&setting.div.children('div:eq(0)').html(setting.over+'服务器超时,正在重试...');
}
});
}
functionfillAnswer($li,obj,type){
var$input=$li.find(':radio, :checkbox'),
str=String(obj.data).toCDB()newDate().toString(),
data=str.split(/#|\x01|\|/),
opt=obj.optstr,
state=setting.lose;
// $li.find(':radio:checked').prop('checked', false);
obj.code>0&&$input.each(function(index){
if(this.value=='true'){
data.join().match(/(^|,)(正确|是|对|√|T|ri|right|true)(,|$)/)&&this.click();
}elseif(this.value=='false'){
data.join().match(/(^|,)(错误|否|错|×|F|wr|wrong|false)(,|$)/)&&this.click();
}else{
vartip=filterImg($li.eq(index).find('.after')).toCDB()newDate().toString();
Boolean($.inArray(tip,data)+1(type=='1'&&str.indexOf(tip)+1))==this.checkedthis.click();
}
}).each(function(){
if(!/^A?B?C?D?E?F?G?$/.test(opt))returnfalse;
Boolean(opt.match(this.value))==this.checkedthis.click();
});
if(type.match(/^[013]$/)){
$input.is(':checked')(setting.none?($input[Math.floor(Math.random()*$input.length)]$()).click():setting.lose++);
}elseif(type.match(/^(2|[4-9]|1[08])$/)){
data=String(obj.data).split(/#|\x01|\|/);
str=$li.end().find('textarea').each(function(index){
index=(obj.code>0&&data[index])this.value'';
UE.getEditor(this.name).setContent(index.trim());
}).length;
(obj.code>0&&data.length==str)setting.nonesetting.lose++;
}else{
setting.nonesetting.lose++;
}
returnstate==setting.lose;
}
functionsaveThis(){
if(!setting.auto)returnsetTimeout(saveThis,setting.time);
setting.div.children('button:lt(3)').hide().eq(1).click();
$('#tempsave').click();
setting.regl();
}
functionsubmitThis(){
if(!setting.auto){
}elseif(!$('.Btn_blue_1:visible').length){
setting.div.children('button:lt(3)').hide().eq(1).click();
returnsetting.regl();
}elseif($('#confirmSubWin:visible').length){
varbtn=$('#tipContent + * > a').offset(){top:0,left:0},
mouse=document.createEvent('MouseEvents');
btn=[btn.left+Math.ceil(Math.random()*46),btn.top+Math.ceil(Math.random()*26)];
mouse.initMouseEvent('click',true,true,document.defaultView,0,0,0,btn[0],btn[1],false,false,false,false,0,null);
_self.event=$.extend(true,{},mouse);
delete_self.event.isTrusted;
_self.form1submit();
}else{
$('.Btn_blue_1')[0].click();
}
setTimeout(submitThis,Math.ceil(setting.time*Math.random())*2);
}
functioncheckToNext(){
var$tip=$(setting.job.join(', '),document).prevAll('.ans-job-icon'+setting.normal);
setInterval(function(){
$tip.parent(':not(.ans-job-finished)').lengthsetting.jump&&toNext();
},setting.time);
}
functiontoNext(){
var$cur=$('#cur'+$('#chapterIdid').val()),
$tip=$('span.currents ~ span'),
sel=setting.review?'html':'.blue';
if(!$cur.has(sel).length&&$tip.length)return$tip.eq(0).click();
$tip=$('.roundpointStudent, .roundpoint').parent();
$tip=$tip.slice($tip.index($cur)+1).not(':has('+sel+')');
$tip.not(setting.lock?':has(.lock)':'html').find('span').eq(0).click();
$tip.lengthsetting.course&&switchCourse();
}
functionswitchCourse(){
GM_xmlhttpRequest({
method:'GET',
url:'/visit/courses/study?isAjax=true&fileId=0&debug=',
headers:{
'Referer':location.origin+'/visit/courses',
'X-Requested-With':'XMLHttpRequest'
},
onload:function(xhr){
var$list=$('.curFile .courseName',xhr.responseText),
index=$list.index($list.filter('[href*="courseid='+top.courseId+'&"]'))+1;
index=index&&$list.eq(index).attr('href');
setting.course=index&&goCourse(index);
}
});
}
functiongoCourse(url){
GM_xmlhttpRequest({
method:'GET',
url:url,
onload:function(xhr){
$.globalEval('location.href = "'+$('.articlename a[href]',xhr.responseText).attr('href')+'";');
}
});
}
functionautoRead(){
$('html, body').animate({
scrollTop:$(document).height()-$(window).height()
},Math.round(setting.read)*1E3,function(){
$('.nodeItem.r i').click();
}).one('click','#top',function(event){
$(event.delegateTarget).stop();
});
}
functiongetSchoolId(){
varschool=/^1\d{10}$/.test(setting.username)?'':setting.school;
if(!isNaN(school))returnsetTimeout(toLogin,setting.time,school);
if(school=='账号为手机号可以不修改此参数')returnalert('请修改school参数');
$.get *** ON('/org/searchUnis?filter='+encodeURI(school)+'&product=44',function(data){
if(!data.result)returnalert('学校查询错误');
varmsg=$.grep(data.froms,function(value){
returnvalue.name==school;
})[0];
msg?setTimeout(toLogin,setting.time,msg.schoolid):alert('学校名称不完整');
});
}
functiontoLogin(fid){
GM_xmlhttpRequest({
method:'GET',
url:'/api/login?name='+setting.username+'&pwd='+setting.password+'&schoolid='+fid+'&verify=0',
onload:function(xhr){
varobj=$.parse *** ON(xhr.responseText){};
obj.result?location.href=decodeURIComponent($('[id^=ref]').val()):alert(obj.errorMsg'Error');
}
});
}
functionsubmitAnswer($job,data){
$job.removeClass('ans-job-finished');
data=data.length?$(data):$('.TiMu').map(function(){
vartitle=filterImg($('.Zy_TItle .clearfix',this));
return{
question:title.replace(/^【.*?】\s*/,''),
type:({单选题:0,多选题:1,填空题:2,判断题:3})[title.match(/^【(.*?)】|$/)[1]]
};
});
data=$.grep(data.map(function(index){
var$TiMu=$('.TiMu').eq(index);
if(!($.isPlainObject(this)&&this.type<4&&$TiMu.find('.fr').length)){
returnfalse;
}elseif(this.type==2){
var$ans=$TiMu.find('.Py_tk, .Py_answer').eq(0);
if(!$TiMu.find('.cuo').length&&this.code){
returnfalse;
}elseif(!$ans.find('.cuo').length){
this.option=$ans.find('.clearfix').map(function(){
returnfilterImg(this);
}).get().join('#')'无';
}elseif(this.code){
this.code=-1;
}else{
returnfalse;
}
}elseif(this.type==3){
varans=$TiMu.find('.font20:last').text();
if($TiMu.find('.cuo').length){
this.option=({'√':'错误','×':'正确'})[ans]'无';
}elseif(!this.code){
this.option=({'√':'正确','×':'错误'})[ans]'无';
}else{
returnfalse;
}
}else{
vartext=$TiMu.find('.Py_answer > span:eq(0)').text();
if($TiMu.find('.dui').length&&this.code&&!/^A?B?C?D?E?F?G?$/.test(this.option)){
returnfalse;
}elseif($TiMu.find('.dui').lengthtext.match('正确答案')){
text=text.match(/[A-G]/gi)[];
this.option=$.map(text,function(value){
returnfilterImg($TiMu.find('.fl:contains('+value+') + a'));
}).join('#')'无';
this.key=text.join('');
}elseif(this.code){
this.code=-1;
}else{
returnfalse;
}
}
returnthis;
}),function(value){
returnvalue&&value.option!='无';
});
setting.curs=$('script:contains(courseName)',top.document).text().match(/courseName:\'(.+?)\'|$/)[1]$('h1').text().trim()'无';
data.length&&GM_xmlhttpRequest({
method:'POST',
url:'http://mooc.forestpolice.org/upload/cx/0/?workRelationId='+$('#workId').val(),
headers:{
'Content-type':'application/x-www-form-urlencoded'
},
data:'course='+encodeURIComponent(setting.curs)+'&data='+encodeURIComponent((Ext.encode*** ON.stringify)(data))+'&id='+$('#jobid').val().slice(5)
});
$job.addClass('ans-job-finished');
}
functionfilterImg(dom){
return$(dom).clone().find('img[src]').replaceWith(function(){
return$('<p></p>').text('<img src="'+$(this).attr('src')+'">');
}).end().find('iframe[src]').replaceWith(function(){
return$('<p></p>').text('<iframe src="'+$(this).attr('src')+'"></irame>');
}).end().text().trim();
}
下载地址:
https://greasyfork.org/id/scripts/369625-%E8%B6%85%E6%98%9F%E7%BD%91%E8%AF%BE%E5%8A%A9%E6%89%8B/
标签:#超星脚本刷课代码
评论列表