网课邦

当前位置:首页 > 网课资讯

网课资讯

【已更新】超星尔雅刷网课插件支持自动答题、阅读时长~

时间:2025-06-05 01:21:06 作者:暂无作者 浏览量:
内容页左侧
  • 市面上超星、尔雅刷课的软件和脚本很多,但是真正好用的却是很少!有的功能比较少、而有的付费价格太高!今天介绍的这款超星尔雅刷课插件却有不一样的体验!它支持自动挂机看尔雅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播放器处理机制,优化部分代码结构

  • v4.1.0

    21/12/2020

    移除部分失效功能,修复部分功能异常,优化queue、video、audio、face参数功能和部分代码结构

  • v4.0.3

    11/12/2020

    新增bypass参数功能,修复course参数功能异常

  • v4.0.2

    6/12/2020

    填空类无答案不修改,修复部分功能异常,优化部分代码结构,移除失效功能

  • v4.0.1

    4/12/2020

    删除token参数,使之符合最新的脚本发布规则

  • v4.0.0

    18/4/2020

    V4.0.0版本为超星网课助手的最后一个版本,脚本已停止维护

  • v3.5.1

    16/4/2020

    精简代码,优化部分代码结构

  • v3.5.0

    14/4/2020

    修复自动答题功能异常

  • v3.4.4

    14/4/2020

    修复自动答题功能异常

  • v3.4.3

    13/4/2020

    优化部分代码结构

  • v3.4.2

    12/4/2020

    修复填空题无法自动答题,优化部分代码结构

  • v3.4.1

    10/4/2020

    优化音视频下载功能,优化部分代码结构

  • v3.4.0

    7/4/2020

    新增队列模式、资源下载、课堂测验自动答题,优化限制解除功能,优化部分代码结构

  • v3.3.1

    22/3/2020

    修复题目循环查询,精简和优化部分代码结构

  • v3.3.0

    15/3/2020

    新增超时跳过当前题目按钮,修复脚本功能异常,优化部分代码结构

  • v3.2.2

    2/3/2020

    修复填空类题目答案丢失空格、标点符号异常等问题

  • v3.2.1

    2/3/2020

    优化音频题目的采集检索和图片答案的自动答题,提升答案匹配度

  • v3.2.0

    29/2/2020

    恢复自动提交参数,优化答案匹配,移除上传选项功能,优化部分代码结构

  • v3.1.1

    11/2/2020

    修复lock参数功能异常

  • v3.1.0

    31/1/2020

    优化任务点自定义开关和完成的处理方式,优化答案匹配,优化部分代码结构

  • v3.0.0

    24/12/2019

    新增视频下载功能,优化答案匹配,精简参数,重写和优化部分代码,修复脚本异常

  • v2.5.1

    10/11/2019

    修复自动答题功能异常,优化答案采集功能

  • v2.5.0

    1/11/2019

    新增lock参数,优化自动答题功能,修复特殊情况下的脚本功能异常,优化部分代码结构

  • v2.4.4

    9/9/2019

    优化异常情况处理,优化部分代码结构

  • v2.4.3

    30/8/2019

    新增异常处理、提示信息,修复跨域问题、作业答题,优化phone参数功能、更改默认值为开启

  • v2.4.2

    21/8/2019

    修复自动切换课程功能异常,更改check参数的默认值为关闭,优化部分代码结构

  • v2.4.1

    9/8/2019

    优化自动答题功能,优化部分代码结构

  • v2.4.0

    25/7/2019

    新增review、total,优化核心代码、任务点功能、限制解除、自动登录,优化部分代码结构

  • v2.3.0

    2/7/2019

    新增safe参数和答案采集,优化自动答题和自动保存,修复脚本功能异常,优化部分代码结构

  • v2.2.5

    31/5/2019

    优化部分代码结构

  • v2.2.4

    30/5/2019

    优化部分代码结构

  • v2.2.3

    25/5/2019

    修复自动切换功能异常,优化自动切换功能处理逻辑,优化部分代码结构

  • v2.2.2

    19/5/2019

    优化题库兼容性,修复自动答题功能异常,优化图片答案的显示,优化部分代码结构

  • v2.2.1

    7/5/2019

    修复自动答题功能异常,优化部分代码结构

  • v2.2.0

    4/5/2019

    新增支持edu.cn域名和新任务点功能,修复特殊情况下的脚本功能异常,优化部分代码结构

  • v2.1.0

    11/3/2019

    修复Edge浏览器异常,新增自动登录功能相关参数,优化部分功能的兼容性和使用体验

  • v2.0.0

    20/2/2019

    功能完善和代码优化,更新日志详细内容在反馈区

  • v1.8.0

    11/10/2018

    新增wait、none、copy、scale参数,修复自动答题功能异常,优化按钮显示和代码结构

  • v1.7.1

    3/10/2018

    章节测验和视频共同排队并依次完成,修复flash播放器白屏问题,优化显示提示信息

  • v1.7.0

    25/9/2018

    修复自动答题功能,移除考试功能,移除已失效的参数,新增auto自动提交参数

  • v1.6.0

    17/9/2018

    新增支持html5播放器,自动适配系统默认播放器(支持自定义默认播放器),修改部分参数

  • v1.5.2

    11/9/2018

    新增muted参数配置视频静音播放功能,修复考试功能错误加载,优化部分代码结构

  • v1.5.1

    2/9/2018

    优化自定义参数的处理方式(临时取消任务点),优化脚本错误处理机制,优化部分代码结构

  • v1.5.0

    23/8/2018

    新增proxy参数配置代理服务器,原生js改写ajax请求防止监听,部分代码结构优化

  • v1.4.3

    16/8/2018

    修改自动答题功能的加载方式和判断逻辑,屏蔽ajax全局事件监听,增强脚本安全性

  • v1.4.2

    8/8/2018

    自动切换功能代码重写优化逻辑,部分代码结构优化

  • v1.4.1

    26/7/2018

    优化视频播放的默认资源线路的选择方式(存在兼容性问题),精简命令,代码结构微调

  • v1.4.0

    22/7/2018

    新增修改视频播放的默认资源线路,优化代码逻辑,修复特殊情况下的脚本功能异常

  • v1.3.0

    18/7/2018

    启用沙盒增强脚本安全性,替换参数switch为jump,脚本结构微调

  • v1.2.1

    15/7/2018

    进一步jQ改写和优化逻辑,修复部分章节无法跳转,修复自动答题功能可能出现的异常

  • 脚本代码:

  • // ==UserScript==

  • // @name超星网课助手

  • // @namespacewyn665817@163.com

  • // @version4.1.1

  • // @description自动挂机看尔雅MOOC,支持视频、音频、文档、图书自动完成,章节测验自动答题提交,支持自动切换任务点、挂机阅读时长、自动登录等,解除各类功能限制,开放自定义参数

  • // @authorwyn665817

  • // @match://.chaoxing.com/

  • // @match://.edu.cn/

  • // @connectforestpolice.org

  • // @run-atdocument-end

  • // @grantunsafeWindow

  • // @grantGM_xmlhttpRequest

  • // @grantGM_setClipboard

  • // @supportURLhttps://greasyfork.org/zh-CN/scripts/369625/feedback

  • // @licenseMIT

  • // ==/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:&9;0&9;// 挂机课程阅读时间,单位是分钟,&9;65&9;代表挂机65分钟,请手动打开阅读页面,默认&9;0&9;分钟

  • ,face:0// 解除面部识别(不支持二维码类面部采集),此功能仅为临时解除,默认关闭

  • ,total:0// 显示课程进度的统计数据,在学习进度页面的上方展示,默认关闭

  • // 仅开启video(audio)时,修改此处才会生效

  • ,line:&9;公网1&9;// 视频播放的默认资源线路,此功能适用于系统默认线路无资源,默认&9;公网1&9;

  • ,http:&9;标清&9;// 视频播放的默认清晰度,无效参数则使用系统默认清晰度,默认&9;标清&9;

  • // 本区域参数,上方为video功能独享,下方为audio功能共享

  • ,vol:&9;0&9;// 默认音量的百分数,设定范围:[0,100],&9;0&9;为静音,默认&9;0&9;

  • ,rate:&9;1&9;// 视频播放默认倍率,参数范围0∪[0.0625,16],&9;0&9;为秒过,默认&9;1&9;倍

  • // 仅开启work时,修改此处才会生效

  • ,auto:0// 答题完成后自动提交,默认开启

  • ,none:0// 无匹配答案时执行默认操作,关闭后若题目无匹配答案则会暂时保存已作答的题目,默认开启

  • ,scale:0// 富文本编辑器高度自动拉伸,用于文本类题目,答题框根据内容自动调整大小,默认关闭

  • // 仅开启jump时,修改此处才会生效

  • ,course:0// 当前课程完成后自动切换课程,仅支持按照根目录课程顺序切换,默认关闭

  • ,lock:1// 跳过未开放(图标是锁)的章节,即闯关模式或定时发放的任务点,默认开启

  • // 自动登录功能配置区

  • ,school:&9;账号为手机号可以不修改此参数&9;// 学校/单位/机构码,要求完整有效可查询,例如&9;清华大学&9;

  • ,username:&9;&9;// 学号/工号/借书证号(邮箱/手机号/账号),例如&9;2018010101&9;,默认&9;&9;

  • ,password:&9;&9;// 密码,例如&9;123456&9;,默认&9;&9;

  • },

  • _self=unsafeWindow,

  • url=location.pathname,

  • top=_self;

  • if(url!=&9;/studyApp/studying&9;&&top!=_self.top)document.domain=location.host.replace(/.+?\./,&9;&9;);

  • try{

  • while(top!=_self.top){

  • top=top.parent.document?top.parent:_self.top;

  • if(top.location.pathname==&9;/mycourse/studentstudy&9;)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=&9;https://d0.ananas.chaoxing.com/download/&9;;

  • String.prototype.toCDB=function(){

  • returnthis.replace(/\s/g,&9;&9;).replace(/[\uff01-\uff5e]/g,function(str){

  • returnString.fromCharCode(str.charCodeAt(0)-65248);

  • }).replace(/[“”]/g,&9;"&9;).replace(/[‘’]/g,"&9;").replace(/。/g,&9;.&9;);

  • };

  • _self.alert=console.log;

  • setting.normal=&9;&9;;// &9;:visible&9;

  • // setting.time += Math.ceil(setting.timeMath.random()) - setting.time / 2;

  • setting.job=[&9;:not()&9;];

  • setting.video&&setting.job.push(&9;iframe[src="/video/index.html"]&9;);

  • setting.work&&setting.job.push(&9;iframe[src="/work/index.html"]&9;);

  • setting.audio&&setting.job.push(&9;iframe[src="/audio/index.html"]&9;);

  • setting.book&&setting.job.push(&9;iframe[src="/innerbook/index.html"]&9;);

  • setting.docs&&setting.job.push(&9;iframe[src="/ppt/index.html"]&9;,&9;iframe[src="/pdf/index.html"]&9;);

  • if(url==&9;/mycourse/studentstudy&9;){

  • _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$(&9;coursetree&9;).on(&9;click&9;,&9;[onclick=void], [href=void]&9;,function(){

  • _self.getTeacherAjax(courseId,classId,$(this).parent().attr(&9;id&9;).slice(3));

  • });

  • }elseif(url==&9;/ananas/modules/video/index.html&9;&&setting.video){

  • if(setting.review)_self.greenligth=Ext.emptyFn;

  • vjs.hook(&9;beforesetup&9;,hookVideoB);

  • vjs.hook(&9;setup&9;,hookVideoS);

  • Ext.isIos=Ext.isAndroid=false;

  • }elseif(url==&9;/work/doHomeWorkNew&9;url==&9;/api/work&9;url==&9;/work/addStudentWorkNewWeb&9;){

  • if(!UE){

  • varlen=($Ext.queryArray)(&9;font:contains(未登录)&9;,document).length;

  • setTimeout(len==1?top.location.reload:parent.greenligth,setting.time);

  • }elseif(setting.work){

  • setTimeout(relieveLimit,0);

  • beforeFind();

  • }

  • }elseif(url==&9;/ananas/modules/audio/index.html&9;&&setting.audio){

  • if(setting.review)_self.greenligth=Ext.emptyFn;

  • vjs.hook(&9;beforesetup&9;,hookAudioB);

  • vjs.hook(&9;setup&9;,hookAudioS);

  • }elseif(url==&9;/ananas/modules/innerbook/index.html&9;&&setting.book){

  • setTimeout(function(){

  • if(getTip())_self.setting?_self.top.onchangepage(_self.getFrameAttr(&9;end&9;)):_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(&9;download&9;,1);

  • if(_self.downloadNum==&9;&9;)_self.downloadNum=&9;1&9;;

  • }elseif(url==&9;/knowledge/cards&9;){

  • $&&checkToNext();

  • }elseif(url.match(/^\/(course|zt)\/\d+\.html$/)){

  • setTimeout(function(){

  • +setting.read&&_self.sendLogs&&$(&9;.course_section:eq(0) .chapterText&9;).click();

  • },setting.time);

  • }elseif(url==&9;/ztnodedetailcontroller/visitnodedetail&9;){

  • setting.read=60/$(&9;.course_section&9;).length;

  • setting.read&&_self.sendLogs&&autoRead();

  • }elseif(url.match(/^\/visit\/(courses|interaction)$/)){

  • setting.face&&$(&9;.zmodel&9;).on(&9;click&9;,&9;[onclick^=openFaceTip]&9;,function(){

  • varid=$(this).attr(&9;onclick&9;).match(/(\d+).+?(\d+)/)[];

  • $(this).closest(&9;li&9;).find(&9;[onclick^=openFaceTip]&9;).removeAttr(&9;onclick&9;).attr({

  • target:&9;_blank&9;,

  • href:&9;stucoursemiddle?courseid=&9;+id[1]+&9;&clazzid=&9;+id[2]

  • });

  • alert(&9;本课程已临时解除面部识别&9;);

  • });

  • }elseif(url==&9;/mycourse/studentcourse&9;){

  • vargv=location.search.match(/d=\d+&/g);

  • setting.total&&$(&9;<a>&9;,{

  • href:&9;/moocAnalysis/chapterStatisticByUser?classI&9;+gv[1]+&9;courseI&9;+gv[0]+&9;userId=&9;+_self.getCookie(&9;_uid&9;)+&9;&ut=s&9;,

  • target:&9;_blank&9;,

  • title:&9;点击查看章节统计&9;,

  • style:&9;margin: 0 25px;&9;,

  • html:&9;本课程共&9;+$(&9;.icon&9;).length+&9;节,剩余&9;+$(&9;em:not(.openlock)&9;).length+&9;节未完成&9;

  • }).appendTo(&9;.zt_logo&9;).parent().width(&9;auto&9;);

  • }elseif(location.host.match(/^passport2/)){

  • setting.username&&getSchoolId();

  • }elseif(location.hostname==&9;i.mooc.chaoxing.com&9;){

  • _self.layui.use(&9;layer&9;,function(){

  • this.layer.open({content:&9;拖动进度条、倍速播放、秒过会导致不良记录!&9;,title:&9;超星网课助手提示&9;,btn:&9;我已知悉&9;,offset:&9;t&9;,closeBtn:0});

  • });

  • }elseif(url==&9;/work/selectWorkQuestionYiPiYue&9;){

  • submitAnswer(getIframe().parent(),$.extend(true,[],parent._data));

  • }

  • functiongetTip(){

  • returntop!=_self&&jobSort($Ext.query);

  • }

  • functionjobSort($){

  • varfn=$.fn?[getIframe(1),&9;length&9;]:[self,&9;dom&9;],

  • sel=setting.job.join(&9;, :not(.ans-job-finished) > .ans-job-icon&9;+setting.normal+&9; ~ &9;);

  • if(!getIframe()[fn[1]]getIframe().parent().is(&9;.ans-job-finished&9;))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(&9;.ans-job-icon&9;)Ext.get([]);

  • do{

  • win=win?win.parent:_self;

  • job=$(win.frameElement).prevAll(&9;.ans-job-icon&9;);

  • }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=&9;/richvideo/initdatawithviewer?&9;;

  • config.plugins.seekBarControl.enableFastForward=1;

  • config.playbackRates=[1,1.25,1.5,2];

  • setting.queuevjs.registerPlugin(&9;studyControl&9;,Ext.emptyFn);

  • // config.preload = setting.tip ? &9;auto&9; : &9;none&9;;

  • returnconfig;

  • }

  • functionhookVideoS(player){

  • vara=&9;<a href="&9;+dl+_self.config(&9;objectid&9;)+&9;" target="_blank">&9;,

  • img=&9;<img src="&9;+dl+&9;e363b256c0e9bc5bd8266bf99dd6d6bb" style="margin: 6px 0 0 6px;">&9;;

  • player.volume(Math.round(setting.vol)/1000);

  • Ext.fly(player.controlBar.addChild(&9;Button&9;).el_).setHTML(a+img+&9;</a>&9;).dom.title=&9;下载视频&9;;

  • player.on(&9;loadstart&9;,function(){

  • getTip()&&this.play().catch(Ext.emptyFn);

  • this.playbackRate(setting.rate>16setting.rate<0.0625?1:setting.rate);

  • });

  • player.one([&9;loadedmetadata&9;,&9;firstplay&9;],function(){

  • setting.two=setting.rate===&9;0&9;&&setting.two<1;

  • setting.two&&this.options_.plugins.seekBarControl.sendLog(this.children_[0],&9;ended&9;,Math.floor(this.cache_.duration));

  • });

  • player.on(&9;ended&9;,function(){

  • Ext.fly(frameElement).parent().addCls(&9;ans-job-finished&9;);

  • });

  • }

  • functionhookAudioB(el,config){

  • config.plugins.studyControl.enableSwitchWindow=1;

  • config.plugins.seekBarControl.enableFastForward=1;

  • setting.queuevjs.registerPlugin(&9;studyControl&9;,Ext.emptyFn);

  • returnconfig;

  • }

  • functionhookAudioS(player){

  • vara=&9;<a href="&9;+dl+_self.config(&9;objectid&9;)+&9;" target="_blank">&9;,

  • img=&9;<img src="&9;+dl+&9;e363b256c0e9bc5bd8266bf99dd6d6bb" style="margin: 6px 0 0 6px;">&9;;

  • player.volume(Math.round(setting.vol)/1000);

  • player.playbackRate(setting.rate>16setting.rate<0.0625?1:setting.rate);

  • Ext.fly(player.controlBar.addChild(&9;Button&9;).el_).setHTML(a+img+&9;</a>&9;).dom.title=&9;下载音频&9;;

  • player.on(&9;loadeddata&9;,function(){

  • getTip()&&this.play().catch(Ext.emptyFn);

  • });

  • player.one(&9;firstplay&9;,function(){

  • setting.rate===&9;0&9;&&this.options_.plugins.seekBarControl.sendLog(this.children_[0],&9;ended&9;,Math.floor(this.cache_.duration));

  • });

  • player.on(&9;ended&9;,function(){

  • Ext.fly(frameElement).parent().addCls(&9;ans-job-finished&9;);

  • });

  • }

  • 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)==&9;array&9;)returnsetting.regl();

  • setting.div=$(

  • &9;<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;">&9;+

  • &9;<span style="font-size: medium;"></span>&9;+

  • &9;<div style="font-size: medium;">正在搜索答案...</div>&9;+

  • &9;<button style="margin-right: 10px;">暂停答题</button>&9;+

  • &9;<button style="margin-right: 10px;">&9;+(setting.auto?&9;取消本次自动提交&9;:&9;开启本次自动提交&9;)+&9;</button>&9;+

  • &9;<button style="margin-right: 10px;">重新查询</button>&9;+

  • &9;<button>折叠面板</button>&9;+

  • &9;<div style="max-height: 300px; overflow-y: auto;">&9;+

  • &9;<table border="1" style="font-size: 12px;">&9;+

  • &9;<thead>&9;+

  • &9;<tr>&9;+

  • &9;<th style="width: 25px; min-width: 25px;">题号</th>&9;+

  • &9;<th style="width: 60%; min-width: 130px;">题目(点击可复制)</th>&9;+

  • &9;<th style="min-width: 130px;">答案(点击可复制)</th>&9;+

  • &9;</tr>&9;+

  • &9;</thead>&9;+

  • &9;<tfoot style="display: none;">&9;+

  • &9;<tr>&9;+

  • &9;<th colspan="3">答案提示框 已折叠</th>&9;+

  • &9;</tr>&9;+

  • &9;</tfoot>&9;+

  • &9;<tbody>&9;+

  • &9;<tr>&9;+

  • &9;<td colspan="3" style="display: none;"></td>&9;+

  • &9;</tr>&9;+

  • &9;</tbody>&9;+

  • &9;</table>&9;+

  • &9;</div>&9;+

  • &9;</div>&9;

  • ).appendTo(&9;body&9;).on(&9;click&9;,&9;button, td&9;,function(){

  • varlen=$(this).prevAll(&9;button&9;).length;

  • if(this.nodeName==&9;TD&9;){

  • $(this).prev().length&&GM_setClipboard($(this).text());

  • }elseif(!$(this).siblings().length){

  • $(this).parent().text(&9;正在搜索答案...&9;);

  • setting.num++;

  • }elseif(len===0){

  • if(setting.loop){

  • clearInterval(setting.loop);

  • deletesetting.loop;

  • len=[&9;已暂停搜索&9;,&9;继续答题&9;];

  • }else{

  • setting.loop=setInterval(findAnswer,setting.time);

  • len=[&9;正在搜索答案...&9;,&9;暂停答题&9;];

  • }

  • setting.div.children(&9;div:eq(0)&9;).html(function(){

  • return$(this).data(&9;html&9;)len[0];

  • }).removeData(&9;html&9;);

  • $(this).html(len[1]);

  • }elseif(len==1){

  • setting.auto=!setting.auto;

  • $(this).html(setting.auto?&9;取消本次自动提交&9;:&9;开启本次自动提交&9;);

  • }elseif(len==2){

  • parent.location.reload();

  • }elseif(len==3){

  • setting.div.find(&9;tbody, tfoot&9;).toggle();

  • }

  • }).find(&9;table, td, th&9;).css(&9;border&9;,&9;1px solid&9;).end();

  • setting.lose=setting.num=0;

  • setting.data=parent._data=[];

  • setting.over=&9;<button style="margin-right: 10px;">跳过此题</button>&9;;

  • setting.curs=$(&9;script:contains(courseName)&9;,top.document).text().match(/courseName:\&9;(.+?)\&9;|$/)[1]$(&9;h1&9;).text().trim()&9;无&9;;

  • setting.loop=setInterval(findAnswer,setting.time);

  • vartip=({undefined:&9;任务点排队中&9;,0:&9;等待切换中&9;})[getTip()];

  • tip&&setting.div.children(&9;div:eq(0)&9;).data(&9;html&9;,tip).siblings(&9;button:eq(0)&9;).click();

  • }

  • functionfindAnswer(){

  • if(setting.num>=$(&9;.TiMu&9;).length){

  • vararr=setting.lose?[&9;共有 <font color="red">&9;+setting.lose+&9;</font> 道题目待完善(已深色标注)&9;,saveThis]:[&9;答题已完成&9;,submitThis];

  • setting.div.children(&9;div:eq(0)&9;).data(&9;html&9;,arr[0]).siblings(&9;button:eq(0)&9;).hide().click();

  • returnsetTimeout(arr[1],setting.time);

  • }

  • var$TiMu=$(&9;.TiMu&9;).eq(setting.num),

  • question=filterImg($TiMu.find(&9;.Zy_TItle:eq(0) .clearfix&9;)).replace(/^【.?】\s/,&9;&9;).replace(/\s(\d+\.\d+分)$/,&9;&9;),

  • type=$TiMu.find(&9;input[name^=answertype]:eq(0)&9;).val()&9;-1&9;;

  • GM_xmlhttpRequest({

  • method:&9;POST&9;,

  • url:&9;http://mooc.forestpolice.org/cx/0/&9;+encodeURIComponent(question),

  • headers:{

  • &9;Content-type&9;:&9;application/x-www-form-urlencoded&9;

  • },

  • data:&9;question=&9;+encodeURIComponent(question)+&9;&type=&9;+type,

  • timeout:setting.time,

  • onload:function(xhr){

  • if(!setting.loop){

  • }elseif(xhr.status==200){

  • varobj=$.parseJSON(xhr.responseText){};

  • if(obj.code){

  • setting.div.children(&9;div:eq(0)&9;).text(&9;正在搜索答案...&9;);

  • vartd=&9;<td style="border: 1px solid;&9;,

  • data=String(obj.data).replace(/&/g,&9;&&9;).replace(/<(?!img)/g,&9;<&9;);

  • obj.data=/^http/.test(data)?&9;<img src="&9;+obj.data+&9;">&9;:obj.data;

  • $(

  • &9;<tr>&9;+

  • td+&9; text-align: center;">&9;+$TiMu.find(&9;.Zy_TItle:eq(0) i&9;).text().trim()+&9;</td>&9;+

  • td+&9;" title="点击可复制">&9;+(question.match(&9;<img&9;)?question:question.replace(/&/g,&9;&&9;).replace(/</g,&9;&lt&9;))+&9;</td>&9;+

  • td+&9;" title="点击可复制">&9;+(/^http/.test(data)?obj.data:&9;&9;)+data+&9;</td>&9;+

  • &9;</tr>&9;

  • ).appendTo(setting.div.find(&9;tbody&9;)).css(&9;background-color&9;,fillAnswer($TiMu.find(&9;ul:eq(0)&9;).find(&9;li&9;),obj,type)?&9;&9;:&9;rgba(0, 150, 136, 0.6)&9;);

  • setting.data[setting.num++]={

  • code:obj.code>0?1:0,

  • question:question,

  • option:obj.data,

  • type:Number(type)

  • };

  • }else{

  • setting.div.children(&9;div:eq(0)&9;).html(obj.datasetting.over+&9;服务器繁忙,正在重试...&9;);

  • }

  • setting.div.children(&9;span&9;).html(obj.msg&9;&9;);

  • }elseif(xhr.status==403){

  • varhtml=xhr.responseText.indexOf(&9;{&9;)?&9;请求过于频繁,建议稍后再试&9;:$.parseJSON(xhr.responseText).data;

  • setting.div.children(&9;div:eq(0)&9;).data(&9;html&9;,html).siblings(&9;button:eq(0)&9;).click();

  • }else{

  • setting.div.children(&9;div:eq(0)&9;).html(setting.over+&9;服务器异常,正在重试...&9;);

  • }

  • },

  • ontimeout:function(){

  • setting.loop&&setting.div.children(&9;div:eq(0)&9;).html(setting.over+&9;服务器超时,正在重试...&9;);

  • }

  • });

  • }

  • functionfillAnswer($li,obj,type){

  • var$input=$li.find(&9;:radio, :checkbox&9;),

  • str=String(obj.data).toCDB()newDate().toString(),

  • data=str.split(/|\x01|\|/),

  • opt=obj.optstr,

  • state=setting.lose;

  • // $li.find(&9;:radio:checked&9;).prop(&9;checked&9;, false);

  • obj.code>0&&$input.each(function(index){

  • if(this.value==&9;true&9;){

  • data.join().match(/(^|,)(正确|是|对|√|T|ri|right|true)(,|$)/)&&this.click();

  • }elseif(this.value==&9;false&9;){

  • data.join().match(/(^|,)(错误|否|错|×|F|wr|wrong|false)(,|$)/)&&this.click();

  • }else{

  • vartip=filterImg($li.eq(index).find(&9;.after&9;)).toCDB()newDate().toString();

  • Boolean($.inArray(tip,data)+1(type==&9;1&9;&&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(&9;:checked&9;)(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(&9;textarea&9;).each(function(index){

  • index=(obj.code>0&&data[index])this.value&9;&9;;

  • 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(&9;button:lt(3)&9;).hide().eq(1).click();

  • $(&9;tempsave&9;).click();

  • setting.regl();

  • }

  • functionsubmitThis(){

  • if(!setting.auto){

  • }elseif(!$(&9;.Btn_blue_1:visible&9;).length){

  • setting.div.children(&9;button:lt(3)&9;).hide().eq(1).click();

  • returnsetting.regl();

  • }elseif($(&9;confirmSubWin:visible&9;).length){

  • varbtn=$(&9;tipContent +> a&9;).offset(){top:0,left:0},

  • mouse=document.createEvent(&9;MouseEvents&9;);

  • btn=[btn.left+Math.ceil(Math.random()46),btn.top+Math.ceil(Math.random()26)];

  • mouse.initMouseEvent(&9;click&9;,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{

  • $(&9;.Btn_blue_1&9;)[0].click();

  • }

  • setTimeout(submitThis,Math.ceil(setting.timeMath.random())2);

  • }

  • functioncheckToNext(){

  • var$tip=$(setting.job.join(&9;, &9;),document).prevAll(&9;.ans-job-icon&9;+setting.normal);

  • setInterval(function(){

  • $tip.parent(&9;:not(.ans-job-finished)&9;).lengthsetting.jump&&toNext();

  • },setting.time);

  • }

  • functiontoNext(){

  • var$cur=$(&9;cur&9;+$(&9;chapterIdid&9;).val()),

  • $tip=$(&9;span.currents ~ span&9;),

  • sel=setting.review?&9;html&9;:&9;.blue&9;;

  • if(!$cur.has(sel).length&&$tip.length)return$tip.eq(0).click();

  • $tip=$(&9;.roundpointStudent, .roundpoint&9;).parent();

  • $tip=$tip.slice($tip.index($cur)+1).not(&9;:has(&9;+sel+&9;)&9;);

  • $tip.not(setting.lock?&9;:has(.lock)&9;:&9;html&9;).find(&9;span&9;).eq(0).click();

  • $tip.lengthsetting.course&&switchCourse();

  • }

  • functionswitchCourse(){

  • GM_xmlhttpRequest({

  • method:&9;GET&9;,

  • url:&9;/visit/courses/study?isAjax=true&fileId=0&debug=&9;,

  • headers:{

  • &9;Referer&9;:location.origin+&9;/visit/courses&9;,

  • &9;X-Requested-With&9;:&9;XMLHttpRequest&9;

  • },

  • onload:function(xhr){

  • var$list=$(&9;.curFile .courseName&9;,xhr.responseText),

  • index=$list.index($list.filter(&9;[href="courseid=&9;+top.courseId+&9;&"]&9;))+1;

  • index=index&&$list.eq(index).attr(&9;href&9;);

  • setting.course=index&&goCourse(index);

  • }

  • });

  • }

  • functiongoCourse(url){

  • GM_xmlhttpRequest({

  • method:&9;GET&9;,

  • url:url,

  • onload:function(xhr){

  • $.globalEval(&9;location.href = "&9;+$(&9;.articlename a[href]&9;,xhr.responseText).attr(&9;href&9;)+&9;";&9;);

  • }

  • });

  • }

  • functionautoRead(){

  • $(&9;html, body&9;).animate({

  • scrollTop:$(document).height()-$(window).height()

  • },Math.round(setting.read)1E3,function(){

  • $(&9;.nodeItem.r i&9;).click();

  • }).one(&9;click&9;,&9;top&9;,function(event){

  • $(event.delegateTarget).stop();

  • });

  • }

  • functiongetSchoolId(){

  • varschool=/^1\d{10}$/.test(setting.username)?&9;&9;:setting.school;

  • if(!isNaN(school))returnsetTimeout(toLogin,setting.time,school);

  • if(school==&9;账号为手机号可以不修改此参数&9;)returnalert(&9;请修改school参数&9;);

  • $.getJSON(&9;/org/searchUnis?filter=&9;+encodeURI(school)+&9;&product=44&9;,function(data){

  • if(!data.result)returnalert(&9;学校查询错误&9;);

  • varmsg=$.grep(data.froms,function(value){

  • returnvalue.name==school;

  • })[0];

  • msg?setTimeout(toLogin,setting.time,msg.schoolid):alert(&9;学校名称不完整&9;);

  • });

  • }

  • functiontoLogin(fid){

  • GM_xmlhttpRequest({

  • method:&9;GET&9;,

  • url:&9;/api/login?name=&9;+setting.username+&9;&pwd=&9;+setting.password+&9;&schoolid=&9;+fid+&9;&verify=0&9;,

  • onload:function(xhr){

  • varobj=$.parseJSON(xhr.responseText){};

  • obj.result?location.href=decodeURIComponent($(&9;[id^=ref]&9;).val()):alert(obj.errorMsg&9;Error&9;);

  • }

  • });

  • }

  • functionsubmitAnswer($job,data){

  • $job.removeClass(&9;ans-job-finished&9;);

  • data=data.length?$(data):$(&9;.TiMu&9;).map(function(){

  • vartitle=filterImg($(&9;.Zy_TItle .clearfix&9;,this));

  • return{

  • question:title.replace(/^【.?】\s/,&9;&9;),

  • type:({单选题:0,多选题:1,填空题:2,判断题:3})[title.match(/^【(.?)】|$/)[1]]

  • };

  • });

  • data=$.grep(data.map(function(index){

  • var$TiMu=$(&9;.TiMu&9;).eq(index);

  • if(!($.isPlainObject(this)&&this.type<4&&$TiMu.find(&9;.fr&9;).length)){

  • returnfalse;

  • }elseif(this.type==2){

  • var$ans=$TiMu.find(&9;.Py_tk, .Py_answer&9;).eq(0);

  • if(!$TiMu.find(&9;.cuo&9;).length&&this.code){

  • returnfalse;

  • }elseif(!$ans.find(&9;.cuo&9;).length){

  • this.option=$ans.find(&9;.clearfix&9;).map(function(){

  • returnfilterImg(this);

  • }).get().join(&9;&9;)&9;无&9;;

  • }elseif(this.code){

  • this.code=-1;

  • }else{

  • returnfalse;

  • }

  • }elseif(this.type==3){

  • varans=$TiMu.find(&9;.font20:last&9;).text();

  • if($TiMu.find(&9;.cuo&9;).length){

  • this.option=({&9;√&9;:&9;错误&9;,&9;×&9;:&9;正确&9;})[ans]&9;无&9;;

  • }elseif(!this.code){

  • this.option=({&9;√&9;:&9;正确&9;,&9;×&9;:&9;错误&9;})[ans]&9;无&9;;

  • }else{

  • returnfalse;

  • }

  • }else{

  • vartext=$TiMu.find(&9;.Py_answer > span:eq(0)&9;).text();

  • if($TiMu.find(&9;.dui&9;).length&&this.code&&!/^A?B?C?D?E?F?G?$/.test(this.option)){

  • returnfalse;

  • }elseif($TiMu.find(&9;.dui&9;).lengthtext.match(&9;正确答案&9;)){

  • text=text.match(/[A-G]/gi)[];

  • this.option=$.map(text,function(value){

  • returnfilterImg($TiMu.find(&9;.fl:contains(&9;+value+&9;) + a&9;));

  • }).join(&9;&9;)&9;无&9;;

  • this.key=text.join(&9;&9;);

  • }elseif(this.code){

  • this.code=-1;

  • }else{

  • returnfalse;

  • }

  • }

  • returnthis;

  • }),function(value){

  • returnvalue&&value.option!=&9;无&9;;

  • });

  • setting.curs=$(&9;script:contains(courseName)&9;,top.document).text().match(/courseName:\&9;(.+?)\&9;|$/)[1]$(&9;h1&9;).text().trim()&9;无&9;;

  • data.length&&GM_xmlhttpRequest({

  • method:&9;POST&9;,

  • url:&9;http://mooc.forestpolice.org/upload/cx/0/?workRelationId=&9;+$(&9;workId&9;).val(),

  • headers:{

  • &9;Content-type&9;:&9;application/x-www-form-urlencoded&9;

  • },

  • data:&9;course=&9;+encodeURIComponent(setting.curs)+&9;&data=&9;+encodeURIComponent((Ext.encodeJSON.stringify)(data))+&9;&id=&9;+$(&9;jobid&9;).val().slice(5)

  • });

  • $job.addClass(&9;ans-job-finished&9;);

  • }

  • functionfilterImg(dom){

  • return$(dom).clone().find(&9;img[src]&9;).replaceWith(function(){

  • return$(&9;<p></p>&9;).text(&9;<img src="&9;+$(this).attr(&9;src&9;)+&9;">&9;);

  • }).end().find(&9;iframe[src]&9;).replaceWith(function(){

  • return$(&9;<p></p>&9;).text(&9;<iframe src="&9;+$(this).attr(&9;src&9;)+&9;"></irame>&9;);

  • }).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/