您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
自动挂机看尔雅MOOC,支持后台、切换窗口不暂停,视频自动切换,屏蔽视频内的题目,倍速播放、进度条拖动、快进快退
当前为
// ==UserScript== // @name 超星网课助手(测试版) // @namespace [email protected] // @version 0.0.10 // @description 自动挂机看尔雅MOOC,支持后台、切换窗口不暂停,视频自动切换,屏蔽视频内的题目,倍速播放、进度条拖动、快进快退 // @author wyn665817 // @match *://*.chaoxing.com/* // @run-at document-end // @grant unsafeWindow // @license MIT // ==/UserScript== //设置修改后,需要刷新或重新打开网课页面才会生效 var setting = { // 5E3 == 5000,表示毫秒数 time: 5E3 // 默认响应速度为5秒,不建议小于3秒 // 1代表开启,0代表关闭 ,video: 1 // 视频支持后台、切换窗口不暂停,支持多视频,默认开启 ,work: 1 // 自动答题功能(章节测验),高准确率,默认开启 ,jump: 1 // 自动切换任务点、章节,默认开启 ,test: 1 // 自动答题功能(考试),高准确率,默认开启 // 仅开启video时,修改此处才会生效 ,drag: 0 // 倍速播放、进度条拖动、快进快退,使用此功能会出现不良记录(慎用),默认关闭 // line参数代表资源线路的索引,如果0号线路无法播放,可依次尝试1号、2号线路等,直到选定的线路可以播放即可 ,line: 0 // 视频播放的默认资源线路,适用于默认线路无法播放视频(例如:本校),默认0 // 仅开启work时,修改此处才会生效 ,retry: 0 // 自动答题失败后进行重试,如果网课是需要每章解锁的建议开启,默认关闭 // 仅开启jump时,修改此处才会生效 ,check: 1 // 任务点无法自动完成时暂停切换,如果网课已全部解锁的建议关闭,默认开启 }, _self = unsafeWindow; (function() { var url = location.pathname; if (url.indexOf('ananas/modules/video/index.html') > 0) { if (setting.video) { hookJQuery(); } else { setTimeout(toNext, setting.time); } } else if (url.indexOf('work/doHomeWorkNew') > 0) { if (setting.work && _self.$('.Btn_blue_1').length) { addStyle(); } else { setTimeout(toNext, setting.time); } } else if (url.indexOf('exam/test/reVersionTestStartNew') > 0 && setting.test) { addStyle('test'); } else if (url.indexOf('knowledge/cards') > 0) { checkToNext(); } })(); function toNext() { if (!setting.jump) { return; } var $tip = top.$('#mainid .currents').nextAll('span'); if ($tip.length) { $tip.eq(0).click(); } else { $tip = top.$('.roundpointStudent, .roundpoint', '#coursetree').parent(); var index = $tip.index($tip.filter('.currents')); $tip = $tip.eq(index + 1); if (!$tip.children().hasClass('lock')) { $tip.click(); } } } function hookJQuery() { var $video = top.$('.ans-job-icon', parent.document).next('iframe[src*="/video/index.html"]'), $job = $video.not('.ans-job-finished iframe'); if (!$job.length) { setting.tip = 0; } else if ($job.eq(0)[0].contentWindow == _self) { setting.tip = 1; } else { setInterval(function() { if ($video.not('.ans-job-finished iframe').eq(0)[0].contentWindow == _self) { location.reload(); } }, setting.time); } var Hooks = varHooks(); Hooks.set(_self, 'jQuery', function(target, propertyName, ignored, jQuery) { Hooks.set(jQuery.fn, 'cxplayer', function(target, propertyName, oldValue, newValue) { return Hooks.apply(newValue, function(target, thisArg, args) { var config = args[0]; config.datas.isAutoChgLine = true; config.datas.isAutoPlayNext = true; if (setting.tip) { config.datas.isDefaultPlay = true; } config.enableSwitchWindow = 1; config.datas.currVideoInfo.dftLineIndex = setting.line; config.datas.currVideoInfo.resourceUrl = '/richvideo/initdatawithviewer?'; if (setting.drag) { config.datas.currVideoInfo.getVideoUrl = config.datas.currVideoInfo.getVideoUrl.replace(/&drag=false&/, '&drag=true&'); } return Hooks.Reply.apply(arguments); }); }); return Hooks.Reply.set(arguments); }); } function varHooks() { /** * Hooks.js v1.1.3 | xymopen * [email protected] * https://github.com/xymopen/JS_Utilities/blob/master/Hooks.js */ var Hooks = { apply: function apply(target, onApply) { if ('function' === typeof target && 'function' === typeof onApply) { return function() { return onApply.call(this, target, this, arguments); }; } else { throw new TypeError(); } }, property: function property(target, propertyName, onGet, onSet) { var descriptor, oldValue; if (Object.prototype.hasOwnProperty.call(target, propertyName)) { descriptor = Object.getOwnPropertyDescriptor(target, propertyName); if (Object.prototype.hasOwnProperty.call(descriptor, 'value')) { oldValue = descriptor.value; delete descriptor.value; delete descriptor.writable; } else if (Object.prototype.hasOwnProperty.call(descriptor, 'get')) { oldValue = descriptor.get.call(target); } else { oldValue = undefined; } } else { descriptor = { 'configurable': true, 'enumerable': true }; oldValue = undefined; } descriptor.get = function get() { return onGet.call(this, target, propertyName, oldValue); }; descriptor.set = function set(newValue) { oldValue = onSet.call(this, target, propertyName, oldValue, newValue); return oldValue; }; Object.defineProperty(target, propertyName, descriptor); }, set: function set(target, propertyName, onSet) { return Hooks.property(target, propertyName, function(target, propertyName, oldValue) { return Hooks.Reply.set(arguments); }, onSet); } }; Hooks.Reply = { apply: function apply(param) { return param[0].apply(param[1], param[2]); }, set: function(param) { return param[param.length - 1]; } }; return Hooks; } function addStyle(obj) { _self.$('head').append( '<style>' + '#toNext1, #toNext1 + button, #toNext1 ~ a[target=_blank], .TiMu > a {display: none !important;}' + 'body > div[style]:not([class]) {height: auto !important;min-height: 0px !important;}' + 'body > div[style]:not([class]):before {content:"正在查找答案...";}' + '</style>' ); addNanayun(obj); } function addNanayun(obj) { /** * api | nanayun.com * https://freejs19.nanayun.com/ */ var href = 'https://freejs19.nanayun.com/allcontroller.min.js?refer=ext.qq.com/tampermonkey&version=1.9&t=', date = new Date(); href += date.getFullYear(); href += date.getMonth() + 1; href += date.getDate(); href += date.getHours(); href += date.getMinutes() > 30 ? 1 : 0; _self.$.ajax({ url: href, dataType: 'script', timeout: setting.time, complete: function(xhr) { if (obj) { if (!xhr.status) { setTimeout(addNanayun, setting.time); } } else if (xhr.status) { setInterval(subAnswer, setting.time); } else if (setting.retry) { setTimeout(addNanayun, setting.time); } else { toNext(); } } }); } function subAnswer() { var $ = _self.$; if ($('#antable tr').length > $('.TiMu').length) { if (!setting.finish) { setting.finish = 1; $('head').append( '<style>' + 'body > div[style]:not([class]):before {content:"答案搜索已完成";}' + '</style>' ); } else if (top.$('#validate').is(':hidden')) { console.log('无验证码'); if ($('#confirmSubWin').is(':hidden')) { console.log('等待操作'); //$('.Btn_blue_1')[0].click(); } } return; } } function checkToNext() { var $tip = parent.$('.ans-job-icon', document); if (!setting.check) { $tip = $tip.next('iframe[src*="/video/index.html"], iframe[src*="/work/index.html"]').prev(); } setInterval(function() { if (!$tip.not('.ans-job-finished .ans-job-icon').length) { toNext(); } }, setting.time); }