2022最新学习通刷课脚本在线安装地址
功能:
超星学习通考试专用版|考试答题|全网聚合题库每日自动更新适用于几乎所有专业科目|完全免费永久使用【考试专用版】
学会这个教程只需要一双小手和一个不怎么灵活的大脑!!!
一、油猴安装教程篇
脚本内部已经被我修改视频秒过,作业自动提交了。
你们可以查看脚本源代码自行其他的修改,我这里就不多说了【操作简单】无需配置安装即可使用【功能齐全】自动搜索超星尔雅学习通MOOC考试答案,支持自动答题、自动切换题目。【定制题库】独家定制试题库,精准识别,答案秒出。【✨功能扩展】隐藏答案搜索提示框等,解除各类功能限制,开放自定义参数
安装地址
// ==UserScript==
// @name超星学习通考试专用版|考试答题|全网聚合题库每日自动更新适用于几乎所有专业科目|完全免费永久使用【考试专用版】
// @version1.0.7
// @namespaceMuketool
// @description【?操作简单】无需配置安装即可使用【?功能齐全】自动搜索超星尔雅学习通MOOC考试答案,支持自动答题、自动切换题目。【?定制题库】独家定制试题库,精准识别,答案秒出。【✨功能扩展】隐藏答案搜索提示框等,解除各类功能限制,开放自定义参数
// @authorMuketool
// @match://.chaoxing.com/exam/test/reVersionTestStartNew
// @match://.edu.cn/exam/test/reVersionTestStartNew
// @match://.nbdlib.cn/exam/test/reVersionTestStartNew
// @match://.hnsyu.net/exam/test/reVersionTestStartNew
// @connectapi.muketool.com
// @connectapi2.muketool.com
// @run-atdocument-end
// @grantunsafeWindow
// @grantGM_xmlhttpRequest
// @grantGM_setValue
// @grantGM_getValue
// @grantGM_setClipboard
// @licenseMIT
// @supportURLhttps://docs.muketool.com
// @homepagehttps://www.muketool.com
// @original-script https://greasyfork.org/zh-CN/scripts/373131-%E8%B6%85%E6%98%9F%E7%BD%91%E8%AF%BE%E5%8A%A9%E6%89%8B-%E8%80%83%E8%AF%95%E4%B8%93%E7%89%88
// @original-author wyn665817
// @original-license MIT
// ==/UserScript==
// 设置修改后,需要刷新或重新打开网课页面才会生效
var setting = {
//这里设置脚本所使用的题库接口。默认使用Muketool团队题库,您也可以自行替换为其他题库服务器。
//Muketool团队默认提供两个题库接口:“http://api.muketool.com:2086/”(默认使用该接口)和“http://api2.muketool.com:2086/”,
//二个题库试题数据一样,区别在于前者使用国内加速线路,响应更快;后者采用国外高防线路以应对可能出现的网络攻击。如果您发现其中一个题库失联,可以尝试切换为另一个。
tiku: &9;http://api.muketool.com/&9;
// 8E3 == 8000,科学记数法,表示毫秒数
,time: 8E3 // 默认响应速度为8秒,不建议小于5秒
// 1代表开启,0代表关闭
,none: 0 // 未找到答案或无匹配答案时执行默认操作,默认关闭
,jump: 1 // 答题完成后自动切换,默认开启
,copy: 0 // 自动复制答案到剪贴板,也可以通过手动点击按钮或答案进行复制,默认关闭
// 非自动化操作
,hide: 0 // 不加载答案搜索提示框,键盘↑和↓可以临时移除和加载,默认关闭
,scale: 0 // 富文本编辑器高度自动拉伸,用于文本类题目,答题框根据内容自动调整大小,默认关闭
, script: &9;v1cxexam&9;
, version: &9;1.0.7&9;
},
_self = unsafeWindow,
$ = _self.jQuery,
UE = _self.UE;
setting.notice = &9;公告栏&9;;
GM_xmlhttpRequest({
method: &9;GET&9;,
url: setting.tiku + &9;notice?script=&9; + setting.type + &9;&version=&9; + setting.version,
timeout: setting.time,
onload: function (xhr) {
if (xhr.status == 200) {
var obj = $.parseJSON(xhr.responseText) || {};
setting.notice = obj.injection;
document.querySelector(&9;cx-notice&9;).innerHTML = setting.notice;
}
},
ontimeout: function () {
setting.loop && setting.div.children(&9;div:eq(0)&9;).html(setting.over + &9;服务器超时,正在重试...&9;);
}
});
String.prototype.toCDB = function() {
return this.replace(/\s/g, &9;&9;).replace(/[\uff01-\uff5e]/g, function(str) {
return String.fromCharCode(str.charCodeAt(0) - 65248);
}).replace(/[“”]/g, &9;"&9;).replace(/[‘’]/g, "&9;").replace(/。/g, &9;.&9;);
};
// setting.time += Math.ceil(setting.timeMath.random()) - setting.time / 2;
setting.TiMu = [
filterImg(&9;.Cy_TItle .clearfix&9;).replace(/\s(\d+\.\d+分)$/, &9;&9;),
$(&9;[name^=type]:not([id])&9;).val() || &9;-1&9;,
$(&9;.cur a&9;).text().trim() || &9;无&9;,
$(&9;li .clearfix&9;).map(function() {
return filterImg(this);
})
];
var maximize=$(
&9;<div style="border: 2px dashed ED4C78; position: fixed; top: 0; right: 0; z-index: 99999; background-color: 00C9A7; overflow-x: auto;display:none;"> ▣ </div>&9;
).appendTo(&9;body&9;).click(function(){
$(setting.div).css("display","block");
GM_setValue("minimize","0");
$(maximize).css("display","none");
});
setting.div = $(
&9;<div style="border: 2px dashed 77DFF; width: 330px; position: fixed; top: 0; right: 0; z-index: 99999; background-color: EBF2FF; overflow-x: auto;">&9; +
&9;<span style="font-size: medium;"></span>&9; +
&9;<div style="font-size: medium;width:70%;display: inline-block;">正在搜索答案...</div>&9;+
&9;<div style="width:30%;display: inline-block;padding-right: 10px;box-sizing: border-box;text-align: right;"><minimize style="width:20px;font-size:16px;line-height: 12px;font-weight: bold;cursor: context-menu;user-select:none;">一</minimize></div>&9; +
&9;<div style="border-top: 1px solid 000;margin: 2px;overflow: hidden;font-weight:800;">MukeTool 超星网课助手 官网:http://muketool.com</div>&9; +
&9;<div id="cx-notice" style="border-top: 1px solid 000;border-bottom: 1px solid 000;margin: 4px 0px;overflow: hidden;">&9; + setting.notice + &9;</div>&9; +
&9;<button style="margin-right: 10px;">暂停答题</button>&9; +
&9;<button style="margin-right: 10px;&9; + (setting.jump ? &9;&9; : &9; display: none;&9;) + &9;">点击停止本次切换</button>&9; +
&9;<button style="margin-right: 10px;">重新查询</button>&9; +
&9;<button style="margin-right: 10px; display: none;">复制答案</button>&9; +
&9;<button>答题详情</button>&9; +
&9;<div style="max-height: 200px; overflow-y: auto;">&9; +
&9;<table border="1" style="font-size: 12px;">&9; +
&9;<thead>&9; +
&9;<tr>&9; +
&9;<th colspan="2">&9; + ($(&9;randomOptions&9;).val() == &9;false&9; ? &9;&9; : &9;<font color="red">本次考试的选项为乱序 脚本会选择正确的选项</font>&9;) + &9;</th>&9; +
&9;</tr>&9; +
&9;<tr>&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="&9; + (setting.jump ? &9; display: none;&9; : &9;&9;) + &9;">&9; +
&9;<tr>&9; +
&9;<th colspan="2">已关闭 本次自动切换</th>&9; +
&9;</tr>&9; +
&9;</tfoot>&9; +
&9;<tbody>&9; +
&9;<tr>&9; +
&9;<td colspan="2" 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() {
var num = setting.$btn.index(this);
if (num == -1) {
GM_setClipboard($(this).text());
} else if (num === 0) {
if (setting.loop) {
clearInterval(setting.loop);
delete setting.loop;
num = [&9;已暂停搜索&9;, &9;继续答题&9;];
} else {
setting.loop = setInterval(findTiMu, setting.time);
num = [&9;正在搜索答案...&9;, &9;暂停答题&9;];
}
setting.$div.html(function() {
return $(this).data(&9;html&9;) || num[0];
}).removeData(&9;html&9;);
$(this).html(num[1]);
} else if (num == 1) {
setting.jump = 0;
setting.$div.html(function() {
return arguments[1].replace(&9;即将切换下一题&9;, &9;未开启自动切换&9;);
});
setting.div.find(&9;tfoot&9;).add(this).toggle();
} else if (num == 2) {
location.reload();
} else if (num == 3) {
GM_setClipboard(setting.div.find(&9;td:last&9;).text());
} else if (num == 4) {
($(&9;.leftCard .saveYl&9;)[0] || $()).click();
} else if (num == 5) {
setting.tk_num++;
GM_setValue(&9;tk_num_1&9;,setting.tk_num);
setting.tk_num = GM_getValue(&9;tk_num_1&9;);
console.log(setting.tk_num);
parent.location.reload();
}
}).on(&9;click&9;,&9;minimize&9;, function() {
$(this).parent().parent().css("display","none");
GM_setValue("minimize","1");
$(maximize).css("display","block");
}).detach(setting.hide ? &9;&9; : &9;html&9;);
if(GM_getValue("minimize")=="1"){
$(setting.div).css("display","none");
$(maximize).css("display","block");
}
setting.$btn = setting.div.children(&9;button&9;);
setting.$div = setting.div.children(&9;div:eq(0)&9;);
$(document).keydown(function(event) {
if (event.keyCode == 38) {
setting.div.detach();
} else if (event.keyCode == 40) {
setting.div.appendTo(&9;body&9;);
}
});
if (setting.scale) _self.UEDITOR_CONFIG.scaleEnabled = false;
$.each(UE.instants, function() {
var key = this.key;
this.ready(function() {
this.destroy();
UE.getEditor(key);
});
});
setting.loop = setInterval(findTiMu, setting.time);
function findTiMu() {
GM_xmlhttpRequest({
method: &9;POST&9;,
url: setting.tiku + &9;v1/cxexam&9;,
headers: {
&9;Content-type&9;: &9;application/x-www-form-urlencoded&9;,
},
data: &9;question=&9; + encodeURIComponent(setting.TiMu[0]) + &9;&type=&9; + setting.TiMu[1] + &9;&id=&9; + $(&9;paperId&9;).val(),
timeout: setting.time,
onload: function(xhr) {
if (!setting.loop) {
} else if (xhr.status == 200) {
var obj = $.parseJSON(xhr.responseText) || {};
obj.answer = obj.data;
if (obj.code) {
var answer = String(obj.answer).replace(/&/g, &9;&&9;).replace(/<(?!img)/g, &9;<&9;),
que = setting.TiMu[0].match(&9;<img&9;) ? setting.TiMu[0] : setting.TiMu[0].replace(/&/g, &9;&&9;).replace(/</g, &9;<&9;);
obj.answer = /^http/.test(answer) ? &9;<img src="&9; + obj.answer + &9;">&9; : obj.answer;
setting.div.find(&9;tbody&9;).append(
&9;<tr>&9; +
&9;<td title="点击可复制">&9; + que + &9;</td>&9; +
&9;<td title="点击可复制">&9; + (/^http/.test(answer) ? obj.answer : &9;&9;) + answer + &9;</td>&9; +
&9;</tr>&9;
);
setting.copy && GM_setClipboard(obj.answer);
setting.$btn.eq(3).show();
fillAnswer(obj);
} else {
setting.$div.html(obj.answer || &9;服务器繁忙,正在重试...&9;);
}
setting.div.children(&9;span&9;).html(obj.msg || &9;&9;);
} else if (xhr.status == 403) {
var html = xhr.responseText.indexOf(&9;{&9;) ? &9;请求过于频繁,建议稍后再试&9; : $.parseJSON(xhr.responseText).data;
setting.$div.data(&9;html&9;, html).siblings(&9;button:eq(0)&9;).click();
} else {
setting.$div.text(&9;服务器异常,正在重试...&9;);
}
},
ontimeout: function() {
setting.loop && setting.$div.text(&9;服务器超时,正在重试...&9;);
}
});
}
function fillAnswer(obj, tip) {
var $input = $(&9;:radio, :checkbox&9;, &9;.Cy_ulBottom&9;),
str = String(obj.answer).toCDB() || new Date().toString(),
data = str.split(/|\x01|\|/),
opt = obj.opt || str,
btn = $(&9;.saveYl:contains(下一题)&9;).offset();
// $input.filter(&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)(,|$)/) && this.click();
} else if (this.value == &9;false&9;) {
data.join().match(/(^|,)(错误|否|错|×|F|wr)(,|$)/) && this.click();
} else {
index = setting.TiMu[3][index].toCDB() || new Date().toString();
index = $.inArray(index, data) + 1 || (setting.TiMu[1] == &9;1&9; && str.indexOf(index) + 1);
Boolean(index) == this.checked || this.click();
}
}).each(function() {
if (!/^A?B?C?D?E?F?G?$/.test(opt)) return false;
Boolean(opt.match(this.value)) == this.checked || this.click();
});
if (setting.TiMu[1].match(/^[013]$/)) {
tip = $input.is(&9;:checked&9;) || setting.none && (($input[Math.floor(Math.random()$input.length)] || $()).click(), &9; &9;);
} else if (setting.TiMu[1].match(/^(2|[4-9]|1[08])$/)) {
data = String(obj.answer).split(/|\x01|\|/);
tip = $(&9;.Cy_ulTk textarea&9;).each(function(index) {
index = (obj.code > 0 && data[index]) || &9;&9;;
UE.getEditor(this.name).setContent(index.trim());
}).length;
tip = (obj.code > 0 && data.length == tip) || setting.none && &9; &9;;
setting.len = str.lengthsetting.time / 10;
}
if (tip == &9; &9;) {
tip = &9;已执行默认操作&9;;
} else if (tip) {
tip = &9;自动答题已完成&9;;
} else if (tip === undefined) {
tip = &9;该题型不支持自动答题&9;;
} else {
tip = &9;未找到有效答案&9;;
}
if (btn) {
tip += setting.jump ? &9;,即将切换下一题&9; : &9;,未开启自动切换&9;;
setInterval(function() {
if (!setting.jump) return;
var mouse = document.createEvent(&9;MouseEvents&9;),
arr = [btn.left + Math.ceil(Math.random()80), btn.top + Math.ceil(Math.random()26)];
mouse.initMouseEvent(&9;click&9;, true, true, document.defaultView, 0, 0, 0, arr[0], arr[1], false, false, false, false, 0, null);
_self.event = $.extend(true, {}, mouse);
delete _self.event.isTrusted;
_self.getTheNextQuestion(1);
}, setting.len || Math.ceil(setting.timeMath.random())2);
} else {
setting.$btn.eq(1).hide();
tip = &9;答题已完成,请自行查看答题详情&9;;
}
setting.$div.data(&9;html&9;, tip).siblings(&9;button:eq(0)&9;).hide().click();
}
function filterImg(dom) {
return $(dom).clone().find(&9;img[src]&9;).replaceWith(function() {
return $(&9;<p></p>&9;).text(&9;&9;);
}).end().find(&9;iframe[src]&9;).replaceWith(function() {
return $(&9;<p></p>&9;).text(&9;&9;);
}).end().text().trim();
}