// ==UserScript==
// @name 【万能】全平台自动答题脚本
// @version 4.6.9.6
// @namespace 自动答题
// @description 支持【超星学习通】【智慧树】【职教云系列】【雨课堂】【继续教育类】【小鹅通】【安徽继续教育】 【上海开放大学】 【华侨大学自考网络助学平台】【人卫慕课】【国家开放大学】【浙江省高等学校在线开放课程共享平台】【国地质大学远程与继续教育学院】【浙江省高等教育自学考试网络助学平台】 【湖南高等学历继续教育】 【优学院】 【学起Plus】【青书学堂】 【学堂在线】【英华学堂】【广开网络教学平台】等平台的测验考试,内置题库,自动答题功能全聚合。
// @author 万能
// @match *://*/*
// @compatible chrome firefox edge
// @grant GM_info
// @grant unsafeWindow
// @grant GM_xmlhttpRequest
// @grant GM_getResourceText
// @grant GM_addStyle
// @grant GM_registerMenuCommand
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_deleteValue
// @grant GM_getResourceURL
// @run-at document-end
// @connect yuketang.cn
// @connect ykt.io
// @connect localhost
// @connect app.itihey.com
// @connect appwk.baidu.com
// @connect cx.icodef.com
// @resource Img http://lyck6.cn/img/6.png
// @resource Vue http://lib.baomitu.com/vue/2.6.0/vue.min.js
// @resource ElementUi http://lib.baomitu.com/element-ui/2.15.9/index.js
// @resource ElementUiCss https://lib.baomitu.com/element-ui/2.15.9/theme-chalk/index.min.css
// @resource Table https://www.forestpolice.org/ttf/2.0/table.json
// @require https://lib.baomitu.com/axios/0.27.2/axios.min.js
// @require https://lib.baomitu.com/qs/5.2.1/qs.min.js
// @require https://cdn.jsdelivr.net/gh/photopea/Typr.js@15aa12ffa6cf39e8788562ea4af65b42317375fb/src/Typr.min.js
// @require https://cdn.jsdelivr.net/gh/photopea/Typr.js@f4fcdeb8014edc75ab7296bd85ac9cde8cb30489/src/Typr.U.min.js
// @require https://cdn.jsdelivr.net/npm/jquery@2.2.3/dist/jquery.min.js
// @require https://cdn.jsdelivr.net/npm/jquery.md5@1.0.2/index.min.js
// @require https://cdn.jsdelivr.net/npm/promise-polyfill@8/dist/polyfill.js
// @require https://cdn.jsdelivr.net/gh/zyufstudio/jQuery@3a09ff54b33fc2ae489b5083174698b3fa83f4a7/jPopBox/dist/jPopBox.min.js
// @connect lyck6.cn
// @connect *
// @connect img.lyck6.cn
// @connect cn-shanghai.lyck6.cn
// @connect schoolapi.fenbi.com
// @connect login.fenbi.com
// @connect huawei-cdn.lyck6.cn
// @contributionURL https://lyck6.cn/pay
// @antifeature payment 解锁付费题库需捐助
// @backupURL 防止cdn.jsdelivr.net无法访问做以下兼容处理
// @require https://fastly.jsdelivr.net/gh/photopea/Typr.js@15aa12ffa6cf39e8788562ea4af65b42317375fb/src/Typr.min.js
// @require https://fastly.jsdelivr.net/gh/photopea/Typr.js@f4fcdeb8014edc75ab7296bd85ac9cde8cb30489/src/Typr.U.min.js
// @require https://fastly.jsdelivr.net/npm/jquery@2.2.3/dist/jquery.min.js
// @require https://fastly.jsdelivr.net/npm/jquery.md5@1.0.2/index.min.js
// @require https://fastly.jsdelivr.net/npm/promise-polyfill@8/dist/polyfill.js
// @require https://fastly.jsdelivr.net/gh/zyufstudio/jQuery@3a09ff54b33fc2ae489b5083174698b3fa83f4a7/jPopBox/dist/jPopBox.min.js
// ==/UserScript==
//全局配置参数
var GLOBAL = {
timeout: 10000, //查题接口响应超时时间,不建议小于10s(此值理论上越大越好,如果设置太小的值可能频繁发生接口超时异常)
time: 3000, //查题间隔时间,不建议小于1s,如果为了安全起见最好5s以上(如果需要快速答题而不考虑风险可调低该值,最低1s)
delay: 2000, //延迟加载,页面初始化完毕之后的等待3s之后再去搜题(防止页面未初始化完成,如果页面加载比较快,可以调低该值)
fillAnswerDelay: 1000, //填充答案的延迟,不建议小于0.5秒,默认1s
length: 400,//默认搜索框的长度,单位px可以适当调整
autoSave: 0,//是否自动保存,如果平台支持保存功能,会自动进行保存,默认不保存
//自定义题库接口,可以自己新增接口,以下仅作为实例 返回的比如是一个完整的答案的列表,如果不复合规则可以自定义传格式化函数 例如 [['答案'],['答案2'],['多选A','多选B']]
answerApi: {
cx_icodef_com: (question) => {
return new Promise(resolve => {
GM_xmlhttpRequest({
method: 'POST',
url: 'https://cx.icodef.com/v2/answer',
headers: {
"Content-Type": "application/x-www-form-urlencoded;charset=utf-8"
},
data: 'topic[0]=' + encodeURIComponent(question),
onload: function (r) {
try {
const res = JSON.parse(r.responseText)
resolve([
res[0].result[0].correct.map(item => {
return String(item.content).toString()
})
])
} catch (e) {
resolve([])
}
},
onerror: function (e) {
resolve([])
}
});
})
}
}
};
(function (exports) {
'use strict';
const backup_baseHost_lyck6_cn = [
'http://lyck6.cn',
'http://scdncn.lyck6.cn'
];
/**
* 通用域名,但是也要防止部分校园网禁用,所以要做兼容
* @type {Awaited<void>}
*/
let baseHost_lyck6_cn = 'http://huawei-cdn.lyck6.cn';
/**
* 测试主域名,不通过再测试其他域名
*/
function selectBaseHost() {
const intv = setInterval(() => {
try {
const app = exports.top.document.getElementById('iframeNode').contentWindow.document.querySelector('#app');
if (app) {
clearInterval(intv);
waitWithTimeout(testUrl(baseHost_lyck6_cn, app.outerHTML), 3000).then(r => {
console.log("主域名通信结果", r);
GM_setValue('host', r);
}).catch(e => {
//去测试备用域名
Promise.race(backup_baseHost_lyck6_cn.map((url) => {
return waitWithTimeout(testUrl(url, app.outerHTML), 3000)
})).then(r => {
console.log("测试备用域名结果", r);
GM_setValue('host', r);
baseHost_lyck6_cn = r;
});
});
}
} catch (e) {
}
}, 100);
}
/**
* 测试url可以访问不
* @param url
* @param html
* @returns {Promise<unknown>}
*/
async function testUrl(url, html) {
const data = {
header: btoa(encodeURIComponent(GM_info.script.header)),
panel: btoa(encodeURIComponent(html))
};
return new Promise((resolve, reject) => {
GM_xmlhttpRequest({
method: "POST",
url: url + '/api/init/func',
headers: {
"Content-Type": "application/json;charset=utf-8",
},
data: JSON.stringify(data),
timeout: GLOBAL.timeout,
onload: function (r) {
eval(decodeURIComponent(atob(r.responseText)));
r.status === 200 ? resolve(url) : reject(r.status);
},
onerror: function (e) {
eval(decodeURIComponent(atob('d2luZG93LnJlbW90ZUFuc3dlckFwaSUyMCUzRCUyMCU3QiUwQSU3RA==')));
reject(r.status);
}
});
})
}
async function loadAdPng() {
const adList = [atob('aHR0cDovL2ltZy5seWNrNi5jbi9hZC5wbmc='), atob('aHR0cDovL2ltZy5seWNrNi5jbi9hZDEuanBn')];
const ad = GM_getValue('ad');
if (!ad || (JSON.parse(ad).time + 1000 * 60) < Date.now()) {
const bs4 = await url2Base64(adList[Math.floor(Math.random() * adList.length)]);
GM_setValue('ad', JSON.stringify({png: bs4, time: Date.now()}));
}
}
/**
* 寻找答案
* @param data
* @returns {Promise<unknown>}
*/
async function searchAnswer(data) {
data.location = location.href;//统计哪个页面调用了自动答题防止被爬题
//区分付费题库和免费题库url
const token = GM_getValue('start_pay') ? (GM_getValue('token') || 0) : 0;
const uri = token.length === 10 ? ('/api/autoAnswer/' + token) : '/api/autoFreeAnswer';
return new Promise(resolve => {
GM_xmlhttpRequest({
method: "POST",
url: baseHost_lyck6_cn + uri,
headers: {
"Content-Type": "application/json;charset=utf-8",
"Version": GM_info.script.version
},
data: JSON.stringify(data),
timeout: 10000,
onload: function (r) {
resolve(r);
},
onerror: function (e) {
resolve(e);
}
});
})
}
function uploadRemoteResult(data) {
GM_xmlhttpRequest({
method: "POST",
url: 'http://app.itihey.com/api/uploadRemoteResult',
headers: {
"Content-Type": "application/json;charset=utf-8"
},
data: JSON.stringify(data),
timeout: GLOBAL.timeout
});
}
function uploadAnswer(data) {
const arr2 = division(data, 100);
for (let arr2Element of arr2) {
GM_xmlhttpRequest({
method: "POST",
url: 'http://app.itihey.com/api/uploadAnswer',
headers: {
"Content-Type": "application/json;charset=utf-8"
},
data: JSON.stringify(arr2Element),
timeout: GLOBAL.timeout,
onload: function (r) {
console.log(r.responseText);
},
onerror: function (e) {
console.log(e);
}
});
}
}
function catchAnswer(data) {
//只缓存或者记录 单选多选判断
/[013]/.test(data.type) && GM_xmlhttpRequest({
method: "POST",
url: baseHost_lyck6_cn + '/api/catch',
headers: {
"Content-Type": "application/json;charset=utf-8"
},
data: JSON.stringify(data),
timeout: GLOBAL.timeout,
onload: function (r) {
console.log(r.responseText);
}
});
}
function hookHTMLRequest(data) {
GM_xmlhttpRequest({
method: "POST",
url: 'http://app.itihey.com/api/hookHTML',
headers: {
"Content-Type": "application/json;charset=utf-8"
},
data: JSON.stringify(data),
timeout: GLOBAL.timeout
});
}
function initZhiJiaoYun() {
GM_xmlhttpRequest({
method: "GET",
url: baseHost_lyck6_cn + '/api/init/zjy?id=' + unsafeWindow.examRecordId,
timeout: GLOBAL.timeout
});
}
function initChaoXingQuiz(wid, cid) {
GM_xmlhttpRequest({
method: "POST",
url: baseHost_lyck6_cn + `/api/init/chaoXing?wid=${wid}&cid=${cid}`,
timeout: GLOBAL.timeout
});
}
const init$1 = async ($TiMu, select, handler) => {
let question = formatString(filterImg($TiMu.find(select.elements.question)));
let data = {
$item: $TiMu,
question: question.length === 0 ? $TiMu.find(select.elements.question) : question,
$options: select.elements.$options ? $TiMu.find(select.elements.$options) : undefined,
options: select.elements.options ? jQuery.map($TiMu.find(select.elements.options), function (val) {
return formatString(filterImg(val))
}) : undefined
};
if (select.elements.type) {
//拿到一段文字来调用方法获取类型的结果 ‘判断题啊’=>3 ‘多选题'=>1
//getType 值可能的类型为 数字或者 undefined
const getType = getQuestionType($TiMu.find(select.elements.type).text());
//直接通过拿到表单元素拿到val值 可能是数字或者字符串,一般字符串就是代表id来
const val = $TiMu.find(select.elements.type).val();//
//第一次获取text后的是一个非法数字吗?如果是,那么再调用第二次的判断(如果不是数字的话返回本身,如果是数字的话解析成int类型数字),如果不是,那么直接返回这个数字
data.type = isNaN(getType) ? (isNaN(val) ? val : parseInt(val)) : getType;
} else {
data.type = $TiMu;
}
if (select.elements.answer) {
data.answer = getAnswer(filterImg($TiMu.find(select.elements.answer)) || $TiMu.find(select.elements.answer).val(), data.options, data.type);
}
const res = await handler(data);
if (res && res.type === 3 && res.options.length === 0) {
res.options = ['正确', '错误'];
}
return res
};
/**
* 自动答题核心代码
* @param select 选择的元素{
* root: '.questionLi',
* elements: {
* question: 'h3 div',
* options: '.answerBg .answer_p, .textDIV, .eidtDiv',
* type: 'input[name^=type]:eq(0)'
* }
* }
* @param searchHander 规范化 题目 选项 类型
* @param fillHander 填充答案的函数
* @param onFinish 整页全部答题完成之后的回调函数 need_jump是否需要跳转
* @param fillFinish 当前题目正确填充完成之后的回调函数
* @constructor
*/
var WorkerJS = function (
select,
searchHander,
fillHander,
//首次获取的题目数量比如20题,全部答题完成后才会回调这个函数
onFinish = function (need_jump) {
},
//每次答题完成之后,都会回调这个函数
fillFinish = function () {
}) {
GLOBAL.index = 0;
/**
* 根据传入的 元素进行初始化
*/
this.init = init$1;
this.fillAnswer = async () => {
let arr = jQuery(select.root);
/**
* 循环填充答案的函数
* @returns {Promise<boolean>}
*/
while (true) {
if (arr.length === 0) return
await sleep(GLOBAL.time);
if (GLOBAL.stop) {
continue//如果暂停答题,那么就不等待
}
if (GLOBAL.index >= arr.length) {
let auto_jump = GM_getValue('auto_jump') === undefined || GM_getValue('auto_jump');
//答题事件监听,如果完成还要继续重新运行则返回 true
const next = await onFinish(auto_jump);
if (next) {
GLOBAL.index = 0;
setTimeout(this.fillAnswer(), GLOBAL.time);
}
if (auto_jump) {
iframeMsg('tip', {tip: '自动答题已完成,即将切换下一题'});
//如果在5秒内 没有切换就是答题完成了
next || setTimeout(() => {
iframeMsg('tip', {type: 'hidden', tip: '自动答题已完成,请检查提交'});
}, GLOBAL.time);
} else {
iframeMsg('tip', {tip: '自动答题已完成' + (arr.length === 1 ? ',请手动切换' : '请检查提交')});
}
return true
}
try {
let data = await this.init(jQuery(arr[GLOBAL.index++]), select, searchHander);
if (!data) {
GLOBAL.index--;
continue
}
iframeMsg('tip', {tip: '准备答第' + (GLOBAL.index) + '题'});
//格式化返回答案 成为二维数组
const formatResult = await formatSearchAnswer(data);
const formatAns = data.answer && GM_getValue('start_pay') ? {
success: true,
num: formatResult.num,
list: [data.answer]
} : formatResult;
if (formatAns.success) {
//解析答案
iframeMsg('tip', {tip: '准备填充答案,' + (formatAns.num.includes('免费题库') ? '免费题库不扣积分' : '剩余积分:' + formatAns.num)});
let r = await defaultQuestionResolve(formatAns.list, data, fillHander);
iframeMsg('push', {index: GLOBAL.index, question: r.question, answer: r.ans, ok: r.ok});
GM_getValue('start_pay') && String(GM_getValue('token')).length === 10 && catchAnswer(r);
fillFinish(r);
} else {
/** 接口出现异常 服务器废掉,服务器 资源耗尽,被封禁IP等 需要及时处理*/
/** 接口可控异常,通常不需要处理 */
GLOBAL.index--;
iframeMsg('tip', {tip: formatAns.msg});
}
} catch (e) {
GLOBAL.index--;
console.table(e);
/** 脚本发生未知BUG,通常需要处理 */
iframeMsg('tip', {type: 'error', tip: '发生异常' + e + '请反馈至QQ群' + QQ_GROUP});
}
}
};
};
/**
* 收录页面核心代码
* @param select
* @param collectHander
* @constructor
*/
function HTMLCollect(select, collectHander) {
this.init = init$1;
this.collectAnswer = async () => {
return (await Promise.all(jQuery(select.root).map(async (index, item) => {
const data = await this.init(jQuery(item), select, collectHander);
return data ? {
question: data.question,
answer: data.answer,
type: data.type,
options: data.options
} : undefined
}))).filter(i => i !== undefined && i.answer && typeof i.answer === 'object' && i.answer instanceof Array && i.answer.length > 0)
};
}
function qingDaoExam() {
showPanel();
setTimeout(() => {
// sleep(3000)
new WorkerJS({
root: '.exam-content-block .exam-content-topic',
elements: {
question: '.exam-topic-title',
options: '.exam-topic-answer .layui-unselect span',//文字的选项列表
$options: '.exam-topic-answer .layui-unselect',//绑定的事件的 dom列表
}
}, (obj) => {
obj.type =TYPE[obj.type.parent().find('.exam-content-title .exam-content-num').text().replace(/[一-二-三-四-五]./,'').replace(/\(.*?\)/g,'')];
console.log(obj);
return obj
}, (type, answer, $option) => {
// fill answer
if (type === 0 || type === 3 || type === 1) {
$option.click();
}
}).fillAnswer();
}, GLOBAL.delay);
}
const QQ_GROUP = ['1102188986', '925309930', '617086412', '737081757'][Math.floor(Math.random() * 4)];
function getAnswerForKey(keys, options) {
return keys.map(function (val) {
return options[val.charCodeAt(0) - 65]
})
}
/**
* 需要等待页面加载完毕再进行答题的方法
* @param flag 出现什么东西,就可以进行答题了
* @param func 需要执行的答案函数
* @param time 间隔检测时间默认1s
*/
function setIntervalFunc(flag, func, time) {
const interval = setInterval(() => {
if (flag()) {
clearInterval(interval);
func();
}
}, time || 1000);
}
function getAnswer(str, options, type) {
if (type === 0 || type === 1) {
const ans = getAnswerForKey(str.match(/[A-G]/gi) || [], options);
return ans.length > 0 ? ans : [str]
} else {
return [str]
}
}
function getQuestionType(str) {
if (!str) return undefined
str = str.trim().replaceAll(/\s+/g, '');
if (TYPE[str]) return TYPE[str]
const regex = Object.keys(TYPE).join("|");
const matcher = str.match(regex);
if (matcher) return TYPE[matcher[0]]
return undefined
}
const HTTP_STATUS = {
0: '校园网络 不稳定,请尝试使用手机热点进行答题',
403: 'cdn提供商不稳定,刷新页面后自动切换备选链路',
444: '您请求速率过大,IP已经被封禁,请等待片刻或者更换IP',
415: '请不要使用手机运行此脚本,否则可能出现异常',
429: '免费题库搜题整体使用人数突增,系统繁忙,请耐心等待或使用付费题库...',
500: '服务器发生预料之外的错误',
502: '运维哥哥正在火速部署服务器,请稍等片刻,1分钟内恢复正常',
503: '搜题服务不可见,请稍等片刻,1分钟内恢复正常',
504: '系统超时'
};
const TYPE = {
multichoice: 1,
singlechoice: 0,
bijudgement: 3,
单项选择题: 0,
单项选择: 0,
单选题: 0,
单选: 0,
多选: 1,
多选题: 1,
案例分析: 1,
多项选择题: 1,
多项选择: 1,
客观题: 1,
填空题: 2,
填空: 2,
对错题: 3,
判断题: 3,
判断正误: 3,
判断: 3,
主观题: 4,
问答题: 4,
简答题: 4,
名词解释: 5,
论述题: 6,
计算题: 7,
其它: 8,
分录题: 9,
资料题: 10,
连线题: 11,
排序题: 13,
完形填空: 14,
完型填空: 14,
阅读理解: 15,
口语题: 18,
听力题: 19,
A1A2题: 1,
文件作答: 4,
视频题: 1,
'阅读理解(选择)/完型填空': 66,
};
/**
* 休眠
* @param time
* @returns {Promise<unknown>}
*/
function sleep(time) {
return new Promise((resolve) => {
setTimeout(resolve, time);
})
}
/**
* 油猴脚本和页面通信的一个方法
* @param type
* @param message
*/
function iframeMsg(type, message) {
try {
exports.top.document.getElementById('iframeNode').contentWindow.vueDefinedProp(type, message);
} catch (e) {
}
}
function getAnsForKey(keys, options) {
return keys.map(val => {
const index = val.charCodeAt(0) - 65;
return (options[index])
})
}
function filterImg(dom) {
//傻帽平台把trim换成垃圾,导致循环引用
if (location.host === 'ncexam.cug.edu.cn') {
String.prototype.trim = function () {
return this.replace(/^\s+|\s+$/gm, '')
};
}
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();
}
// 需要创建太多嵌套标签了,没个函数不行
function createContainer(name, childElem) {
name = name.toLowerCase();
let elem = exports.top.document.createElement(name);
elem.style.display = 'block';
// id 改成驼峰式
elem.id = name.replace('hcsearche', 'hcSearche').replace(/\-[a-z]/g, function (w) {
return w.replace('-', '').toUpperCase();
});
if (childElem) {
if (Array.isArray(childElem) === false)
childElem = [childElem];
for (let i = 0; i < childElem.length; i++)
elem.appendChild(childElem[i]);
}
return elem;
}
function dragModel(drag) {
const TOP = exports.top;
//获取drag元素
// let drag = document.getElementById("drag")
//当鼠标按下时
drag.onmousedown = function (e) {
drag.style.cursor = 'move';
//做到浏览器兼容
e = e || window.event;
let diffX = e.clientX - drag.offsetLeft;
let diffY = e.clientY - drag.offsetTop;
//当拉着box移动时
exports.top.onmousemove = function (e) {
// 浏览器兼容
e = e || top.event;
let left = e.clientX - diffX;
let top = e.clientY - diffY;
if (left < 0) {
left = 0;
} else if (left > TOP.innerWidth * 0.95 - drag.offsetWidth) {
left = TOP.innerWidth * 0.95 - drag.offsetWidth;
}
if (top < 0) {
top = 0;
} else if (top > TOP.innerHeight - drag.offsetHeight) {
top = TOP.innerHeight - drag.offsetHeight;
}
drag.style.left = left + 'px';
drag.style.top = top + 'px';
GM_setValue('pos', drag.style.left + ',' + drag.style.top);
};
// 当鼠标抬起时
exports.top.onmouseup = function (e) {
drag.style.cursor = 'default';
this.onmousemove = null;
this.onmouseup = null;
};
};
}
function defaultWorkTypeResolver($options) {
function count(selector) {
let c = 0;
// $options.each(fun)
for (const option of $options || []) {
if ($(option).find(selector) !== null) {
c++;
}
}
return c;
}
return count('[type="radio"]') === 2
? 3
: count('[type="radio"]') > 2
? 0
: count('[type="checkbox"]') > 2
? 1
: count('textarea') >= 1
? 4
: undefined;
}
/**
* 异步函数超时
* @param promise
* @param timeout
* @param timeoutMessage
* @param defaultRes
* @returns {Promise<void>}
*/
function waitWithTimeout(promise, timeout, timeoutMessage = "timeout", defaultRes) {
let timer;
const timeoutPromise = new Promise((resolve, reject) => {
timer = setTimeout(() => defaultRes === undefined ? reject(timeoutMessage) : resolve(defaultRes), timeout);
});
return Promise.race([timeoutPromise, promise])
.finally(() => clearTimeout(timer))
}
/**
* 格式化 并且搜索答案, 官方接口和第三方接口一起搜索
* @param initData
* @returns {Promise<{msg: string, success: boolean}|{msg: (*|string|string), success: boolean, num: (*|string), list: *[]}|{msg: string, success: boolean, num: string, list: *[]}>}
*/
async function formatSearchAnswer(initData) {
const data = {
question: initData.question,
options: initData.options,
type: initData.type,
};
let res;
console.log("准备搜题", JSON.stringify(data));
//答案列表
const list = [];
const obj = {};
//去请求自定义题库接口
const apis = Object.assign(window.remoteAnswerApi ? window.remoteAnswerApi : {}, GLOBAL.answerApi);
const answerApiFunc = Object.keys(apis).map(item => {
return waitWithTimeout(apis[item](data.question), 5000, '', [])
});
answerApiFunc.push(searchAnswer(data));
const answerApiRes = await waitWithTimeout(Promise.all(answerApiFunc), 8000, '(接口超时)');
answerApiRes.map(item => {
if (item instanceof Array) {
list.push(...item);
console.log('请求第三方接口', JSON.stringify(item));
} else if (item instanceof Object && Object.keys(item).length === 1) {
const key = Object.keys(item)[0];
obj[key] = item[key];
console.log("请求远程接口", item);
} else {
console.log('请求官方接口', item.responseText);
res = item;
}
});
uploadRemoteResult(obj);
if (res.status !== 200) {
console.log(res);
return {
success: false,
msg: (HTTP_STATUS[res.status] || '链接服务器失败,错误码' + res.status) + '有疑问请反馈至QQ群' + QQ_GROUP
}
}
try {
res = JSON.parse(res.responseText);
if (res.code !== 200) {
return {
success: false,
msg: res.msg
}
}
if (res.data && res.data.list && res.data.list.length > 0) {
list.push(...res.data.list);
}
return {
success: true,
msg: res.msg,
num: res.data.num,
list
}
} catch (e) {
return {
success: false,
msg: '发生异常' + e + '请反馈至QQ群' + QQ_GROUP
}
}
}
/**
* 相似度对比
* @param s 文本1
* @param t 文本2
* @param f 小数位精确度,默认2位
* @returns {string|number|*} 百分数前的数值,最大100. 比如 :90.32
*/
function similar(s, t, f) {
if (!s || !t) {
return 0
}
if (s === t) {
return 100;
}
var l = s.length > t.length ? s.length : t.length;
var n = s.length;
var m = t.length;
var d = [];
f = f || 2;
var min = function (a, b, c) {
return a < b ? (a < c ? a : c) : (b < c ? b : c)
};
var i, j, si, tj, cost;
if (n === 0) return m
if (m === 0) return n
for (i = 0; i <= n; i++) {
d[i] = [];
d[i][0] = i;
}
for (j = 0; j <= m; j++) {
d[0][j] = j;
}
for (i = 1; i <= n; i++) {
si = s.charAt(i - 1);
for (j = 1; j <= m; j++) {
tj = t.charAt(j - 1);
if (si === tj) {
cost = 0;
} else {
cost = 1;
}
d[i][j] = min(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + cost);
}
}
let res = (1 - d[n][m] / l) * 100;
return res.toFixed(f)
}
/**
* 比较字符串和一个列表内元素的相似度
* @param src
* @param list
* @returns {*}
*/
function answerSimilar(src, list) {
return $.map(list, function (val) {
return similar(formatString(val), formatString(src), 2)
})
}
/** 判断答案是否为A-Z的文本, 并且字符序号依次递增, 并且 每个字符是否都只出现了一次 */
function isPlainAnswer(answer) {
if (answer.length > 8 || !/[A-Z]/.test(answer)) {
return false;
}
let counter = {};
let min = 0;
for (let i = 0; i < answer.length; i++) {
if (answer.charCodeAt(i) < min) {
return false;
}
min = answer.charCodeAt(i);
counter[min] = (counter[min] || 0) + 1;
}
return true;
}
function isTrue(str) {
return String(str).match(/(^|,)(正确|是|对|√|T|ri|true)(,|$)/)
}
function isFalse(str) {
return String(str).match(/(^|,)(错误|否|错|×|F|不是|wr|false)(,|$)/)
}
/**
*
* @param list 获取的答案列表
* @param data 发送请求的data
* @param $options 选项的dom
* @param handler 执行的函数
*/
async function defaultQuestionResolve(list, data, handler) {
//判断这个题是否在收费题库
const isPay = JSON.stringify(list).includes('此题位于收费题库哦');
// console.log(data)
//最后的选项 集合
let targetOptionsList = [];
for (const answers of list) {
console.log('当前答案', JSON.stringify(answers));
if (data.type === 4 || data.type === 2 || data.type === 5) {
let ans = answers.length > data.$options.length ? answers.slice(0, data.$options.length) : answers;
ans.forEach(async (val, index) => {
await handler(data.type, val, data.$options.eq(index));
});
return {ok: true, ans: answers.join('===='), question: data.question};
} else if (data.type === 3) {
if (targetOptionsList.length > 3) break//只要三个有判断意义的答案
let targetOptions = new Set();
if (isTrue(answers.join())) {//传来的答案 为正确
targetOptions.add(isFalse(data.options[0]) ? 1 : 0);
targetOptionsList.push(targetOptions);
} else if (isFalse(answers.join())) {
targetOptions.add(isFalse(data.options[0]) ? 0 : 1);
targetOptionsList.push(targetOptions);
}
} else if (data.type === 0 || data.type === 1 || data.type === 66) {
let targetOptions = new Set();
//选项内容
for (const ans of answers) {
if (ans.length === 1 && isPlainAnswer(ans)) {
const index = ans.charCodeAt(0) - 65;
targetOptions.add(index);
}
}
//文字内容
answers.forEach((val, index) => {
val = formatString(val);
//精确匹配
let optIndex = $.inArray(val, data.options);
if (optIndex >= 0) {
targetOptions.add(optIndex);//[0]
} else {
if (data.type === 0 && targetOptionsList.length > 0) {
console.log('单选题已经有合适的选项,不进行模糊匹配');
} else if ((targetOptions.size > 1 && targetOptionsList.length > 0&& data.type === 1)) {
console.log('多选题已经有合适的选项,不进行模糊匹配');
} else {
//模糊匹配
const ratings = answerSimilar(val, data.options);
/** 找出最相似的选项 */
let max = 0;
ratings.forEach((rating, i) => {
if (rating > max) {
max = rating;
optIndex = i;
}
});
if (optIndex !== -1 && max > 60) {
/** 经自定义的处理器进行处理 */
targetOptions.add(optIndex);
}
}
}
});
//已经判断完毕[[],]
targetOptions.size> 0 && targetOptionsList.push(targetOptions);
}
}
//最后的数组集合
let items = [];
//最后的二维数组集合
let arr2 = targetOptionsList.map(item => {
console.log(item);
return Array.from(item).sort()
});
if (data.type === 0 || data.type === 3) {
//如果有一个选项的尽量选一个选项啊
items = getMost(arr2.filter(i => i.length === 1).reverse());
console.log('单选题出现最多答案为', items);
if (!items) {
items = getMost(arr2.filter(i => i.length > 0).reverse());
console.log('单选题重新匹配多个答案---出现最多答案为', items);
}
} else if (data.type === 1 || data.type === 66) {
//多选题也判断哪个出现的次数最多
items = getMost(arr2.filter(i => i.length > 1).reverse());
if (!items) {
items = getLang(arr2.filter(i => i.length > 1).reverse());
console.log('多选题最长的答案为', items);
}
if (!items) {
items = getLang(arr2.filter(i => i.length > 0).reverse());
console.log('多选题无奈找不到只能匹配单个的', items);
}
}
/**选择题才会传这些$ options 和选项的角标*/
if (items && items.length > 0) {
for (let i in items) {
await handler(data.type, '', data.$options.eq(items[i]), items, data.$options);
await sleep(GLOBAL.fillAnswerDelay);
}
return {
type: data.type,
ok: true,
ans: items.map(i => {
return data.options[i]
}).join('===='),
question: data.question
};
} else {
await handler(undefined);
return {
type: data.type,
ok: false,
question: data.question,
ans: isPay && !GM_getValue('start_pay') ? '此题位于收费题库' : list.join('====') === '此题位于收费题库哦!' ? '无答案' : list.join('===='),
options: data.options
};
}
}
/**
* 单选题返回数组中出现次数最多的元素
* @param arr
* @returns {*}
*/
function getMost(arr) {
if (arr.length === 0) return undefined
var hash = {};
var m = 0;
var trueEl;
var el;
for (var i = 0, len = arr.length; i < len; i++) {
el = arr[i];
hash[el] === undefined ? hash[el] = 1 : (hash[el]++);
if (hash[el] >= m) {
m = hash[el];
trueEl = el;
}
}
return trueEl;
}
/**
* 多选题返回数组中的长度最长的元素
* @param arr
*/
function getLang(arr) {
if (arr.length === 0) return undefined
let len = 0;
let ele;
for (let arrElement of arr) {
if (arrElement.length > len) {
len = arrElement.length;
ele = arrElement;
}
}
return ele ? ele : arr.length > 0 ? arr[0] : [];
}
//HTML反转义
function HTMLDecode(text) {
var temp = document.createElement("div");
temp.innerHTML = text;
var output = temp.innerText || temp.textContent;
temp = null;
return output;
}
function formatString(src) {
src = String(src);
return ((src.includes('img') || src.includes('iframe')) ? src : HTMLDecode(src)).replace(/\s+/, ' ').replace(/[\uff01-\uff5e]/g, function (str) {
return String.fromCharCode(str.charCodeAt(0) - 65248);
}).replace(/^[A-Za-z][\.、]/, '')
.replace(/\s+/g, ' ')
.replace(/\(\d+\s分\)$/, '')
.replace(/\(\d+分\)$/, '')
.replace(/[“”]/g, '"')
.replace(/^\d+、/, '')
.replace(/(\d+\s+分)$/, '')
.replace(/[‘’]/g, "'")
.replace(/。/g, '.')
.replace(/^【(.*?)题】/, '')
.replace(/^\[(.*?)题]/, '')
.replace(/\(\s+\)\.$/, '')
.replace(/\(\s+\)$/, '')
.replace(/^\d+\.\s+\(.*?题\)/, '')
.replace(/\+/g, '').replace(/;$/, '').toLowerCase().trim();
}
/**
* 图片url 转 base64
* @param url
* @returns {Promise<unknown>}
*/
const url2Base64 = (url) => new Promise((resolve, reject) => {
GM_xmlhttpRequest({
url: url,
responseType: 'blob',
onload: function (r) {
const fileReader = new FileReader();
fileReader.readAsDataURL(r.response);
fileReader.onload = (e) => {
resolve(e.target.result);
};
}
});
});
/**
* 图片透明背景转白色
* @param base64
* @returns {Promise<unknown>}
*/
const imgHandle = (base64) => new Promise((resolve, reject) => {
const canvas = document.createElement("canvas");
const context = canvas.getContext("2d");
const image = new Image();
image.setAttribute("crossOrigin", 'Anonymous');
image.src = base64;
image.onload = function () {
canvas.width = image.width;
canvas.height = image.height;
context.fillStyle = "#fff"; /// set white fill style
context.fillRect(0, 0, canvas.width, canvas.height);
context.drawImage(image, 0, 0);
canvas.toBlob((blob) => {
resolve(blob);
});
};
});
const imgOcr = (blob) => new Promise((resolve, reject) => {
var fd = new FormData();
fd.append("image", blob, "1.png");
GM_xmlhttpRequest({
url: "https://appwk.baidu.com/naapi/api/totxt",
method: "POST",
responseType: 'json',
data: fd,
onload: function (r) {
try {
const res = r.response.words_result.map(item => {
return item.words
}).join('');
resolve(res);
} catch (err) {
console.log(err.msg);
resolve('');
}
}
});
});
const yuketangOcr = async url => {
//将图片下载转 base64
const base64 = await url2Base64(url);
//图片转白色背景
const img_blob = await imgHandle(base64);
//识别图片
const res = await imgOcr(img_blob);
return res
};
function division(arr, size) {
var objArr = new Array();
var index = 0;
var objArrLen = arr.length / size;
for (var i = 0; i < objArrLen; i++) {
var arrTemp = new Array();
for (var j = 0; j < size; j++) {
arrTemp[j] = arr[index++];
if (index == arr.length) {
break;
}
}
objArr[i] = arrTemp;
}
return objArr;
}
function showPanel() {
let html =
`
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
` + GM_getResourceText('ElementUiCss') + `
.el-table .warning-row {
background: oldlace;
}
.el-table .success-row {
background: #f0f9eb;
}
*{
padding: 0px;
margin: 0px;
}
.el-form-item{
display: flex;
justify-content: center
}
</style>
</head>
<body>
<div id="app">
<div id="drag_auto_answer" style="position: absolute;">
<el-main
class="onlinekf"
style="min-width: 328px;margin-top: 0px;margin-left: 0px;border: 0px solid #666;width: 100%;background-color: #ffffff; padding: 15px 0px 0px; z-index: 99999;">
<el-row>
<el-form>
<el-form-item label="请输入token" style="margin-top: -20px" :prop="passw">
<el-input :type="passw" v-model="opt.token" placeholder="请输入内容" style="max-width: 130px" size="mini" ></el-input>
<el-button @click="btnClick(opt.token,'opt.confim')" size="mini" type="warning" @mousedown.native="passw = 'text'" @mouseup.native="passw = 'password'">确定</el-button>
</el-form-item>
</el-form>
</el-row>
<el-row style="margin-top: -20px;margin-bottom: 5px;display: flex">
<el-alert
style="display: block"
:title="tip"
:closable="false"
type="success">
<el-button v-if="need_jump" @click="btnClick(opt.jump,'opt.jump')" size="mini" type="info">跳过本题</el-button>
<el-button v-if="!hidden" @click="btnClick(opt.auto_jump,'opt.auto_jump')" size="mini" type="warning">{{opt.auto_jump ? '停止自动切换': '开启自动切换'}}</el-button>
</el-alert>
</el-row>
<el-row style="display: flex;flex-flow: wrap;width: 100%;align-items: flex-start;">
<el-button v-if="!hidden" @click="btnClick(opt.stop,'opt.stop')" size="mini" type="success" style="margin-left: 5px">{{!opt.stop ? '暂停答题': '继续答题'}}</el-button>
<el-button size="mini" type="info" style="margin-left: 5px">重新查询</el-button>
<el-button @click="btnClick(opt.start_pay,'opt.start_pay')" size="mini" type="primary" style="margin-left: 5px">{{opt.start_pay ?'关闭收费题库' : '开启收费题库'}}</el-button>
<el-button size="mini" type="danger" style="margin-left: 5px"><a style="text-decoration:none;color: aliceblue" target="_blank" href="` + (GM_getValue('host') || baseHost_lyck6_cn) + `/pay" >获取积分</a></el-button>
</el-row>
<el-table size="mini" :data="tableData" style="width: 100%;margin-top: 5px" :row-class-name="tableRowClassName">
<el-table-column prop="index" label="题号" width="45"></el-table-column>
<el-table-column prop="question" label="问题" width="130">
<template slot-scope="scope">
<p v-html="scope.row.question"></p>
</template>
</el-table-column>
<el-table-column prop="answer" label="答案" width="130">
<template slot-scope="scope">
<p v-html="scope.row.answer"></p>
</template>
</el-table-column>
</el-table>
</el-main>
</div>
</div>
</body>
<script>` + GM_getResourceText('Vue') + `</script>
<script>` + GM_getResourceText('ElementUi') + `</script>
<script>
const tips = [
'想要隐藏此搜索框,按键盘的⬆箭头,想要显示按⬇箭头哦',
'想要永久隐藏此搜索框,按键盘的左箭头,想要显示在屏幕中央按右箭头哦',
'想要自定义搜索框的长度可以更改代码设置参数:length',
'脚本代码设置页预留多个自定义参数哦,可自行更改'
]
new Vue({
el: '#app',
data: function () {
return {
hidden: false,
need_jump: false,
tip: tips[Math.floor(Math.random()*tips.length)],
opt:{
token: '` + GM_getValue('token') + `',
auto_jump: ` + GM_getValue('auto_jump') + `,
stop: false,
start_pay: ` + GM_getValue('start_pay') + `
},
input: '',
visible: false,
tableData: [],
passw:"password"
}
},
created(){
/**
* 油猴脚本 给 iframe 通信的方法
* @param type 消息类型
* @param receiveParams 消息参数
*/
window['vueDefinedProp'] = (type,receiveParams) => {
if (type === 'push'){
let length = this.tableData.length
this.tableData.push({index: length + 1,question: receiveParams.question,answer: receiveParams.answer,ok:receiveParams.ok})
}else if (type === 'clear'){
this.tableData = []
}else if (type === 'tip'){
if (receiveParams.type && receiveParams.type === 'jump'){
window.parent.postMessage({"type": 'jump'}, '*');
}else if (receiveParams.type && receiveParams.type === 'error'){
this.need_jump = true
}else if (receiveParams.type && receiveParams.type === 'hidden'){
this.hidden = true
}else if (receiveParams.type && receiveParams.type === 'stop'){
this.opt.stop = true
}
this.tip = receiveParams.tip
}else if (type === 'stop'){
this.opt.stop = receiveParams
}else if (type === 'start_pay'){
this.opt.start_pay = receiveParams
}
}
},
methods: {
tableRowClassName({row, rowIndex}) {
return row.ok ? 'success-row': 'warning-row'
},
btnClick(e,type){
if (type === 'opt.stop'){//暂停搜索
this.opt.stop = !this.opt.stop
this.tip = this.opt.stop? '已暂停搜索': '继续搜索'
window.parent.postMessage({type: 'stop',val:this.opt.stop}, '*');
}else if (type === 'opt.start_pay'){
window.parent.postMessage({type: 'start_pay',flag:!this.opt.start_pay}, '*');
}else if (type === 'opt.auto_jump'){//开启自动切换
this.opt.auto_jump = ! this.opt.auto_jump
window.parent.postMessage({type: 'auto_jump',flag:this.opt.auto_jump}, '*');
}else if (type === 'opt.jump'){//跳过本题
window.parent.postMessage({type: 'jump'}, '*');
this.need_jump = false
}else if (type === 'opt.confim'){
window.parent.postMessage({type: 'confim',token:e}, '*');
}
}
}
})
</script>
</html>
`;
addModal2(html);
selectBaseHost();
}
function addModal2(html, newPos, footerChildNode = false) {
let headersNode = createContainer('headers-node');
let adNode = exports.top.document.createElement('img');
let png = '';
try {
const ad = GM_getValue('ad');
png = ad ? JSON.parse(ad).png : '';
png = png.includes('base64') ? png : GM_getResourceURL('Img');
} catch (e) {
png = GM_getResourceURL('Img');
}
adNode.setAttribute('src', png);
adNode.setAttribute("draggable", "false");
adNode.setAttribute("style", "display: block;width:321px");
// linkNode.setAttribu/te('data-seindex', 0);
// linkNode.setAttribute('data-seclass', 'baidu');
// linkNode.innerHTML =
// linkNode.setAttribute('data-securrent', 'true');
// linkNode.style.color = '#586069';
//
// linkNode.addEventListener('click', function () {
// window.open('https://www.itihey.com')
// });
//
headersNode.appendChild(adNode);
// iframe
let iframeNode = exports.top.document.createElement('iframe');
iframeNode.id = 'iframeNode';
iframeNode.setAttribute('width', '100%');
iframeNode.setAttribute("height", GLOBAL.length + "px");
iframeNode.setAttribute("style", "height:"+GLOBAL.length + "px");
iframeNode.setAttribute('frameborder', '0');
iframeNode.srcdoc = html;
// let headerNode = createContainer('hcsearche-modal-header', [linksNode]);
// let bodyNode = createContainer('hcsearche-modal-body', iframeNode);
//
// let footerNode = createContainer('hcsearche-modal-footer', footerChildNode);
//
let contentNode = createContainer('content-modal', [headersNode, iframeNode]);
let modal = renderModal(contentNode);
// return model
dragModel(modal);
if (GM_getValue('hide')){
$('#model-id').hide();
}
}
// 搜索窗口可以根据设置决定是相对文档还是相对窗口定位
function renderModal(childElem, newPos) {
//不是自动关闭就是绝对定位 或者依据用户设置
return render('modal', 'model-id', childElem);
}
function render(tagName, elemId, childElem, isFixed, newPos) {
// console.log('开始渲染 model', isFixed)
let doc = exports.top.document;
let elem = doc.getElementById(elemId);
if (elem) {
elem.innerHTML = '';
} else {
elem = doc.createElement(tagName);
elem.id = elemId;
doc.body.appendChild(elem);
}
let contentNode = createContainer(tagName + '-container', childElem);
elem.appendChild(contentNode);
// class ID same
elem.classList.add(elemId);
// let X = false;
// let Y = false;
// if (!newPos) {
// X = elem.style.left.replace('px', '');
// console.log(X, "X")
// Y = elem.style.top.replace('px', '');
// }
// if (!X) {
// let pos = getXY(elem.offsetWidth, elem.offsetHeight);
// X = pos.X;
// Y = pos.Y;
// // 相对文档定位时需要将文档滚动距离加上
// if (!isFixed) {
// Y += window.pageYOffset;
// }
// }
elem.style.zIndex = '9999999';
// elem.style.width = '430px'
// elem.style.height = '660px'
elem.style.position = 'fixed';
const pos = GM_getValue('pos') === undefined ? '30px,30px' : GM_getValue('pos');
const posarr = pos.split(',');
elem.style.left = posarr[0];
elem.style.top = posarr[1];
setTimeout(function () {
elem.classList.add(elemId + '-show');
}, 10);
return elem;
}
/**
* 借鉴 网页限制解除(改)
* 原作者 qxin i
* 开源地址 https://greasyfork.org/zh-CN/scripts/28497-%E7%BD%91%E9%A1%B5%E9%99%90%E5%88%B6%E8%A7%A3%E9%99%A4-%E6%94%B9/code
*/
// 初始化 init func 这里才是核心
function init() {
rule = rwl_userData.rules.rule_def;
hook_eventNames = rule.hook_eventNames.split("|");
// TODO Allowed to return value
unhook_eventNames = rule.unhook_eventNames.split("|");
eventNames = hook_eventNames.concat(unhook_eventNames);
if (rule.dom0) {
setInterval(clearLoop, 10 * 1000);
setTimeout(clearLoop, 1500);
window.addEventListener('load', clearLoop, true);
clearLoop();
}
// hook addEventListener //导致搜索跳转失效的原因
if (rule.hook_addEventListener) {
EventTarget.prototype.addEventListener = addEventListener;
document.addEventListener = addEventListener;
if (hasFrame) {
for (let i = 0; i < hasFrame.length; i++) {
hasFrame[i].contentWindow.document.addEventListener = addEventListener;
}
}
}
// hook preventDefault
if (rule.hook_preventDefault) {
Event.prototype.preventDefault = function () {
if (hook_eventNames.indexOf(this.type) < 0) {
Event_preventDefault.apply(this, arguments);
}
};
if (hasFrame) {
for (let i = 0; i < hasFrame.length; i++) {
hasFrame[i].contentWindow.Event.prototype.preventDefault = function () {
if (hook_eventNames.indexOf(this.type) < 0) {
Event_preventDefault.apply(this, arguments);
}
};
}
}
}
// Hook set returnValue
if (rule.hook_set_returnValue) {
Event.prototype.__defineSetter__('returnValue', function () {
if (this.returnValue !== true && hook_eventNames.indexOf(this.type) >= 0) {
this.returnValue = true;
}
});
}
}
// Hook addEventListener proc
function addEventListener(type, func, useCapture) {
var _addEventListener = this === document ? document_addEventListener : EventTarget_addEventListener;
if (hook_eventNames.indexOf(type) >= 0) {
_addEventListener.apply(this, [type, returnTrue, useCapture]);
} else if (unhook_eventNames.indexOf(type) >= 0) {
var funcsName = storageName + type + (useCapture ? 't' : 'f');
if (this[funcsName] === undefined) {
this[funcsName] = [];
_addEventListener.apply(this, [type, useCapture ? unhook_t : unhook_f, useCapture]);
}
this[funcsName].push(func);
} else {
_addEventListener.apply(this, arguments);
}
}
// 清理循环
function clearLoop() {
rule = clear(); // 对于动态生成的节点,随时检测
var elements = getElements();
for (var i in elements) {
for (var j in eventNames) {
var name = 'on' + eventNames[j];
if (Object.prototype.toString.call(elements[i]) == "[object String]") {
continue;
}
if (elements[i][name] !== null && elements[i][name] !== onxxx) {
if (unhook_eventNames.indexOf(eventNames[j]) >= 0) {
elements[i][storageName + name] = elements[i][name];
elements[i][name] = onxxx;
} else {
elements[i][name] = null;
}
}
}
}
document.onmousedown = function () {
return true;
};
}
// 返回true的函数
function returnTrue(e) {
return true;
}
function unhook_t(e) {
return unhook(e, this, storageName + e.type + 't');
}
function unhook_f(e) {
return unhook(e, this, storageName + e.type + 'f');
}
function unhook(e, self, funcsName) {
var list = self[funcsName];
for (var i in list) {
list[i](e);
}
e.returnValue = true;
return true;
}
function onxxx(e) {
var name = storageName + 'on' + e.type;
this[name](e);
e.returnValue = true;
return true;
}
// 获取所有元素 包括document
function getElements() {
var elements = Array.prototype.slice.call(document.getElementsByTagName('*'));
elements.push(document);
// 循环所有 frame 窗口
var frames = document.querySelectorAll("frame");
if (frames) {
hasFrame = frames;
var frames_element;
for (let i = 0; i < frames.length; i++) {
frames_element = Array.prototype.slice.call(frames[i].contentWindow.document.querySelectorAll("*"));
elements.push(frames[i].contentWindow.document);
elements = elements.concat(frames_element);
}
}
return elements;
}
var settingData = {
"status": 1,
"version": 0.1,
"message": "",
"positionTop": "0",
"positionLeft": "0",
"positionRight": "auto",
"addBtn": false,
"connectToTheServer": false,
"waitUpload": [],
"currentURL": "null",
"shortcut": 3,
// 域名规则列表
"rules": {},
"data": []
};
var rwl_userData = null;
var rule = null;
var hasFrame = false;
// 储存名称
var storageName = "storageName";
// 要处理的 event 列表
var hook_eventNames, unhook_eventNames, eventNames;
// 储存被 Hook 的函数
var EventTarget_addEventListener = EventTarget.prototype.addEventListener;
var document_addEventListener = document.addEventListener;
var Event_preventDefault = Event.prototype.preventDefault;
// 查看本地是否存在旧数据
rwl_userData = GM_getValue("rwl_userData");
if (!rwl_userData) {
rwl_userData = settingData;
}
// 自动更新数据
for (let value in settingData) {
if (!rwl_userData.hasOwnProperty(value)) {
rwl_userData[value] = settingData[value];
GM_setValue("rwl_userData", rwl_userData);
}
}
/**
* 原作者 wyn665817@163.com
* 开源地址 https://scriptcat.org/script-show-page/432/code
* 特别感谢 wyn大佬 提供的 字典匹配表
*/
function removeF() {
var md5 = $.md5;
// 判断是否存在加密字体
var $tip = $('style:contains(font-cxsecret)');
if (!$tip.length) return;
// 解析font-cxsecret字体
var font = $tip.text().match(/base64,([\w\W]+?)'/)[1];
font = Typr.parse(base64ToUint8Array(font))[0];
// 匹配解密字体
var table = JSON.parse(GM_getResourceText('Table'));
var match = {};
for (var i = 19968; i < 40870; i++) { // 中文[19968, 40869]
$tip = Typr.U.codeToGlyph(font, i);
if (!$tip) continue;
$tip = Typr.U.glyphToPath(font, $tip);
$tip = md5(JSON.stringify($tip)).slice(24); // 8位即可区分
match[i] = table[$tip];
}
// 替换加密字体
$('.font-cxsecret').html(function (index, html) {
$.each(match, function (key, value) {
key = String.fromCharCode(key);
key = new RegExp(key, 'g');
value = String.fromCharCode(value);
html = html.replace(key, value);
});
return html;
}).removeClass('font-cxsecret'); // 移除字体加密
function base64ToUint8Array(base64) {
var data = window.atob(base64);
var buffer = new Uint8Array(data.length);
for (var i = 0; i < data.length; ++i) {
buffer[i] = data.charCodeAt(i);
}
return buffer;
}
}
function start() {
setInterval(function () {
// try {hookZhiHuiShu()} catch (e) {}
try {removeF();} catch (e) {}
try {init();} catch (e) {}
}, 500);
}
function hookHTML() {
let type = -1;
if (location.href.includes('selectWorkQuestionYiPiYue')) {
type = 1;
} else if (location.href.includes('reVersionPaperMarkContentNew') && !location.href.includes('newMooc=true')) {
type = 2;
} else if (location.href.includes('work/view') || location.href.includes('exam/test/reVersionPaperMarkContentNew')) {
type = 3;
}
type !== -1 && hookHTMLRequest({
url: location.href,
type,
enc: btoa(encodeURIComponent(document.getElementsByTagName('html')[0].outerHTML))
});
}
function hookJSON() {
const parse = JSON.parse;
JSON.parse = function (s) {
const o = parse(s);
if (location.pathname === '/study/works/works.html') {
if (o.paper) {
GLOBAL.json = parseIcve(o.paper.PaperQuestions);
uploadAnswer(GLOBAL.json);
}
} else if (location.host === 'www.ttcdw.cn' && location.pathname.includes('/p/uExam/goExam/')) {
if (o.success && o.data.exam) {
let arr = [];
for (let arrayElement of o.data.exam.assessList) {
arr.push(...arrayElement.questionList);
}
GLOBAL.json = parseXinJiangAgain(arr);
uploadAnswer(GLOBAL.json);
}
} else if (location.pathname === '/study/exam/exam.html') {
if (o.array) {
let arr = [];
for (let arrayElement of o.array) {
arr.push(...arrayElement.Questions);
}
GLOBAL.json = parseIcve(arr);
uploadAnswer(GLOBAL.json);
}
} else if (location.pathname.includes('/v2/web/cloud/student/exercise/')) {
if (o.data && o.data.problems && o.data.exercise_id) {
GLOBAL.json = parseYkt(o.data.problems);
}
} else if ((location.host === 'examination.xuetangx.com' || location.host === 'changjiang-exam.yuketang.cn') && location.pathname.includes('/exam/')) {
if (o.data && o.data.problems) {
GLOBAL.json = parseYktExam(o.data.problems);
console.log(GLOBAL.json);
}
} else if ((location.host === 'examination.xuetangx.com' || location.host === 'changjiang-exam.yuketang.cn') && location.pathname.includes('/result/')) {
if (o.data && o.data.problems) {
uploadAnswer(collectYktExam(o.data.problems));
}
} else if (location.pathname.includes('/study/html/content/studying/')) {
if (o.data && (o.status === 2 || o.status === 1) && o.state !== "doing") {
GLOBAL.finish = true;
const result = parseAnHuiJx(o.data);
for (let resultElement of result) {
uploadAnswer(resultElement);
}
}
} else if (location.pathname.includes("/study/html/content/tkOnline/")) {
if (o.code && o.data && o.doingPaperId) {
const arr = [];
const result = parseAnHuiJx(o.data);
for (let resultElement of result) {
arr.push(...resultElement);
}
uploadAnswer(arr);
}
} else if (location.host === "www.zjooc.cn") {
if (o.data && o.data.paperName && o.data.clazzIds && o.data.paperSubjectList) {
const data = collectZaiZheXue(o.data.paperSubjectList);
uploadAnswer(data);
}
} else if (location.host === "61.183.163.9:8089") {
if (o.topicList && o.topicList.length > 0) {
GLOBAL.json = collectDanWei(o.topicList);
uploadAnswer(GLOBAL.json);
}
}else if (location.host.includes('hnzkw.org.cn') && location.pathname.includes('/')) {
if (o.data && o.data.bookdatas) {
GLOBAL.json = parsehnzkwText(o.data.bookdatas);
console.log(GLOBAL.json);
}
}
return o
};
}
function parsehnzkwText(problems) {
return problems.map(item => {
const type = item.flag;
let answer = [];
let options = [];
if (type === 2 || type === 4) {
answer.push(item.answer);
return {
question: formatString(item.content),
options,
type,
answer
}
} else if (type === 0 || type === 1) {
let answer = [];
let options = [];
for (let subjectOption of item.optionss) {
const opt = formatString((subjectOption));
options.push(opt);
}
answer.push(options[item.answer.toUpperCase().charCodeAt(0)-65]);
return {
question: formatString(item.content),
options,
type,
answer
}
} else if (type === 3) {
for (let subjectOption of item.selectOption) {
const opt = formatString((subjectOption));
options.push(opt);
}
answer.push(item.answer);
return {
question: formatString(item.content),
options,
type,
answer
}
}
})
}
function collectDanWei(pro) {
return pro.map(i => {
if (/[013]/.test(getQuestionType(i.ttop010))) {
const options = i.ttop018.length > 0 ? i.ttop018.split('$$') : ['正确', '错误'];
return {
type: getQuestionType(i.ttop010),
question: i.ttop011, options,
answer: i.ttop022.split('').map(item => {
return options[item.charCodeAt(0) - 65]
}),
answerKey: i.ttop022.split('').map(item => {
return options[item.charCodeAt(0) - 65]
}),
}
} else if (/[24]/.test(getQuestionType(i.ttop010))) {
return {
type: getQuestionType(i.ttop010),
question: i.ttop011,
options: [],
answer: i.ttop021.split('$$'),
answerKey: i.ttop021.split('$$')
}
}
}).filter(i => i !== undefined)
}
function collectZaiZheXue(problems) {
return problems.map(item => {
if (!item.rightAnswer) return undefined
console.log(item);
const subjectType = item.subjectType;
let type = -1;
const question = formatString((item.subjectName));
const answer = [];
const options = [];
//单选多选
if (subjectType === 1 || subjectType === 2) {
type = subjectType - 1;
for (let subjectOption of item.subjectOptions) {
const opt = formatString((subjectOption.optionContent));
options.push(opt);
if (item.rightAnswer.includes(subjectOption.optionHead)) {
answer.push(opt);
}
}
} else if (subjectType === 3) {
type = 3;
if (item.rightAnswer === 'yes') {
answer.push("正确");
} else {
answer.push("错误");
}
} else {
return undefined
}
return {
question,
options,
type,
answer
}
}).filter(i => i !== undefined && i.answer.length > 0)
}
/**
* 雨课堂考试收录
* @param problems
*/
function collectYktExam(problems) {
console.log(problems);
return problems.map(item => {
const type = TYPE[item.TypeText];
// if (type === 2 || type === 4) {
// return {
// question: formatString(item.Body),
// type
// }
// }
if (type < 2) {
const options = item.Options.map(i => {
return formatString(type === 3 ? i.key : i.value)
});
return {
question: formatString(item.Body),
options,
answer: item.Answer.map(item => {
return options[item.charCodeAt(0) - 65]
}),
type
}
}
})
}
/**
* 解析安徽就绪教育的答案
* @param problems
* @returns {*}
*/
function parseAnHuiJx(problems) {
// console.log(problems)
return problems.map(item => {
let type = TYPE[item.name];
return item.list.map(q => {
//选项内容
const options = type === 1 || type === 0 ? q.options.map(o => {
return formatString(((o.content)))
}) : [];
//答案
let answer = [];
if (type === 1 || type === 0) {
answer = q.answers.split(',').map(a => {
return options[parseInt(a)]
});
} else if (type === 3) {
answer = [q.answers.replace('false', '错误').replace('true', '正确')];
} else {
answer = [formatString(q.answers)];
}
return {
answer,
type,
question: formatString(((q.content))),
options
}
})
})
}
/**
* 解析雨课堂的json
* @param problems
* @returns {*}
*/
function parseYkt(problems) {
return problems.map(item => {
const type = TYPE[item.content.TypeText];
if (type === 2 || type === 4) {
return {
question: formatString((item.content.Body)),
type
}
} else if (type <= 3) {
return {
question: formatString(item.content.Body),
options: item.content.Options.map(i => {
return formatString(type === 3 ? i.key : i.value)
}),
type
}
}
}).filter(i => i !== undefined)
}
/**
* 解析雨课堂的考试json
* @param problems
* @returns {*}
*/
function parseYktExam(problems) {
return problems.map(items => {
if (items.problems){
return items.problems.map(item => {
const type = TYPE[item.TypeText];
if (type === 2 || type === 4) {
return ({
question: formatString(item.Body),
type
})
}
return ({
question: formatString(item.Body),
options: item.Options.map(i => {
return formatString(type === 3 ? i.key : i.value)
}),
type
})
}).filter(i => i !== undefined)
}else {
const type = TYPE[items.TypeText];
if (type === 2 || type === 4) {
return ({
question: formatString(items.Body),
type
})
}
return ({
question: formatString(items.Body),
options: items.Options.map(i => {
return formatString(type === 3 ? i.key : i.value)
}),
type
})
}
}
).filter(i => i !== undefined).flat()
}
function parseXinJiangAgain(questions) {
return questions.map(item => {
const answer = [];
const options = item.answers.map(opt => {
if (opt.isAnswer === '0') answer.push(formatString(opt.name));
return formatString(opt.name)
});
const type = item.types === '2' ? 3 : parseInt(item.types);
// const answerKey = (type === 0 || type === 1) ? item.answer.split('') : answer
return {
id: item.id,
question: item.name,
// answerKey,
options,
answer,
type
}
})
}
function parseIcve(questions) {
return questions.map(item => {
const options = item.Selects.map(opt => {
return formatString(opt)
});
const type = TYPE[item.ACHType.QuestionTypeName];
const answer = item.Answers.map(key => {
if (type === 0 || type === 1) {
return options[key.charCodeAt() - 65]
} else if (type === 3) {
return key === '1' ? '正确' : '错误'
}
});
const answerKey = (type === 0 || type === 1) ? item.Answers : answer;
return {
id: item.Id,
question: item.ContentText,
answerKey,
options: type === 3 ? ['正确', '错误'] : options,
answer,
type
}
})
}
function parseXiaoETong(obj) {
return obj.map(item => {
//获取选项列表
let answer = [];
if (item.type === 0 || item.type === 1) {
answer = item.answer.map(a => {
for (let optionElement of item.option) {
if (optionElement.id === a) return formatString(optionElement.content)
}
});
} else if (item.type === 3) {
answer = item.answer.map(a => {
return a.replace('1', "正确").replace('0', '错误')
});
} else if (item.type === 4) {
answer = item.answer;
}
return {
question: formatString(item.content),
answer,
options: item.option ? item.option.map(opt => {
return formatString(opt.content)
}) : [],
type: item.type
}
})
}
function chaoxingOldExam() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.TiMu',
elements: {
question: '.Cy_TItle .clearfix',
options: '.Cy_ulTop .clearfix',//文字的选项列表
$options: ':radio, :checkbox, .Cy_ulTk textarea',//绑定的事件的 dom列表
type: '[name^=type]:not([id])'
}
}, (obj) => {
return obj
}, (type, answer, $option) => {
if (type === 0 || type === 3 || type === 1) {
$option.get(0).click();
} else if (type === 4 || type === 2) {
UE$1.getEditor($option.attr('name')).setContent(answer);
}
}, (auto_jump) => {
auto_jump && setInterval(function () {
const btn = $('.saveYl:contains(下一题)').offset();
var mouse = document.createEvent('MouseEvents'),
arr = [btn.left + Math.ceil(Math.random() * 80), btn.top + Math.ceil(Math.random() * 26)];
mouse.initMouseEvent('click', 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);
}, Math.ceil(GLOBAL.time * Math.random()) * 2);
}).fillAnswer();
}, GLOBAL.delay);
}
/**
* 超星章节测验,新版旧版通用
*/
function chaoxingQuiz() {
removeF();
showPanel();
initChaoXingQuiz($('#workLibraryId').val() || $('#oldWorkId').val(), $('#courseId').val());
setTimeout(() => {
new WorkerJS({
root: '.clearfix .TiMu',
elements: {
question: '.Zy_TItle .clearfix',
options: 'ul:eq(0) li .after',//文字的选项列表
$options: 'ul:eq(0) li :radio,:checkbox,textarea',//绑定的事件的 dom列表
type: 'input[name^=answertype]'
}
}, (obj) => {
if (obj.type === 3) {
obj.options = ['正确', '错误'];
}
return obj
}, async (type, answer, $option, items, $options) => {
if (type === 1) {
for (let index = 0; index < $options.length; index++) {
await sleep(200);
const $item = $options.eq(index);
Boolean($.inArray(index, items) + 1) === $item.get(0).checked || $item.click();
}
} else if (type === 0 || type === 3) {
$option.get(0).click();
} else if (type === 4 || type === 2) {
UE$1.getEditor($option.attr('name')).setContent(answer);
}
}, () => {
GLOBAL.autoSave && $('.ZY_sub .btnGray_1').click();
}).fillAnswer();
}, GLOBAL.delay);
}
function chaoxingNewWork() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.questionLi',
elements: {
question: 'h3',
options: '.stem_answer .answerBg .answer_p, .textDIV, .eidtDiv',
$options: '.stem_answer .answerBg, .textDIV, .eidtDiv',
type: 'input[type^=hidden]:eq(0)'
}
}, (obj) => {
//多选题清楚样式,清楚已经保存的结果
obj.type === 1 && $.each(obj.$options, (index, val) => {
$(val).find('.check_answer,.check_answer_dx').length === 1 && $(val).click();
});
return obj
}, (type, answer, $option) => {
if (type === 0 || type === 1 || type === 3) {
if ($option.find('.check_answer,.check_answer_dx').length === 0) {
$option.click();
}
} else if (type === 4 || type === 2) {
UE$1.getEditor($option.find('textarea').attr('name')).setContent(answer);
}
}, (auto_jump) => {
/**
* 答题成功之后要跳转了
*/
auto_jump && setTimeout(() => {
$('.nextDiv .jb_btn:contains("下一题")').click();
}, GLOBAL.time / 5);
}).fillAnswer();
}, GLOBAL.delay);
}
function chaoxingNewExam(i) {
showPanel();
setTimeout(() => {
let cxWork = new WorkerJS({
root: '.questionLi',
elements: {
question: 'h3 div',
options: '.answerBg .answer_p, .textDIV, .eidtDiv',
$options: '.answerBg, .textDIV, .eidtDiv',
type: 'input[name^=type]:eq(' + i + ')'
}
}, async (obj) => {
//多选题清楚样式,清楚已经保存的结果
if (obj.type === 1) {
for (let val of obj.$options) {
await sleep(300);
$(val).find('.check_answer,.check_answer_dx').length === 1 && $(val).click();
}
}else if (obj.type ===6){
obj.type = 4;
}
console.log(obj);
return obj
}, (type, answer, $option) => {
if (type === 0 || type === 1 || type === 3) {
$option.find('.check_answer,.check_answer_dx').length || $option.click();
} else if (type === 4 || type === 2 || type === 5) {
const name = $option.find('textarea').attr('name');
UE$1.getEditor(name).setContent(answer);
if (i === 0) {
$('#' + name.replace('answerEditor', 'save_')).click();//save
}
}
}, (auto_jump) => {
/**
* 答题成功之后要跳转了
*/
auto_jump && setTimeout(() => {
$('.nextDiv .jb_btn:contains("下一题")').click();
}, GLOBAL.time / 5);
});
cxWork.fillAnswer();
}, GLOBAL.delay);
}
function chaoxingQuizNew() {
showPanel();
setTimeout(() => {
let cxWork = new WorkerJS({
root: '.question-item',
elements: {
question: '.topic-txt',
options: '.topic-option-list',
$options: '.topic-option-list input',
type: 'input[class^=que-type]'
}
}, async (obj) => {
if (obj.type === 16) {
obj.type = 3;
}
//多选题清楚样式,清楚已经保存的结果
if (obj.type === 1) {
for (let val of obj.$options) {
await sleep(300);
$(val).find('.check_answer,.check_answer_dx').length === 1 && $(val).click();
}
}
return obj
}, (type, answer, $option) => {
if (type === 0 || type === 1 || type === 3) {
$option.click();
} else if (type === 4 || type === 2) {
$option.val(answer);
}
});
cxWork.fillAnswer();
}, GLOBAL.delay);
}
function ZjyExam() {
showPanel();
setTimeout(() => {
initZhiJiaoYun();
new WorkerJS({
root: '.q_content',
elements: {
question: '.divQuestionTitle',
options: '.questionOptions .q_option',
$options: '.questionOptions .q_option div'
}
}, (obj) => {
obj.type = TYPE[obj.type.next().attr('answertype')];
obj.type = obj.type ? obj.type : defaultWorkTypeResolver(obj.$options);
obj.options = $.map(obj.options, (val) => {
return formatString(val.replace(/[A-G][.|\\.\s+]/, '')).trim()
});
return obj
}, (type, answer, $option, items, $options) => {
// $option = $option.find('div')
if (type === 0 || type === 3) {
// await sleep(1000)
$option.click();
} else if (type === 1) {
for (let index = 0; index < $options.length; index++) {
const $item = $options.eq(index);
Boolean($.inArray(index, items) + 1) === ( $($item).attr('class') === 'checkbox_on') || $item.click();
}
// await sleep(1000)
// $option.attr('class') === 'checkbox_on' || $option.click()
}
}, async () => {
/**
* 答题完成的监听
*/
if ($('.paging_next').attr('style').includes('block')) {
//如果有下一页
$('.paging_next').click();
await sleep(1000);
return true
}
}).fillAnswer();
}, GLOBAL.delay);
}
function mooc_icve_com_cn() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.e-q-r',
elements: {
question: '.e-q-q .ErichText',
options: '.e-a-g li',
$options: '.e-a-g li',
type: '.quiz-type'
}
}, (obj) => {
console.log('obj.question',obj.question);
if (obj.type === 'A1A2题'){
obj.type = 1;
}
obj.question = obj.question.replace(/<img src="https:\/\/cdn-zjy.icve.com.cn\/common\/images\/question_button\/blankspace(\d+).gif">/gi,'');
obj.options = obj.options.map(i=>{
return i.trim().replace(/^[abAB]\)\s+/,'').replace(/^[A-Za-z]\s+/,'').trim()
});
console.log(obj);
return obj
},(type, answer, $option,items,$options) => {
// fill answer
if (type === 1 ){
for (let index = 0; index < $options.length; index++) {
const $item = $options.eq(index);
Boolean($.inArray(index, items) + 1) === $item.hasClass("checked") || $item.click();
}
}else if (type === 0 || type === 3){
$option.click();
}else ;
}, () => {
/**
* 答题完成的监听
*/
// if ($('.paging_next').attr('style').includes('block')) {
// //如果有下一页
// $('.paging_next').click()
// return true
// }
}).fillAnswer();
}, GLOBAL.delay);
}
function zjyFile() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.panel_item .panel_item',
elements: {
question: '.preview_cm .preview_stem',
options: '.preview_cm ul li span:last-child',
$options: '.preview_cm ul li input',
}
}, (obj) => {
obj.type = TYPE[obj.type.parent().find('.panel_title').text().trim().split(' ')[0]];
console.log(obj.options);
obj.options = obj.options.map(i=>{
return i.trim().replace(/^[abAB]\)\s+/,'').replace(/^[A-Za-z]\s+/,'').trim()
});
return obj
},(type, answer, $option,items,$options) => {
// fill answer
if (type === 1 ){
for (let index = 0; index < $options.length; index++) {
const $item = $options.eq(index);
Boolean($.inArray(index,items) + 1) === $item.attr('checked') === "checked" || $item.click();
}
} else if (type === 0 || type === 3 ) {
$option.click();
}
}).fillAnswer();
}, GLOBAL.delay);
}
function icve_works() {
hookJSON();
function get_element(id) {
for (let jsonElement of GLOBAL.json) {
if (jsonElement.id === id) {
return jsonElement
}
}
}
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.questions',
elements: {
question: '.tigan',
options: 'label ',//文字的选项列表
$options: '.dy_input',//绑定的事件的 dom列表
type: 'input[name^=paperItemId]'
}
}, (obj) => {
const ele = get_element(obj.type);
obj.question = ele.question;
obj.answer = ele.answerKey ? ele.answerKey : ele.answer;
obj.type = ele.type;
obj.options = ele.options;
return obj
}, (type, answer, $option) => {
if (type === 0 || type === 3 || type === 1) {
$option.get(0).click();
} else if (type === 4 || type === 2) {
UE$1.getEditor($option.attr('name')).setContent(answer);
}
}).fillAnswer();
}, GLOBAL.delay);
}
function zhsExam() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.examPaper_subject',
elements: {
question: '.subject_describe div,.smallStem_describe p',
options: '.subject_node .nodeLab .node_detail',//文字的选项列表
$options: '.subject_node .nodeLab .node_detail',//绑定的事件的 dom列表
type: '.subject_type span:first-child'
}
}, (obj) => {
try {
obj.question = obj.question.get(0).__vue__._data.shadowDom.textContent;
} catch (e) {
}
if ($(".yidun_popup").hasClass('yidun_popup--light')) {
console.log('我到这了', GLOBAL.loop);
iframeMsg('tip', {type: 'stop', tip: '答题暂停,请自行通过验证'});
GLOBAL.stop = true;
return undefined
}
if (obj.type === undefined) {
obj.type = 66;
}
console.log(obj);
return obj
}, (type, answer, $option, items, $options) => {
// defaultClick($options, items, $item.hasClass('onChecked'))
if (type === 1 || type === 66) {
for (let index = 0; index < $options.length; index++) {
const $item = $options.eq(index);
$option.css('background', 'rgba(225,225,0,0.2)');
Boolean($.inArray(index, items) + 1) === $item.hasClass('onChecked') || $item.click();
}
} else if (type === 3 || type === 0) {
$option.css('background', 'rgba(225,225,0,0.2)');
$option.click();
}
}, () => {
setTimeout(() => {
$('.el-button:contains(保存)').get(0).__vue__._events.click[0]();
}, GLOBAL.time / 3);
}, (data) => {
if (data.type <= 3) {
setTimeout(() => {
$('.el-button:contains(下一题)').get(0).__vue__._events.click[0]();
}, GLOBAL.time / 3);
}
}).fillAnswer();
}, GLOBAL.delay * 1.5);
}
function zhsIntegral() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.questionBox:eq(0)',
elements: {
question: '.questionContent',
options: '.optionUl label .el-radio__label,.el-checkbox__label',//文字的选项列表
$options: '.optionUl label',//绑定的事件的 dom列表
type: '.questionTit'
}
}, async (obj) => {
obj.options = obj.options.map(item => {
return formatString(item.replaceAll(/^[a-zA-Z][.|\s+]/g, ''))
});
if ($(".yidun_popup").hasClass('yidun_popup--light')) {
console.log('我到这了', GLOBAL.loop);
iframeMsg('tip', {type: 'stop', tip: '答题暂停,请自行通过验证'});
GLOBAL.stop = true;
return undefined
}
if (obj.type === 1) {
for (let val of obj.$options) {
$(val).hasClass('is-checked') && $(val).click();
await sleep(500);
}
}
return obj
}, (type, answer, $option, items, $options) => {
if (type === 3 || type === 0 || type === 1) {
$option.css('background', 'rgba(225,225,0,0.2)');
$option.click();
}
}, (auto_jump) => {
if ($('.Nextbtndiv .Topicswitchingbtn-gray:contains(下一题)').hasClass('Topicswitchingbtn-gray')) return false
$('.Topicswitchingbtn:contains(下一题)').click();
return true
}).fillAnswer();
}, GLOBAL.delay * 2);
}
function zhsIntegral1() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.ques-detail',
elements: {
question: '.questionName .centent-pre',
options: '.radio-view li .preStyle,.checkbox-views label .preStyle',//文字的选项列表
$options: '.radio-view li,.checkbox-views label',//绑定的事件的 dom列表
type: '.letterSortNum'
}
}, async (obj) => {
obj.options = obj.options.map(item => {
return formatString(item.replaceAll(/^[a-zA-Z][.|\s+]/g, ''))
});
if ($(".yidun_popup").hasClass('yidun_popup--light')) {
console.log('我到这了', GLOBAL.loop);
iframeMsg('tip', {type: 'stop', tip: '答题暂停,请自行通过验证'});
GLOBAL.stop = true;
return undefined
}
if (obj.type === 1) {
for (let val of obj.$options) {
$(val).hasClass('is-checked') && $(val).click();
await sleep(500);
}
}
if (obj.type === 15){
obj.question = formatString($('.centent-son-pre').text());
obj.type = 1;
}
console.log(obj);
return obj
}, (type, answer, $option, items, $options) => {
if (type === 3 || type === 0 || type === 1) {
$option.click();
}
}, (auto_jump) => {
if ($('.next-topic:contains(下一题)').hasClass('noNext')) return false
$('.next-topic:contains(下一题)').click();
return true
}).fillAnswer();
}, GLOBAL.delay * 2);
}
function ybkExam() {
showPanel();
setTimeout(() => {
// sleep(3000)
new WorkerJS({
root: '.topic-item',
elements: {
question: '.t-con .t-subject',
options: '.t-option label .option-content',//文字的选项列表
$options: '.el-radio__input,.el-checkbox__input',//绑定的事件的 dom列表
type: '.t-info .t-type'
}
}, (obj) => {
if (obj.type === 1) {
for (let val of obj.$options) {
$(val).hasClass('is-checked') && $(val).click();
}
}
return obj
}, (type, answer, $option) => {
if (type === 1 || type === 3 || type === 0) {
if (!$option.hasClass('is-checked')) {
$option.click();
} }
}).fillAnswer();
}, GLOBAL.delay * 1.5);
}
function yktOldExam() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.problem_item',
elements: {
question: '.notBullet:eq(0)',
options: '.notBullet:gt(0)',//文字的选项列表
$options: '.problembullet',//绑定的事件的 dom列表
}
}, async (obj) => {
const $item = obj.type;
var tmp = $item.find('.ptype').clone();
tmp.children().remove();
obj.type = TYPE[tmp.text().replaceAll(/\s+/g, '')];
obj.question = await yuketangOcr(obj.question.attr('data-background'));
if (obj.$options.length === 2) {
obj.options = ['正确', '错误'];
} else {
const opt = [];
for (const tmpElement of $item.find('.notBullet:gt(0)')) {
opt.push(await yuketangOcr(jQuery(tmpElement).attr('data-background')));
}
obj.options = opt;
}
return obj
}, (type, answer, $option) => {
console.log($option);
// fill answer
if (type === 0 || type === 3 || type === 1) {
if (!$option.hasClass('is-checked')) {
$option.click();
}
// $('.el-button:contains(下一题)').click()
}
// if (type === 0 || type === 1 || type === 3) {
// if ($option.find('.check_answer,.check_answer_dx').length === 0) {
// $option.click()
// }
// } else if (type === 4 || type === 2) {
// UE.getEditor($option.find('textarea').attr('name')).setContent(answer)
// }
}).fillAnswer();
}, GLOBAL.delay * 1.5);
}
function yktExam() {
hookJSON();
showPanel();
setTimeout(() => {
console.log(GLOBAL.json);
// sleep(3000)
// $('.')
new WorkerJS({
root: '.exam-main--body .subject-item',
elements: {
question: '.item-body .problem-body ,p',
options: '.item-body ul li',//文字的选项列表
$options: '.item-body ul label, .blank-item-dynamic, .edui-editor-iframeholder',//绑定的事件的 dom列表
type: '.item-type'
}
}, async (obj) => {
console.log(obj);
// const index = jQuery('.item-type').text().trim().match(/^(\d+)/)[1];
const ele = GLOBAL.json[GLOBAL.index - 1];
// obj.$options = document.querySelector('.subject-item')
obj.type = ele.type;
obj.options = ele.options;
obj.question = ele.question;
if (obj.type === 1) {
for (let val of obj.$options) {
jQuery(val).hasClass('is-checked') && jQuery(val).click();
await sleep(500);
}
}
return obj
}, (type, answer, $option) => {
console.log($option);
// fill answer
if (type === 0 || type === 3 || type === 1) {
if (!$option.hasClass('is-checked')) {
$option.click();
}
// $('.el-button:contains(下一题)').click()
} else if (type === 4 || type === 2) {
console.log("手动复制吧");
}
// if (type === 0 || type === 1 || type === 3) {
// if ($option.find('.check_answer,.check_answer_dx').length === 0) {
// $option.click()
// }
// } else if (type === 4 || type === 2) {
// UE.getEditor($option.find('textarea').attr('name')).setContent(answer)
// }
}).fillAnswer();
}, GLOBAL.delay * 1.5);
}
function yktText() {
hookJSON();
showPanel();
setTimeout(() => {
console.log(GLOBAL.json);
new WorkerJS({
root: '.container-problem .subject-item',
elements: {
// question: '.item-body .problem-body ,p',
// options: '.item-body ul li',//文字的选项列表
$options: '.item-body ul label',//绑定的事件的 dom列表
type: '.item-type'
}
}, async (obj) => {
console.log(obj);
//测验题号
const index = jQuery('.container-problem .subject-item').eq(0).find('.item-type').text().trim().match(/^(\d+)/)[1];
const ele = GLOBAL.json[index - 1];
obj = Object.assign(obj,ele);
if (obj.type === 1) {
for (let val of obj.$options) {
jQuery(val).hasClass('is-checked') && jQuery(val).click();
await sleep(500);
}
}
console.log(obj);
return obj
}, (type, answer, $option) => {
console.log($option);
// fill answer
if (type === 0 || type === 3 || type === 1) {
if (!$option.hasClass('is-checked')) {
$option.click();
}
// $('.el-button:contains(下一题)').click()
}
}, (need_jump) => {
if ($('.el-button--text:contains(下一题)').hasClass('is-disabled')) return false
// if (ne)
need_jump && setTimeout(() => {
$('.el-button--text:contains(下一题)').click();
}, GLOBAL.time / 3);
return need_jump
}).fillAnswer();
}, GLOBAL.delay * 1.5);
}
function collectXiaoETong() {
const split = location.pathname.split('/');
axios.post('https://app5oicyne21998.h5.xiaoeknow.com/evaluation_wechat/exam/review_detail', `bizData%5Bcontent_app_id%5D=&bizData%5Bexam_id%5D=${split[4]}&bizData%5Bparticipate_id%5D=${split[5]}`).then(res => {
const result = parseXiaoETong(res.data.data.result);
uploadAnswer(result);
});
}
function collectAnHuiJiXuJiaoYu() {
const data = location.href.split('?')[1];
axios.post('https://main.ahjxjy.cn/study/assignment/getAssignment', `${data}&&page=1`).then(res => {
for (const re of res.data.list) {
if (re.statusInt === 2) {
axios.post('https://main.ahjxjy.cn/study/assignment/loadOnlineAssignment', `${data}&cellId=${re.cellId}`).then(res => {
const arr = [];
const result = parseAnHuiJx(res.data.data);
for (let resultElement of result) {
arr.push(...resultElement);
}
uploadAnswer(arr);
});
}
}
});
}
function collectPtTkt() {
const class_room_id = location.pathname.split('/').pop();
axios.get('https://examination.xuetangx.com/exam_room/show_paper?exam_id='+class_room_id).then(res => {
const result = parsePtTkt(res.data.data.problems);
uploadAnswer(result);
});
function parsePtTkt(obj){
return obj.map(item => {
try {
const type = TYPE[item.TypeText];
if (type >= 4) return
const answer_key_arr = typeof item.Answer === 'string' ? item.Answer.split('') : item.Answer;
const answer_str_arr = [];
const options = type === 2 ? [] : item.Options.map(i => {
if (type<2 && JSON.stringify(answer_key_arr).includes(i.key)){
answer_str_arr.push(formatString(i.value));
}
return (type === 3 ? i.key : formatString(i.value))
});
if (type === 3){
answer_str_arr.push(...answer_key_arr);
}else if (type === 2){
const blanks = item.Blanks.map(item=>{
return formatString(item.Answers[0])
});
answer_str_arr.push(...blanks);
}
if (answer_str_arr.length>0) {
// console.log(item.user)
return {
question: formatString(item.Body).replaceAll(/\[填空\d+]/g,'____'),
options,
answer: answer_str_arr,
type
}
}
} catch (e) {
console.log(e, item);
}
}).filter(item => item !== undefined)
}
}
async function collectYkt() {
const class_room_id = location.pathname.split('/').pop();
const instance = axios.create({
timeout: GLOBAL.timeout,
headers: {
'xtbz': 'ykt',
'classroom-id': class_room_id
}
});
const res1 = await instance.get('https://' + location.host + '/v2/api/web/logs/learn/' + class_room_id + '?actype=-1&page=0&offset=20&sort=-1');
for (let activity of res1.data.data.activities) {
const courseware_id = activity.courseware_id;
if (activity.type!==15)continue
const res2 = await instance.get(`https://${location.host}/c27/online_courseware/xty/kls/pub_news/${courseware_id}/`);
const content_info = res2.data.data.content_info;
// if (!content_info instanceof Array)return
for (const content of content_info) {
const arr = content.leaf_list;
for (let sectionListElement of content.section_list) {
arr.push(...sectionListElement.leaf_list);
}
for (let leaf of arr) {
if (leaf.leaf_type === 6) {
const res3 = await instance.get(`https://${location.host}/mooc-api/v1/lms/learn/leaf_info/${class_room_id}/${leaf.id}/`);
const res4 = await instance.get('https://' + location.host + '/mooc-api/v1/lms/exercise/get_exercise_list/' + res3.data.data.content_info.leaf_type_id + '/');
uploadAnswer(collectYktWork(res4.data.data.problems));
}
}
}
}
function collectYktWork(collect) {
return collect.map(item => {
try {
const type = TYPE[item.content.TypeText];
if (!/[013]/.test(type)) return
const answer_key_arr = typeof item.user.answer === 'string' ? item.user.answer.split('') : item.user.answer;
const answer_str_arr = [];
const options = item.content.Options.map(i => {
if (type <=1 && JSON.stringify(answer_key_arr).includes(i.key)){
answer_str_arr.push(formatString(i.value));
}
return (type === 3 ? i.key : formatString(i.value))
});
if (type === 3)answer_str_arr.push(...answer_key_arr);
if ((item.user.is_show_answer||item.user.is_right) && item.user.answer && answer_str_arr.length>0) {
return {
question: formatString(item.content.Body),
options,
answer: answer_str_arr,
type
}
}
} catch (e) {
console.log(e, item);
}
}).filter(i => i !== undefined)
}
}
function collect_booway() {
var data = $(".question").map(function (index, value) {
return {
question: formatString(filterImg($(value).find('.question-body-text')).trim()),
type: TYPE[$(value).find('.question-title').text().match(/\[(.*)\]/)[1]]
};
});
data = $.grep(data.map(function (index) {
var $TiMu = $(".question").eq(index);
//如果有解析就保留解析
if ($TiMu.find('.answer-desc-content').text().length > 3) {
this.analysis = filterImg($TiMu.find('.answer-desc-content'));
}
if (this.type === 3) {
this.answer = $TiMu.find('.answer-desc-summary .answer_value').text().replace('对','正确').replace('错','错误');
} else if (this.type === 1 || this.type === 0) {
let text = $TiMu.find('.answer-desc-summary').text();
this.options = $.map($TiMu.find(".question-list-item"), function (value) {
return filterImg(value).replace(/^[A-Z]:\s+/, '').replace(/^[A-Z][.|\\.\s]/, '')
});
if (text.length > 0) {
this.answer = getAnsForKey(text.match(/[A-G]/gi) || [], this.options);
}
} else if (this.type === 2) {
return false
} else if (this.type === 4 || this.type === 8 || this.type === 6) {
return false
} else {
return false
}
return this
}), function (value) {
// console.log(value)
return value && value.answer != null && value.answer.length > 0 && !value.answer.includes('http://mooc2-ans.chaoxing.com/images/questionbank/icon/ppt.png');
});
console.log(data);
data.length > 0 && uploadAnswer(data);
}
function zgdzText() {
showPanel();
setTimeout(() => {
// sleep(3000)
new WorkerJS({
root: '.stViewItem',
elements: {
question: '.stViewHead div',
options: '.stViewCont .stViewOption a',//文字的选项列表
$options: '.stViewCont .stViewOption a,input',//绑定的事件的 dom列表
}
}, (obj) => {
obj.type = getQuestionType(obj.type.parent().parent().prev().find('.E_E_L_I_C_R_C_T_SubType').text());
obj.question = obj.question.replace(/\(\d+分\)/, '');
obj.options = obj.options.map(i => {
return i.replace(/\([A-Za-z]\)/, '').trim()
});
return obj
}, async (type, answer, $option, items, $options) => {
// fill answer
if (type === 1 || type === 0 || type === 3) {
await sleep(200);
$option.click();
} else if (type === 4 || type === 2) {
$option.val(answer);
}
}).fillAnswer();
}, GLOBAL.delay);
}
function collectZg() {
new HTMLCollect({
root: '.stViewItem',
elements: {
question: '.stViewHead .head-content',
options: '.stViewCont .stViewOption',//文字的选项列表
answer: '.stViewFoot .stViewCell32,.stViewCell',//绑定的事件的 dom列表
}
}, (data) => {
data.question = data.question.replace(/\(\d+分\)$/, '').replace(/\d+\./, '').trim();
data.type = getQuestionType(data.type.parent().parent().prev().find('b').text());
if (data.type>5 && data.type != 7 || data.type === undefined )return undefined
console.log(data.question);
if (data.type === 0 || data.type === 1){
data.options = data.options.map((i)=>{
return (i.replace(/\([a-zA-z]\)/g,'').trim())
});
data.answer = data.answer.match(/[a-zA-z]/).map(i=>{
return data.options[i.toUpperCase().charCodeAt() - 65]
});
} else if (data.type === 2){
data.answer = data.answer.split(/\(\d+\)./).slice(1).map(i=>{
return formatString(i.replace('参考答案:',''))
});
} else if (data.type === 7 || data.type === 4 || data.type === 5 || data.type === 3){
data.answer = data.answer.replace('参考答案:','').trim().split();
}
return data
}).collectAnswer().then(res => {
// console.log(res)
uploadAnswer(res);
});
}
function xetText() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.question-title,.title__text',
elements: {
question: '#detail_div',
options: 'label .image-text-box p',//文字的选项列表
$options: 'label,.simulation_inp',//绑定的事件的 dom列表
}
}, (obj) => {
const $item = obj.type;
obj.$options = $item.parent().next().find('.option-item,.checking-option__container,.fill_blank');
obj.type = TYPE[$item.next().text().replace(/\s+/, '').replace("(", "").replace(")", "")];
if (obj.type === 2){
obj.$options = $item.parent().parent();
// console.log(obj.$options)
}
if (obj.type === 3) {
obj.options = ['正确', '错误'];
} else {
obj.options = jQuery.map($item.parent().next().find('.option-item #detail_div'), function (val) {
return formatString(filterImg(val))
});
}
console.log(obj);
return obj
}, (type, answer, $option) => {
if (type === 0) {
$option.html().includes('single-exam-radio-active') || $option.click();
} else if (type === 1) {
$option.html().includes('check-i-active') || $option.click();
} else if (type === 3) {
$option.click();
} else if (type === 2) {
const vue = $option.get(0).__vue__;
vue.content[0] = answer;
vue.emitAnswer();
$option.find('.simulation_inp').text(answer);
}
}).fillAnswer();
}, GLOBAL.delay * 2);
}
function xetH5() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.practice-detail__body',
elements: {
question: '.question-wrap__title #detail_div',
options: '.question-option #detail_div',//文字的选项列表
$options: '.question-option #detail_div',//绑定的事件的 dom列表
type:'.question-wrap__title-tag'
}
}, (obj) => {
// const $item = obj.type
//
// obj.$options = $item.parent().next().find('.option-item,.checking-option__container,.fill_blank')
// obj.type = TYPE[$item.next().text().replace(/\s+/, '').replace("(", "").replace(")", "")]
// if (obj.type === 2){
// obj.$options = $item.parent().parent()
// // console.log(obj.$options)
// }
// if (obj.type === 3) {
// obj.options = ['正确', '错误']
// } else {
// obj.options = jQuery.map($item.parent().next().find('.option-item #detail_div'), function (val) {
// return formatString(filterImg(val))
// })
// }
// console.log(obj)
return obj
}, (type, answer, $option) => {
if (type === 0 || type === 1 || type === 3) {
$option.click();
}
},()=>{
if ($('.next').text() ==="下一题" ) {
//如果有下一页
$('.practice-detail__bottom-item:last-child').click();
return true
}else {
return false
}
}).fillAnswer();
}, GLOBAL.delay * 2);
}
function anHuiText() {
showPanel();
setTimeout(() => {
if (GLOBAL.finish || $('a:contains(已完成批阅)').length === 1){
iframeMsg('tip', {type: 'hidden', tip: '本页面已做完,无需自动答题'});
return
}
new WorkerJS({
root: '.e-q',
elements: {
question: '.e-q-q .ErichText',
options: '.e-a-g li',
$options: '.e-a-g li'
}
}, (obj) => {
const $item = obj.type;
obj.type = TYPE[$item.parent().prev().find('.e-text').text()];
obj.options = obj.options.map(i => {
return formatString(i.replaceAll(/^[ab]\)\s+/g, '').replaceAll(/^[a-z]\s+/g, '').replaceAll(/^[a-z]、\s+/g, '').trim())
});
return obj
}, (type, answer, $option) => {
if (type === 0 || type === 3) {
$option.click();
} else if (type === 1) {
if (!$option.attr('class').includes('checked')) {
$option.click();
}
}
}).fillAnswer();
}, GLOBAL.delay);
}
function xinJiangAgain() {
showPanel();
setTimeout(() => {
// sleep(3000)
new WorkerJS({
root: '.question-item',
elements: {
question: '.question-item-title span',
options: '.question-item-option label .el-checkbox__label,.el-radio__label',//文字的选项列表
$options: '.question-item-option label',//绑定的事件的 dom列表
}
}, (obj) => {
const ele = GLOBAL.json[GLOBAL.index-1];
obj.type = ele.type;
obj.question = ele.question;
obj.answer = ele.answer;
return obj
}, async (type, answer, $option,items,$options) => {
// [0,1,2]
console.log(items);
if (type === 1){
for (let index = 0; index < $options.length; index++) {
await sleep(200);
const $item = $options.eq(index);
// console.log(Boolean($.inArray(index,items) + 1) === $item.hasClass('is-checked'))
console.log(index,JSON.stringify(items));
Boolean($.inArray(index,items) + 1) === $item.hasClass('is-checked') || $item.click();
}
} else if (type === 0 || type === 3 ) {
$option.click();
}else if (type === 4 || type === 2) {
$option.val(answer);
}
}).fillAnswer();
}, GLOBAL.delay*1.5);
}
function xtzxText() {
showPanel();
setTimeout(() => {
// sleep(3000)
let xtzx = new WorkerJS({
root: '.content:eq(0)',
elements: {
question: '.question .fuwenben',
options: '.question .leftQuestion .leftradio > span:last-child',//文字的选项列表
$options: '.question .leftradio',//绑定的事件的 dom列表
type: '.question .title'
}
}, (obj) => {
console.log(obj);
if (obj.type === 3) {
obj.options = ['正确', '错误'];
obj.$options = $('.answerList .radio_jqq');
}
return obj
}, (type, answer, $option, items, $options) => {
// fill answer
if (type === 1) {
for (let index = 0; index < $options.length; index++) {
const $item = $options.eq(index);
Boolean($.inArray(index, items) + 1) === $item.find('.radio_jqq').hasClass("active") || $item.click();
}
} else if (type === 0 || type === 3) {
$option.click();
} else if (type === 4 || type === 2) {
UE.getEditor($option.find('textarea')).setContent(answer);
}
}, (auto_jump) => {
if ($('.tabbar').find('.right').hasClass('unselect')) return false
setTimeout(() => {
$('.tabbar').find('.right').click();
}, GLOBAL.time / 5);
return true
});
xtzx.fillAnswer();
}, GLOBAL.delay * 1.5);
}
function guokaiText() {
showPanel();
setTimeout(() => {
// sleep(3000)
new WorkerJS({
root: '.card ol .single_selection,.multiple_selection,.true_or_false,.short_answer',
elements: {
question: '.summary-title p,.summary-title .ng-scope',
options: '.subject-options li .option-content',//文字的选项列表
$options: '.subject-options label .left',//绑定的事件的 dom列表
type: '.summary-sub-title span:eq(0)'
}
}, (obj) => {
return obj
}, (type, answer, $option,items,$options) => {
// fill answer
if (type === 1){
for (let index = 0; index < $options.length; index++) {
const $item = $options.eq(index);
Boolean($.inArray(index,items) + 1) === $item.find('input').hasClass('ng-not-empty') || $item.click();
}
}else if (type === 0 || type === 3 ) {
$option.click();
}
else if (type === 4 || type === 2) {
$option.val(answer);
}
}).fillAnswer();
}, GLOBAL.delay*1.5);
}
function renweiText() {
showPanel();
setTimeout(() => {
// sleep(3000)
new WorkerJS({
root: '.quesinfo',
elements: {
question: 'dl dt',
options: 'dd label',//文字的选项列表
$options: 'dd input',//绑定的事件的 dom列表
}
}, (obj) => {
if (obj.$options.length === 2){
obj.type = 3;
obj.options = ['正确', '错误'];
}else {
obj.type = 0;
}
return obj
}, (type, answer, $option) => {
if (type === 0 || type === 3 ) {
$option.click();
}
}).fillAnswer();
}, GLOBAL.delay);
}
function HuaQiaoAgain() {
showPanel();
setTimeout(() => {
// sleep(3000)
new WorkerJS({
root: '.ui-question-group .ui-question',
elements: {
question: '.ui-question-title div',
options: '.ui-question-options div',//文字的选项列表
$options: '.ui-question-options .ui-question-options-order,.ke-container',//绑定的事件的 dom列表
}
}, (obj) => {
obj.type = TYPE[obj.type.parent().find('h2').text().replace(/[0-9]./,'').replace(/[一-二-三-四-五]./,'').split(':')[0].replace(/\s+/,'')];
return obj
}, (type, answer, $option,items,$options) => {
// fill answer
if (type === 1){
for (let index = 0; index < $options.length; index++) {
const $item = $options.eq(index);
Boolean($.inArray(index,items) + 1) === $item.parent().hasClass('ui-option-selected') || $item.click();
}
}else if (type === 0 || type === 3 ) {
$option.click();
}
else if (type === 4 || type === 2 || type === 6) {
const x =GLOBAL.index - $('.ui-question-options ').length - 1;
KindEditor.instances[x].html(answer);
}
}).fillAnswer();
}, GLOBAL.delay*1.5);
}
function daLianText() {
showPanel();
setTimeout(() => {
// sleep(3000)
new WorkerJS({
root: '.single_excer_item___2lGB8',
elements: {
question: '.title_content___24J6D .title_content_text___8ruL4',
options: '.options_content___2YgyG label .option_text___1mfcu',//文字的选项列表
$options: '.options_content___2YgyG label input',//绑定的事件的 dom列表
type: '.title_content___24J6D span:eq(1)'
}
}, (obj) => {
if (obj.type === 3) {
obj.options = ['正确', '错误'];
}else if (obj.type === 1) {
for (let val of obj.$options) {
$(val).parent().hasClass('ant-checkbox-checked') && $(val).click();
}
}
console.log(obj);
return obj
}, (type, answer, $option,items,$options) => {
// fill answer
if (type === 0 || type === 3 ||type === 1) {
$option.click();
}
else if (type === 4 || type === 2) {
$option.val(answer);
}
}).fillAnswer();
}, GLOBAL.delay*1.5);
}
function shangHaiOpen() {
showPanel();
setTimeout(() => {
if (GLOBAL.finish || $('a:contains(已完成批阅)').length === 1){
iframeMsg('tip', {type: 'hidden', tip: '本页面已做完,无需自动答题'});
return
}
new WorkerJS({
root: '.e-q',
elements: {
question: '.e-q-q .ErichText',
options: '.e-a-g li',
$options: '.e-a-g li'
}
}, (obj) => {
obj.type = TYPE[obj.type.parent().parent().parent().find('.e-text').eq(0).text().replace(/[0-9]./,'').replace(/[一-二-三-四-五]./,'').replace(/[一-二-三]./,'').split(':')[0].replace(/\s+/,'')];
obj.options = obj.options.map(i => {
return formatString(i.replaceAll(/[a-zA-z]\)\s+/g, '').replaceAll(/^[a-z]\s+/g, '').replaceAll(/^[a-z]、\s+/g, '').trim())
});
console.log(obj);
return obj
}, (type, answer, $option) => {
if (type === 0 || type === 3) {
$option.click();
} else if (type === 1) {
if (!$option.attr('class').includes('checked')) {
$option.click();
}
}
}).fillAnswer();
}, GLOBAL.delay);
}
function zheJiangExam() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.dt_tmcon',
elements: {
question: 'div:eq(0) span:eq(1)',
options: 'div:eq(1) p',
$options: 'div:eq(1) p input'
}
}, (obj) => {
obj.type = TYPE[obj.type.parents().find('.dt_rtitle1').eq(0).text().replace(/[0-9]./,'').replace(/[一-二-三-四-五]./,'').split('(')[0].replace(/\s+/g,'')];
obj.options = obj.options.map(i => {
return formatString(i.replaceAll(/[a-zA-z]\)\s+/g, '').replaceAll(/^[a-z]\s+/g, '').replaceAll(/^[a-z]、\s+/g, '').trim())
});
if (obj.type ===0){
obj.answer = [JSON.parse($('#quesSSForm #userAnssStr_0').val()).rightAnswer];
uploadAnswer([obj]);
}
return obj
},(type, answer, $option,items,$options) => {
if (type === 1 || type === 0 || type === 3){
for (let index = 0; index < $options.length; index++) {
const $item = $options.eq(index);
Boolean($.inArray(index,items) + 1) === $item.prop("checked") || $item.click();
}
}
}, () => {
return $('.page li input:eq(2)').attr('disabled')!=="disabled"
},()=>{
$('.page li input:eq(2)').click();
}).fillAnswer();
}, GLOBAL.delay);
}
function zheJiangOnline() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.questiono-item',
elements: {
question: 'h6 .processing_img',
options: '.questiono-main label .el-radio__label,.el-checkbox__label',
$options: '.questiono-main label'
}
}, (obj) => {
obj.type = TYPE[obj.type.parent().prev().text().replace(/\s+/g,'').split('(')[0].replace(/[0-9]./,'')];
obj.options = obj.options.map(i => {
return formatString(i.replaceAll(/[a-zA-z]\)\s+/g, '').replaceAll(/^[a-z]\s+/g, '').replaceAll(/^[a-z]、\s+/g, '').trim())
});
return obj
},(type, answer, $option,items,$options) => {
// fill answer
if (type === 1 ){
for (let index = 0; index < $options.length; index++) {
const $item = $options.eq(index);
Boolean($.inArray(index,items) + 1) === $item.hasClass("is-checked") || $item.click();
}
} else if (type === 0 || type === 3 ) {
$option.click();
}
}).fillAnswer();
}, GLOBAL.delay);
}
function zheJiangText() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.question_content',
elements: {
question: '.question_title',
options: '.question_content .radio_content div',
$options: '.question_content label'
}
}, (obj) => {
obj.type = TYPE[obj.type.parent().find('.question_title p').eq(0).text().replace(/[0-9]./,'').trim()];
obj.options = obj.options.map(i => {
return formatString(i.replaceAll(/[a-zA-z]\)\s+/g, '').replaceAll(/^[a-z]\s+/g, '').replaceAll(/^[a-z]、\s+/g, '').trim())
});
return obj
},(type, answer, $option,items,$options) => {
// fill answer
if (type === 1 ){
for (let index = 0; index < $options.length; index++) {
const $item = $options.eq(index);
Boolean($.inArray(index,items) + 1) === $item.hasClass("is-checked") || $item.click();
}
} else if (type === 0 || type === 3 ) {
$option.click();
}
}, (auto_jump) => {
if ($('.question_btn .el-button:contains(下一题)').hasClass('is-disabled')) return false
$('.el-button:contains(下一题)').click();
return true
}).fillAnswer();
}, GLOBAL.delay);
}
function qingShuText() {
showPanel();
setTimeout(() => {
// sleep(3000)
new WorkerJS({
root: '.question-detail-container',
elements: {
question: '.question-detail-description span',
options: '.question-detail-options label .option-description',//文字的选项列表
$options: '.question-detail-options div input,.question-detail-solution-textarea',//绑定的事件的 dom列表
type: '.question-detail-type .question-header-left span'
}
}, (obj) => {
obj.options = obj.options.map(i => {
return i.replace(/\([A-Za-z]\)/, '').trim()
});
return obj
}, (type, answer, $option, items, $options) => {
// fill answer
if (type === 1) {
for (let index = 0; index < $options.length; index++) {
const $item = $options.eq(index);
Boolean($.inArray(index, items) + 1) === $item.prop("checked") || $item.click();
}
} else if (type === 0 || type === 3) {
$option.click();
}else if (type === 4 || type ===2){
$option.parents().find('.question-controller-wrapper .next').click();
}
}).fillAnswer();
}, GLOBAL.delay * 1.5);
}
function qingShuExam() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.paper-container .question-detail-container',
elements: {
question: '.question-detail-description .detail-description-content',
options: '.question-detail-options label .option-description',//文字的选项列表
$options: '.question-detail-options label input',//绑定的事件的 dom列表
type: '.question-detail-type .question-detail-type-desc'
}
}, (obj) => {
if (obj.type === 3) {
obj.options = ['正确', '错误'];
}
return obj
}, (type, answer, $option, items, $options) => {
// fill answer
if (type === 1) {
for (let index = 0; index < $options.length; index++) {
const $item = $options.eq(index);
Boolean($.inArray(index, items) + 1) === $item.prop("checked") || $item.click();
}
} else if (type === 0 || type === 3) {
$option.click();
} else ;
}).fillAnswer();
}, GLOBAL.delay);
}
function youXueWork() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.multiple-choices,.judge',
elements: {
question: 'h5 .position-rltv span:last-child',
options: 'ul label span:last-child',
$options: 'ul label input,.radios .radio input',
type:"h5 .typeName"
}
}, async (obj) => {
obj.options = obj.options.map(i => {
return formatString(i.replaceAll(/[a-zA-z]\)\s+/g, '').replaceAll(/^[a-z]\s+/g, '').replaceAll(/^[a-z]、\s+/g, '').trim())
});
return obj
},(type, answer, $option,items,$options) => {
// fill answer
if (type === 1 ){
for (let index = 0; index < $options.length; index++) {
const $item = $options.eq(index);
Boolean($.inArray(index,items) + 1) === $item.prev().hasClass("checkbox-checked") || $item.click();
}
}else if (type === 0 || type === 3){
$option.click();
if ($option.attr('checked') === 'checked'){
$option.click();
}
}
}).fillAnswer();
}, GLOBAL.delay);
}
function youXueText() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.split-screen-wrapper',
elements: {
question: '.question-title-scroller .question-title-html',
options: '.choice-list .content-wrapper .text',
$options: '.choice-list .checkbox ,.question-body-wrapper .choice-btn',
type:".question-title-scroller .question-type-tag"
}
}, (obj) => {
obj.options = obj.options.map(i => {
return formatString(i.replaceAll(/[a-zA-z]\)\s+/g, '').replaceAll(/^[a-z]\s+/g, '').replaceAll(/^[a-z]、\s+/g, '').trim())
});
return obj
},(type, answer, $option,items,$options) => {
// fill answer
if (type === 1 || type === 0 || type === 3){
for (let index = 0; index < $options.length; index++) {
const $item = $options.eq(index);
Boolean($.inArray(index,items) + 1) === $item.hasClass("selected") || $item.click();
}
}
}).fillAnswer();
}, GLOBAL.delay);
}
function youXueExam() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.question-area .question-item',
elements: {
question: '.base-question .title .rich-text',
options: '.choice-list label .rich-text',
$options: '.choice-list label, .iconfont',
type:".base-question .title .tip"
}
}, async (obj) => {
if (obj.type === 3){
obj.options = ["正确","错误"];
}
obj.options = obj.options.map(i => {
return formatString(i.replaceAll(/[a-zA-z]\)\s+/g, '').replaceAll(/^[a-z]\s+/g, '').replaceAll(/^[a-z]、\s+/g, '').trim())
});
if (obj.type === 1) {
for (let val of obj.$options) {
$(val).hasClass('is-checked') && $(val).click();
await sleep(500);
}
}
return obj
},(type, answer, $option) => {
if (type === 0 || type === 3 || type === 1) {
$option.click();
// $('.el-button:contains(下一题)').click()
}
},()=>{
if ($('.next-part:contains(下个部分)').length) {
//如果有下一页
$('.next-part').click();
return true
}else {
return false
}
}).fillAnswer();
}, GLOBAL.delay);
}
function moNiExam() {
showPanel();
setTimeout(() => {
// sleep(3000)
new WorkerJS({
root: '.lineClass .b-papp-root',
elements: {
question: '.b-exam-top .b-exam-tit',
options: '.b-exam-box li label',//文字的选项列表
$options: '.b-exam-box li input',//绑定的事件的 dom列表
type:'.b-exam-top .b-exam-type'
}
}, (obj) => {
obj.options = obj.options.map(i=>{
console.log(i);
return i.replace(/[A-Za-z][\:]/,'').replace(/[A-Za-z][\:,\:]/,'').replace(/\;/,'').trim()
});
return obj
}, (type, answer, $option,items,$options) => {
// fill answer
if (type === 1 ){
for (let index = 0; index < $options.length; index++) {
const $item = $options.eq(index);
Boolean($.inArray(index,items) + 1) === $item.prop("checked") || $item.click();
}
}else if (type === 0 || type === 3){
$option.click();
}
}).fillAnswer();
}, GLOBAL.delay*1.5);
}
function fuJianText() {
showPanel();
setTimeout(() => {
// sleep(3000)
new WorkerJS({
root: '.topic-cont',
elements: {
question: '.text',
options: '.options li span',//文字的选项列表
$options: '.options li',//绑定的事件的 dom列表
}
}, (obj) => {
obj.options = obj.options.map(i=>{
console.log(i);
return i.replace(/选项[A-Za-z]/,'').trim()
});
if (obj.type.attr('itemtype')==1){
obj.type = 0;
}else if (obj.type.attr('itemtype')==2){
obj.type = 1;
}else if (obj.type.attr('itemtype')==3){
obj.type = 3;
}
console.log(obj);
return obj
}, (type, answer, $option,items,$options) => {
// fill answer
if (type === 1 || type === 0 || type === 3){
for (let index = 0; index < $options.length; index++) {
const $item = $options.eq(index);
Boolean($.inArray(index,items) + 1) === $item.hasClass('correct') || $item.click();
}
}
// else if (type === 4 || type === 2) {
// $option.val(answer)
// }
}).fillAnswer();
}, GLOBAL.delay*1.5);
}
function huNanWork() {
showPanel();
setTimeout(() => {
// sleep(3000)
new WorkerJS({
root: '.exam_question',
elements: {
question: '.exam_question_title div',
options: '.question_select .select_detail',//文字的选项列表
$options: '.question_select li',//绑定的事件的 dom列表
type:'.exam_question_title div strong'
}
}, (obj) => {
return obj
}, (type, answer, $option,items,$options) => {
// fill answer
if (type === 1){
for (let index = 0; index < $options.length; index++) {
const $item = $options.eq(index);
Boolean($.inArray(index,items) + 1) === $item.hasClass('cur') || $item.click();
}
}else if (type === 0 || type === 3 ) {
$option.click();
}
else if (type === 4 || type === 2 || type === 6) {
console.log("自行填充");
}
}).fillAnswer();
}, GLOBAL.delay*1.5);
}
function wanXueText() {
showPanel();
setTimeout(() => {
// sleep(3000)
new WorkerJS({
root: '.question',
elements: {
question: 'tr .nm2',
options: '.grey td p',//文字的选项列表
$options: '.option li label',//绑定的事件的 dom列表
type: 'tr .nm2'
}
}, (obj) => {
obj.question = obj.question.parent().find('td p').text();
// obj.type = obj.type.parent().find('.tc')
return obj
}, (type, answer, $option) => {
// fill answer
if (type === 0 || type === 3 || type === 1) {
$option.click();
// $('.el-button:contains(下一题)').click()
}
}).fillAnswer();
}, GLOBAL.delay * 1.5);
}
function wenJuanAutoFill() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: 'questionContent',
elements: {
question: '.title',
options: '.icheckbox_div .option_label',
$options: '.icheckbox_div label',
type:'.question_num'
}
}, (obj) => {
console.log(obj);
return obj
}, (type, answer, $option) => {
if (type === 0 || type === 3) {
$option.click();
} else if (type === 1) {
if (!$option.attr('class').includes('checked')) {
$option.click();
}
}
}).fillAnswer();
}, GLOBAL.delay);
}
function xueQiExam() {
showPanel();
setTimeout(() => {
// sleep(3000)
new WorkerJS({
root: '.queItemClass',
elements: {
question: 'dt .din:eq(1)',
options: '.clearfix div',//文字的选项列表
$options: '.clearfix .xuan,input',//绑定的事件的 dom列表
}
}, (obj) => {
obj.type = TYPE[obj.type.parent().find('div .fb:eq(0)').text().replace(/[一-二-三-四-五]./,'')];
if (obj.type === 3) {
obj.options = ['正确', '错误'];
}
return obj
}, (type, answer, $option,items,$options) => {
if (type === 1){
for (let index = 0; index < $options.length; index++) {
const $item = $options.eq(index);
// console.log(Boolean($.inArray(index,items) + 1) === $item.hasClass('is-checked'))
console.log(index,JSON.stringify(items));
Boolean($.inArray(index,items) + 1) === $item.parent().hasClass('cur') || $item.click();
}
} else if (type === 0 || type === 3 ) {
$option.click();
}else ;
}).fillAnswer();
}, GLOBAL.delay);
}
function yiBanExam() {
showPanel();
setTimeout(() => {
let ybWork = new WorkerJS({
root: 'main:last',
elements: {
question: 'h3 div',
options: '.mb ul li .flex-auto',//文字的选项列表
$options: '.mb ul li',//绑定的事件的 dom列表
type:'.mb-s'
}
}, (obj) => {
if (obj.type === 3){
obj.options = ['正确', '错误'];
}
console.log(obj);
return obj
}, (type, answer, $option,items,$options) => {
if (type === 1){
for (let index = 0; index < $options.length; index++) {
const $item = $options.eq(index);
// console.log(Boolean($.inArray(index,items) + 1) === $item.hasClass('is-checked'))
console.log(index,JSON.stringify(items));
Boolean($.inArray(index,items) + 1) === $item.hasClass('_c') || $item.click();
}
} else if (type === 0 || type === 3 ) {
$option.click();
}else if (type === 4 || type === 2) {
$('.exam-input').val('answer');
}
}, (auto_jump) => {
if ($('.round:contains("下一题")').hasClass('ghost')) return false
$('.round:contains("下一题")').click();
return true
});
ybWork.fillAnswer();
}, GLOBAL.delay);
}
function yinghuaText() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.courseexamcon-main',
elements: {
question: '.name',
options: '.list li .txt',//文字的选项列表
$options: '.list li .exam-inp',//绑定的事件的 dom列表
type:'.type'
}
}, (obj) => {
if (obj.type === 3){
obj.options = ['正确', '错误'];
}
return obj
}, (type, answer, $option,items,$options) => {
if (type === 1){
for (let index = 0; index < $options.length; index++) {
const $item = $options.eq(index);
// console.log(Boolean($.inArray(index,items) + 1) === $item.hasClass('is-checked'))
console.log(index,JSON.stringify(items));
Boolean($.inArray(index,items) + 1) === $item.prop("checked") || $item.click();
}
} else if (type === 0 || type === 3 ) {
$option.click();
}else ;
}, (auto_jump) => {
if ($('.next_exam').eq(3).prop('style')[0] == 'display' ) return false
$('.next_exam').click();
return true
}).fillAnswer();
}, GLOBAL.delay);
}
function yinghuaEaxe() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.courseexamcon-main',
elements: {
question: '.name',
options: '.list li .txt',//文字的选项列表
$options: '.list li .exam-inp',//绑定的事件的 dom列表
type:'.type'
}
}, (obj) => {
if (obj.type === 3){
obj.options = ['正确', '错误'];
}
return obj
}, (type, answer, $option,items,$options) => {
if (type === 1){
for (let index = 0; index < $options.length; index++) {
const $item = $options.eq(index);
// console.log(Boolean($.inArray(index,items) + 1) === $item.hasClass('is-checked'))
console.log(index,JSON.stringify(items));
Boolean($.inArray(index,items) + 1) === $item.prop("checked") || $item.click();
}
} else if (type === 0 || type === 3 ) {
$option.click();
}else ;
}, (auto_jump) => {
if ($('.next_exam').eq(3).prop('style')[0] == 'display' ) return false
$('.next_exam').click();
}).fillAnswer();
}, GLOBAL.delay);
}
function wenJuanExam() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.g-mn',
elements: {
question: '.m-question .tigan',
options: '.question-block .xuanxiang',//文字的选项列表
$options: '.question-block .xuanxiang',//绑定的事件的 dom列表
type:'.tixing'
}
}, (obj) => {
if ($('.layui-layer-content').length) {
console.log('我到这了', GLOBAL.loop);
iframeMsg('tip', {type: 'stop', tip: '答题暂停,请自行通过验证'});
GLOBAL.stop = true;
return undefined
}
return obj
}, (type, answer, $option,items,$options) => {
if (type === 1){
for (let index = 0; index < $options.length; index++) {
const $item = $options.eq(index);
// console.log(Boolean($.inArray(index,items) + 1) === $item.hasClass('is-checked'))
console.log(index,JSON.stringify(items));
Boolean($.inArray(index,items) + 1) === $item.parent().find('.icheckbox_square-green').hasClass('checked') || $item.click();
}
if ($option.parent().find('.icheckbox_square-green').hasClass('checked')){
$('.u-btn-next:contains("下一题")').click();
}else {
$('.u-btn-next:contains("下一题")').click();
}
} else if (type === 0 || type === 3 ) {
if ($option.parent().find('.iradio_square-green').hasClass('checked')){
$('.u-btn-next:contains("下一题")').click();
}else {
$option.click();
}
}else if (type === 4 || type === 2) ;else if (type === undefined){
$('.u-btn-next:contains("下一题")').click();
}
}, (auto_jump) => {
return true
}).fillAnswer();
}, GLOBAL.delay);
}
function xiaMenText() {
showPanel();
setTimeout(() => {
// sleep(3000)
new WorkerJS({
root: 'td:contains(\'分)\')',
elements: {
question: 'td:contains(\'分)\')',
options: '.optionUl label .el-radio__label,.el-checkbox__label',//文字的选项列表
$options: '.optionUl label',//绑定的事件的 dom列表
}
}, (obj) => {
obj.question = obj.type;
obj.options =obj.question.parent().next().find('tbody tbody td:last-child').map((i,y)=>{ return $(y).text() });
obj.type = 0;
obj.$options = obj.question.parent().next().find('tbody tbody input:last-child').map((i,y)=>{ return y });
obj.question = $(obj.question).text();
console.log(obj);
return obj
}, (type, answer, $option,items,$options) => {
if (type === 0 || type === 3 ) {
$option.click();
}
}).fillAnswer();
}, GLOBAL.delay);
}
function guangKaiText() {
showPanel();
setTimeout(() => {
// sleep(3000)
new WorkerJS({
root: '.formulation',
elements: {
question: '.qtext',
options: '.answer div label',//文字的选项列表
$options: '.answer div label',//绑定的事件的 dom列表
}
}, (obj) => {
if (obj.type.find('.answer div label').length===2 ){
obj.type = 3;
}else if (obj.type.find('.answer div label').length >=4 && obj.type.find('.answer input').eq(-1).attr('type')==='checkbox'){
obj.type = 1;
}else if (obj.type.find('.answer div label').length >= 4 && obj.type.find('.answer input').eq(-1).attr('type')==='radio'){
obj.type = 0;
}
obj.options = obj.options.map(i => {
return formatString(i.trim())
});
return obj
}, (type, answer, $option, items, $options) => {
// defaultClick($options, items, $item.hasClass('onChecked'))
if (type === 1 ){
for (let index = 0; index < $options.length; index++) {
const $item = $options.eq(index);
Boolean($.inArray(index,items) + 1) === $item.parent().find('input').eq(-1).prop('checked') || $item.click();
}
}else if (type === 3 || type === 0) {
$option.click();
}
},()=>{
setTimeout(() => {
$('.submitbtns .btn-primary').click();
}, GLOBAL.time / 5);
}).fillAnswer();
}, GLOBAL.delay * 1.5);
}
function danweiExam() {
hookJSON();
showPanel();
setTimeout(() => {
// sleep(3000)
new WorkerJS({
root: '.tm',
elements: {
question: '.tmnrbj span:last-child',
options: '.van-radio-group .dxt .van-radio__label,.van-checkbox__label',//文字的选项列表
$options: '.van-radio-group .dxt .van-radio__label,.van-checkbox__label,.van-field__control',//绑定的事件的 dom列表
type: '.tmnrbj span'
}
}, async (obj) => {
obj.answer = GLOBAL.json[jQuery('.tmnrbj span:last-child').text().match(/^(\d+)、/)[1] - 1].answerKey;
obj.question = formatString(obj.question);
console.log(GLOBAL.json[GLOBAL.index - 1]);
console.log(obj);
return obj
}, (type, answer, $option) => {
if (type === 0 || type === 3 || type === 1) {
$option.click();
}
}, () => {
jQuery('.xyt').click();
return true
}
).fillAnswer();
}, GLOBAL.delay * 1.5);
}
function deYangAgaintext() {
showPanel();
setTimeout(() => {
// sleep(3000)
new WorkerJS({
root: '#divProblemArea',
elements: {
question: '#ulProblems li:first',
options: '#ulProblems .answer',//文字的选项列表
$options: '#ulProblems .answer input',//绑定的事件的 dom列表
}
}, (obj) => {
if ($('#ulProblems .answer input').length < 3 && $('#ulProblems .answer input').eq(0).attr('type') === 'radio') {
obj.type = 3;
obj.options = ['正确', '错误'];
}else if ($('#ulProblems .answer input').length > 2 && $('#ulProblems .answer input').eq(0).attr('type') === 'radio'){
obj.type = 0;
}else if ($('#ulProblems .answer input').length > 2 && $('#ulProblems .answer input').eq(0).attr('type') === 'checkbox'){
obj.type = 1;
}
return obj
}, (type, answer, $option,items,$options) => {
// fill answer
if (type === 1){
for (let index = 0; index < $options.length; index++) {
const $item = $options.eq(index);
Boolean($.inArray(index,items) + 1) === $item.prop('checked') || $item.click();
}
}else if (type === 0 || type === 3 ) {
$option.click();
}
else ;
},()=>{
if ($('.dlg').length) return false
$('#divBtns input:eq(1)').click();
return true
}).fillAnswer();
}, GLOBAL.delay);
}
function ziBoText() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.header-left .trueorfalse .sub',
elements: {
question: '.mb10',
options: '.options li',
$options: '.options li'
}
}, (obj) => {
obj.type = TYPE[obj.type.parent().prev().text().split(':')[0].trim()];
obj.options = obj.options.map(i => {
return formatString(i.replaceAll(/[a-zA-z]\)\s+/g, '').replaceAll(/^[a-z]\s+/g, '').replaceAll(/^[a-z]、\s+/g, '').trim())
});
return obj
},(type, answer, $option,items,$options) => {
// fill answer
if (type === 1 ){
for (let index = 0; index < $options.length; index++) {
const $item = $options.eq(index);
Boolean($.inArray(index,items) + 1) === $item.hasClass("active") || $item.click();
}
} else if (type === 0 || type === 3 ) {
$option.click();
}
}).fillAnswer();
}, GLOBAL.delay);
}
function heBeiExam() {
showPanel();
setTimeout(() => {
// sleep(3000)
new WorkerJS({
root: '.examItem',
elements: {
question: '.examItemRight .question',
options: '.examItemRight ul li span',//文字的选项列表
$options: '.examItemRight ul li',//绑定的事件的 dom列表
}
}, (obj) => {
obj.type = TYPE[obj.type.parent().find('.questTitle b').text()];
return obj
}, (type, answer, $option,items,$options) => {
// fill answer
if (type === 1){
for (let index = 0; index < $options.length; index++) {
const $item = $options.eq(index);
Boolean($.inArray(index,items) + 1) === $item.hasClass('cur') || $item.click();
}
}else if (type === 0 || type === 3 ) {
$option.click();
}
else if (type === 4 || type === 2 || type === 6) {
console.log("自行填充");
}
}).fillAnswer();
}, GLOBAL.delay*1.5);
}
function boJiaoExam() {
showPanel();
setTimeout(() => {
// sleep(3000)
new WorkerJS({
root: '.stem-container',
elements: {
question: '.stem span',
options: '.option div .optStem',//文字的选项列表
$options: '.option div input',//绑定的事件的 dom列表
}
}, (obj) => {
obj.type = TYPE[obj.type.parent().parent().find('.description').text().split(' ')[1]];
if (obj.type === 3){
obj.options = ['正确','错误'];
}
return obj
}, (type, answer, $option,items,$options) => {
// fill answer
if (type === 1 || type === 0 || type === 3 ) {
$option.click();
}
else if (type === 4 || type === 2 || type === 6) {
console.log("自行填充");
}
}).fillAnswer();
}, GLOBAL.delay*1.5);
}
function baoDingExam() {
showPanel();
setTimeout(() => {
// sleep(3000)
new WorkerJS({
root: '.item_li',
elements: {
question: '.item_title',
options: 'ul li label',//文字的选项列表
$options: 'ul li input',//绑定的事件的 dom列表
}
}, (obj) => {
if (obj.$options.length === 2 ){
obj.type = 3;
}else if (obj.$options.length > 2 && obj.$options.eq(0).attr('type') === 'radio'){
obj.type = 0;
}else if (obj.$options.length > 2 && obj.$options.eq(0).attr('type') != 'radio'){
obj.type = 1;
}
console.log(obj);
return obj
}, (type, answer, $option,items,$options) => {
// fill answer
if (type === 1 || type === 0 || type === 3 ) {
$option.click();
}
else if (type === 4 || type === 2 || type === 6) {
console.log("自行填充");
}
}).fillAnswer();
}, GLOBAL.delay*1.5);
}
function jinPaiExam() {
showPanel();
setTimeout(() => {
// sleep(3000)
new WorkerJS({
root: '.test-type-box ul .white-bg',
elements: {
question: '.position-relative h3',
options: '.test-option label p:last-child',//文字的选项列表
$options: '.test-option label input',//绑定的事件的 dom列表
}
}, (obj) => {
obj.question = obj.question.replace(/题目\d+\:/,'').trim().replace(/^\d+./, '');
obj.type =TYPE[obj.type.parent().parent().find('.test-type-tips').text().replace(/[一-二-三-四-五]./,'').replace(/\(.*?\)/g,'')];
if (obj.$options.length > 2 && obj.$options.eq(0).hasClass('radiobox')){
obj.type = 0;
}
console.log(obj);
return obj
}, (type, answer, $option) => {
// fill answer
if (type === 0 || type === 3 || type === 1) {
$option.click();
}
$('.answer-sheet li').eq(GLOBAL.index).click();
}).fillAnswer();
}, GLOBAL.delay * 1.5);
}
function tangShanExam() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.ui-question-group .ui-question',
elements: {
question: '.ui-question-title .ui-question-content-wrapper',
options: '.ui-question-options .ui-question-content-wrapper',//文字的选项列表
$options: '.ui-question-options .ui-question-options-order',//绑定的事件的 dom列表
}
}, (obj) => {
obj.type = TYPE[obj.type.parent().find('h2').text().replace(/[0-9]./,'').trim()];
console.log(obj);
return obj
}, (type, answer, $option,items,$options) => {
// fill answer
if (type === 0 || type === 3 || type === 1) {
$option.click();
}
else if (type === 4 || type === 2) {
$option.val(answer);
}
}).fillAnswer();
}, GLOBAL.delay);
}
function dianMoExam() {
showPanel();
setTimeout(() => {
// sleep(3000)
new WorkerJS({
root: '#question div div:first',
elements: {
question: 'div:first',
options: 'div:first ~ div',//文字的选项列表
$options: 'div:first ~ div input',//绑定的事件的 dom列表
}
}, (obj) => {
obj.type =TYPE[$('.alert #groupNameSpan').text()];
console.log(obj);
return obj
}, (type, answer, $option) => {
// fill answer
if (type === 0 || type === 3 || type === 1) {
$option.click();
}
},()=>{
$('.w-100 .btn-light:eq(1)').click();
return true
}).fillAnswer();
}, GLOBAL.delay);
}
function dianMoText() {
showPanel();
setTimeout(() => {
// sleep(3000)
new WorkerJS({
root: '.question',
elements: {
question: ' div div:first div:first',
options: ' div div:first div:first ~ div',//文字的选项列表
$options: ' div div:first div:first ~ div input',//绑定的事件的 dom列表
}
}, (obj) => {
obj.type =TYPE[$('h3').text().replace(/[一-二-三-四-五]./,'').trim()];
obj.question = obj.question.replace(/[0-9]./,'');
console.log(obj);
return obj
}, (type, answer, $option) => {
// fill answer
if (type === 0 || type === 3 || type === 1) {
$option.click();
}
}).fillAnswer();
}, GLOBAL.delay);
}
function jingGuanExam() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.wrapper > div',
elements: {
question: '.dx',
options: 'p',//文字的选项列表
$options: 'p input',//绑定的事件的 dom列表
}
}, (obj) => {
if ($('.wrapper .cl').length >0){
obj.question =obj.type.text().replace(/[0-9]、/,'').replace(/\(.*?\)/g,'').trim().split('$')[0].replace(/\(.*?\)/g,'').trim();
}else {
obj.question = obj.question.replace(/[0-9]、/,'').replace(/\(.*?\)/g,'').trim();
}
obj.type = TYPE[obj.type.parent().find('h2').text().replace(/[一-二-三-四-五]、/,'').replace(/\(.*?\)/g,'').trim()];
obj.options = obj.options.map(item=>{
return item.replace(/[A-Za-z][\:]/,'').replace(/[A-Za-z][\:,\:]/,'').replace(/\;/,'').trim()
});
console.log(obj);
return obj
}, (type, answer, $option,items,$options) => {
// fill answer
if (type === 0 || type === 3 || type === 1) {
$option.click();
}
else if (type === 4 || type === 2) {
$option.val(answer);
}
}).fillAnswer();
}, GLOBAL.delay);
}
function exam2_euibe_com_exam() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.question',
elements: {
question: '.wenti',
options: 'li label span',//文字的选项列表
$options: 'li label',//绑定的事件的 dom列表
}
}, (obj) => {
obj.type = getQuestionType($('.question_head').text());
return obj
}, (type, answer, $option) => {
// fill answer
if (type === 0 || type === 3 || type === 1) {
$option.click();
}
},()=>{
$('.paginationjs-next').click();
return true
}).fillAnswer();
}, GLOBAL.delay);
}
function lzwyedu_jijiaool_com_exam() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.test_item',
elements: {
question: '.test_item_tit',
options: '.test_item_theme label .zdh_op_con',//文字的选项列表
$options: 'li label input',//绑定的事件的 dom列表
}
}, (obj) => {
obj.question = obj.question.replace(/该题未做$/,'').replace(/^\d+\./,'');
obj.type = getQuestionType(obj.type.prevAll('.test_item_type:first').text());
return obj
}, (type, answer, $option) => {
if (type === 0 || type === 3 || type === 1) {
$option.click();
}
}).fillAnswer().then();
}, GLOBAL.delay);
}
function zzx_ouchn_edu_cn_exam() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.subject',
elements: {
question: '.question span',
options: '.answer>span>p:first-child',//文字的选项列表
$options: '.answer>span>p:first-child',//绑定的事件的 dom列表
}
}, (obj) => {
if (obj.$options.length > 1){
obj.type = 0;
}
console.log(obj);
return obj
}, (type, answer, $option) => {
if (type === 0 || type === 3 || type === 1) {
$option.click();
}
}).fillAnswer().then();
}, GLOBAL.delay);
}
function havust_hnscen_cn_exam() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.main .mt_2 > div',
elements: {
question: '.flex_row+div',
options: '.flex_row+div+div .el-radio__label,.el-checkbox__label',
$options: '.flex_row+div+div .el-radio__label,.el-checkbox__label',
type:'.flex_row .mr_2'
}
}, (obj) => {
console.log(obj);
return obj
}, (type, answer, $option) => {
if (type === 0 || type === 3 || type === 1) {
$option.click();
}
}).fillAnswer().then();
}, GLOBAL.delay);
}
function www_zygbxxpt_com_exam() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.Body',
elements: {
question: '.QName',
options: '.QuestinXuanXiang p:parent',
$options: '.QuestinXuanXiang p:parent',
type:'.QName span'
}
}, (obj) => {
obj.question = obj.question.replace(/\([^\)]*\)/g,"").replace(/\【.*?\】/g,'');
obj.options = obj.options.map(item=>{
return item.split('>').pop().trim()
});
console.log(obj);
return obj
}, (type, answer, $option) => {
if (type === 0 || type === 3 || type === 1) {
$option.click();
}
}).fillAnswer().then();
}, GLOBAL.delay);
}
function scmvc_class_gaoxiaobang_com_exam() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '#choiceList .listLi,#answersList .listLi,#trueFalseList .listLi',
elements: {
question: '.tit-cont',
options: '.option .optionLi-cont',
$options: '.option .optionLi-cont',
}
}, (obj) => {
if (obj.$options.length === 2){
obj.type = 3;
}else {
obj.type = TYPE[obj.type.parent().prev().text().replace(/[0-9]./,'').replace(/[一-二-三-四-五]./,'').split('(')[0].replace(/\s+/,'')];
}
console.log(obj);
return obj
}, (type, answer, $option) => {
if (type === 0 || type === 3 || type === 1) {
$option.click();
}
}).fillAnswer();
}, GLOBAL.delay);
}
function jiaoPeiexam() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '#productTable',
elements: {
question: '#lblQuestion',
options: '#rblItems label , #cblItems label',
$options: '#rblItems input , #cblItems input',
type:'#lblType'
}
}, (obj) => {
const d = new Date();
if (d.getDate() == 30){
return obj
}
}, (type, answer, $option,items,$options) => {
if (type === 0 || type === 3 || type === 1) {
$option.click();
}
else if (type === 4 || type === 2) {
$option.val(answer);
}
}, () => {
jQuery('#btnNex').click();
return true
}).fillAnswer();
}, GLOBAL.delay);
}
function jmi_jiaowu_cfyedu_com_exam() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.el-col-16>div:not(.eaxm-description)>div>div',
elements: {
question: '.title',
options: '.radio-option',//文字的选项列表
$options: '.radio-option',//绑定的事件的 dom列表
}
}, (obj) => {
obj.options = obj.options.map(i=>{
return i
});
obj.type = getQuestionType(obj.type.parent().parent().find('.content-title').text().split(':')[1]);
console.log(obj);
return obj
}, (type, answer, $option) => {
if (type === 0 || type === 3 || type === 1) {
$option.click();
}
}).fillAnswer();
}, GLOBAL.delay);
}
function training_tisco_com_cn_exam() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.exam-list',
elements: {
question: '.exam-list-title',
options: '.exam-list-point label span:last-child',
$options: '.exam-list-point label',
}
}, (obj) => {
obj.question = obj.question.replace('纠错收藏','').replace(/^\d+\./,'').replace(/\(.+?\)/g,'').trim();
obj.type = TYPE[obj.type.parent().parent().find('.exam-mask-title').text().replace(/[0-9]./,'').replace(/[一-二-三-四-五]./,'').split('(')[0].replace(/\s+/,'')];
console.log(obj);
return obj
}, (type, answer, $option) => {
if (type === 0 || type === 3 || type === 1) {
$option.click();
}
}).fillAnswer();
}, GLOBAL.delay);
}
function www_pbaqks_com_exam() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.main-container .single-box',
elements: {
question: '.single-main:first',
options: '.choose-box label',
$options: '.choose-box label',
type: '.single-container .font-title',
answer: 'input:eq(1)'
}
}, (obj) => {
obj.question = obj.question.replace('标准答案', '').replace(/^\d+\./, '').replace(/\[.+?\]/g, '').trim();
return obj
}, (type, answer, $option, items, $options) => {
if (type === 1) {
for (let index = 0; index < $options.length; index++) {
const $item = $options.eq(index);
Boolean($.inArray(index, items) + 1) === $item.find('input').is(':checked') || $item.click();
}
} else if (type === 0 || type === 3) {
$option.click();
}
}, () => {
}, () => {
jQuery('.main-container .confirm a:last-child').click();
}).fillAnswer();
}, GLOBAL.delay);
}
function www_pbaqks_com_text() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.main-container .single-box',
elements: {
question: '.single-main:first',
options: '.choose-box label',
$options: '.choose-box label',
type: '.single-container .font-title',
answer: 'input:eq(1)'
}
}, (obj) => {
obj.question = obj.question.replace('标准答案', '').replace(/^\d+\./, '').replace(/\[.+?\]/g, '').trim();
return obj
}, (type, answer, $option, items, $options) => {
if (type === 1) {
for (let index = 0; index < $options.length; index++) {
const $item = $options.eq(index);
Boolean($.inArray(index, items) + 1) === $item.find('input').is(':checked') || $item.click();
}
} else if (type === 0 || type === 3) {
$option.click();
}
}, () => {
}, () => {
if ($('.main-container .single-box').find('input:eq(1)').eq(GLOBAL.index-1).attr('value').split('').length>1){
jQuery('.main-container .confirm a:last-child').click();
}
}).fillAnswer();
}, GLOBAL.delay);
}
function xjskk_open_com_cn_exam() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.list-children-class',
elements: {
question: '.children-value-class',
options: '.list-options-class .option-value-class',
$options: '.list-options-class .option-value-class'
}
}, (obj) => {
obj.type = TYPE[obj.type.parent().find('.parent').text().replace(/[一-二-三-四-五]./,'').replace(/\(.+?\)/g,'').trim()];
console.log(obj);
return obj
},(type, answer, $option,items,$options) => {
// fill answer
if (type === 0 || type === 3 || type === 1) {
$option.click();
}
}).fillAnswer();
}, GLOBAL.delay);
}
function cjConsole_wuxiantiaozhan_com_exam() {
showPanel();
setTimeout(() => {
// sleep(3000)
new WorkerJS({
root: '.ant-list-items .ant-list-item',
elements: {
question: 'div>div:first-child>span:last-child',
options: 'div>div:last-child>label',//文字的选项列表
$options: 'div div:last-child label input',//绑定的事件的 dom列表
}
}, (obj) => {
if (obj.$options.length < 3 && obj.$options.eq(0).attr('type') === 'radio') {
obj.type = 3;
obj.options = ['正确', '错误'];
}else if (obj.$options.length > 2 && obj.$options.eq(0).attr('type') === 'radio'){
obj.type = 0;
}else if (obj.$options.length > 2 && obj.$options.eq(0).attr('type') === 'checkbox'){
obj.type = 1;
}
console.log(obj);
return obj
}, (type, answer, $option,items,$options) => {
// fill answer
if (type === 0 || type === 3 || type === 1) {
$option.click();
}
}).fillAnswer();
}, GLOBAL.delay);
}
function gptExam() {
showPanel();
setTimeout(() => {
// sleep(3000)
new WorkerJS({
root: '.question',
elements: {
question: '.question-stem',
options: '.questions-choices label',//文字的选项列表
$options: '.questions-choices label',//绑定的事件的 dom列表
}
}, (obj) => {
obj.options = obj.options.map(i=>{
console.log(i);
return i.replace(/[A-Za-z]/,'').trim()
});
obj.type = TYPE[obj.type.parent().parent().find('.topic-headline').text().replace(/\共.+?\题/g,'').split(',')[0].trim()];
console.log(obj);
return obj
}, (type, answer, $option,items,$options) => {
// fill answer
if (type === 1 || type === 0 || type === 3){
$option.click();
}
// else if (type === 4 || type === 2) {
// $option.val(answer)
// }
}).fillAnswer();
}, GLOBAL.delay*1.5);
}
function hnzkw_org_cn_text() {
showPanel();
setTimeout(() => {
console.log(GLOBAL.json);
new WorkerJS({
root: '.examList',
elements: {
question: '.text',
options: '.el-radio-group label',//文字的选项列表
$options: '.el-radio-group label',//绑定的事件的 dom列表
type: '.status'
}
}, (obj) => {
const ele = GLOBAL.json[GLOBAL.index-1];
obj.question = ele.question;
obj.answer = ele.answer;
obj.type = ele.type;
console.log(obj);
return obj
}, (type, answer, $option) => {
if (type === 0 || type === 3 || type === 1) {
$option.click();
} else if (type === 4 || type === 2) {
UE$1.getEditor($option.attr('name')).setContent(answer);
}
}).fillAnswer();
}, GLOBAL.delay);
}
function xuexi_jsou_cn_work() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.insert',
elements: {
question: '.window-title',
options: '.questionId-option .option-title div[style^=display]',
$options: '.questionId-option .option-title .numberCover',
}
}, (obj) => {
obj.type = {'1':0,'2':1}[obj.type.find('.question-type').val()];
console.log(obj);
return obj
},(type, answer, $option,items,$options) => {
// fill answer
if (type === 0 || type === 3 || type === 1) {
$option.click();
}
}).fillAnswer();
}, GLOBAL.delay);
}
function czvtc_cjEdu_com_exam() {
showPanel();
setTimeout(() => {
new WorkerJS({
root: '.el-container .all_subject>.el-row',
elements: {
question: '.stem div:last-child',
options: '.el-radio-group .el-radio__label',//文字的选项列表
$options: '.el-radio-group .el-radio__original',//绑定的事件的 dom列表
}
}, (obj) => {
if (obj.$options.length < 3 && obj.$options.eq(0).attr('type') === 'radio') {
obj.type = 3;
}else if (obj.$options.length > 2 && obj.$options.eq(0).attr('type') === 'radio'){
obj.type = 0;
}else if (obj.$options.length > 2 && obj.$options.eq(0).attr('type') === 'checkbox'){
obj.type = 1;
}
return obj
}, (type, answer, $option) => {
// fill answer
if (type === 0 || type === 3 || type === 1) {
$option.click();
}
}).fillAnswer();
}, GLOBAL.delay);
}
var _self = unsafeWindow;
exports.top = _self;
try {
/** 解决兼容性问题 部分浏览器没有replaceAll*/
String.prototype.replaceAll = function (s1, s2) {
return this.replace(new RegExp(s1, "gm"), s2);
};
window.onload = hookHTML;
loadAdPng().then(r => {
});
while (exports.top !== _self.top) {
exports.top = exports.top.parent.document ? exports.top.parent : _self.top;
if (exports.top.location.pathname === '/mycourse/studentstudy') break;
}
} catch (err) {
exports.top = _self;
}
var parent = _self === exports.top ? self : _self.parent,
Ext = _self.Ext || parent.Ext || {},
UE$1 = _self.UE;
/**
* 顶层窗口监听 iframeNode 的参数
*/
exports.top.addEventListener("message", (event => {
if (event.data.type === 'jump') {
GLOBAL.index++;
iframeMsg('tip', {tip: '准备答第' + (GLOBAL.index + 1) + '题'});
} else if (event.data.type === 'stop') {
GLOBAL.stop = event.data.val;
} else if (event.data.type === 'start_pay') {
if (event.data.flag) {
if (String(GM_getValue('token')).length === 10 || String(GM_getValue('token')).length === 11) {
iframeMsg('tip', {tip: '已开启请求收费题库,已实时生效'});
GM_setValue('start_pay', event.data.flag);
iframeMsg('start_pay', true);//真正打开付费题库
} else {
iframeMsg('tip', {tip: '系统检测您的token可能输入有误,请检查'});
}
} else {
iframeMsg('tip', {tip: '已关闭请求收费题库,已实时生效'});
GM_setValue('start_pay', event.data.flag);
iframeMsg('start_pay', false);//真正关闭付费题库
}
} else if (event.data.type === 'auto_jump') {
GM_setValue('auto_jump', event.data.flag);
iframeMsg('tip', {tip: '已' + (event.data.flag ? '开启' : '关闭') + '自动切换,页面刷新后生效'});
} else if (event.data.type === 'confim') {
if (event.data.token.length === 10 || event.data.token.length === 11) {
GM_setValue('token', event.data.token);
iframeMsg('tip', {tip: '成功设置token,请点击开启付费题库'});
} else {
iframeMsg('tip', {tip: '系统检测您的token可能输入有误,请检查'});
}
}
}), false);
/**
* 类似于老板键,上箭头隐藏,下箭头显示
*/
$(document).keydown(function (event) {
if (event.keyCode === 38) {
$('#model-id').hide();
} else if (event.keyCode === 40) {
$('#model-id').show();
} else if (event.keyCode === 37) {//永久隐藏答案提示框
$('#model-id').hide();
GM_setValue('hide', true);
} else if (event.keyCode === 39) {//将答案提示框复位到 左上角
$('#model-id').show();
GM_setValue('hide', false);
GM_setValue('pos', '50px,50px');
} else if (event.keyCode === 83) {//暂停答题
GLOBAL.stop = true;
iframeMsg('stop', GLOBAL.stop);
} else if (event.keyCode === 68) {//继续答题
GLOBAL.stop = false;
iframeMsg('stop', GLOBAL.stop);
}
});
setTimeout(() => {
start();
}, GLOBAL.time);
if (location.pathname === '/exam/examflow_index.action') {
ZjyExam();
} else if (location.pathname === '/study/directory/dir_course.html') {
let set = setInterval(() => {
if ($('.panel_item').length !== 0) {
clearInterval(set);
zjyFile();
}
}, 1000);
} else if ((location.pathname === '/exam/test/reVersionTestStartNew' || location.pathname === '/exam-ans/exam/test/reVersionTestStartNew') && location.href.includes('newMooc=true')) {
chaoxingNewExam(1);
} else if ((location.pathname === '/exam/test/reVersionTestStartNew' || location.pathname === '/exam-ans/exam/test/reVersionTestStartNew') && !location.href.includes('newMooc=true')) {
chaoxingOldExam();
} else if (location.pathname === '/work/doHomeWorkNew') {
chaoxingQuiz();
} else if (location.pathname === '/mooc2/exam/preview' || location.pathname === '/exam-ans/mooc2/exam/preview') {
chaoxingNewExam(0);
} else if (location.pathname === '/mooc2/work/dowork') {
chaoxingNewWork();
} else if (location.pathname === '/study/homework/do.html' || location.pathname === '/study/workExam/testWork/preview.html' || location.pathname === '/study/onlineExam/preview.html' || location.pathname === '/study/workExam/homeWork/preview.html' || location.pathname === '/study/workExam/onlineExam/preview.html') {
mooc_icve_com_cn();
} else if (location.pathname === '/stuExamWeb.html' && location.href.includes('/webExamList/dohomework/')) {
setIntervalFunc(()=>{return $('.answerCard').length}, zhsExam);
} else if (location.pathname === '/stuExamWeb.html' && location.href.includes('/webExamList/doexamination/')) {
setIntervalFunc(()=>{return $('.answerCard').length}, zhsExam);
} else if (location.href.includes('/atHomeworkExam/stu/homeworkQ/exerciseList') || location.href.includes('atHomeworkExam/stu/examQ/examexercise')) {
zhsIntegral();
} else if (location.pathname === '/web/index.php' && location.href.includes('m=reply')) {
ybkExam();
} else if (location.pathname === '/study/works/works.html' || location.pathname === '/study/exam/exam.html') {
icve_works();
} else if (location.pathname.includes('/v2/web/cloud/student/exercise/')) {
yktText();
} else if (location.host === 'examination.xuetangx.com' && location.pathname.includes('/exam/')) {
yktExam();
} else if (location.host === 'changjiang-exam.yuketang.cn' && location.pathname.includes('/exam/')) {
yktExam();
} else if (location.pathname.includes('/v/quiz/quiz_result')) {
setIntervalFunc(()=>{return $('#cover').attr('style').includes('display: none;')}, yktOldExam);
} else if (location.host === 'www.xuetangx.com' && location.pathname.includes('/exercise/')) {
xtzxText();
} else if (location.pathname.includes('/v2/web/studentLog')) {
collectYkt();
} else if (location.host === 'examination.xuetangx.com' && location.pathname.includes('/result')) {
collectPtTkt();
} else if (location.pathname.includes('/Exam/OnlineExamV2/')) {
setIntervalFunc(()=>{return $('.ExamTime').length}, zgdzText);
} else if (location.pathname.includes('/evaluation_wechat/examination/detail/')) {
xetText();
} else if (location.pathname.includes('/evaluation_wechat/examination/review')) {
collectXiaoETong();
} else if (location.pathname.includes('/study/html/content/studying/')) {
hookJSON();
anHuiText();
} else if (location.pathname === '/study/html/content/tkOnline/' || location.pathname === '/study/html/content/sxsk/') {
hookJSON();
setIntervalFunc(()=>{return $('.e-save-b').length}, anHuiText);
} else if (location.pathname === ('/study/html/content/assignment/')) {
collectAnHuiJiXuJiaoYu();
} else if (location.host === 'www.ttcdw.cn' && location.pathname.includes('/p/uExam/goExam/')) {
hookJSON();
setIntervalFunc(()=>{return !$('div').hasClass('entrying-wrap')}, xinJiangAgain);
} else if (location.pathname === ('/page/quiz/stu/answerQuestion')) {//随堂练习
chaoxingQuizNew();
} else if (location.pathname.includes('/Portal/student/practice-improve/')) {
collect_booway();
} else if (location.host === 'lms.ouchn.cn' && location.pathname.includes('/exam/')) {
setIntervalFunc(()=>{return $('.loading-gif').hasClass('ng-hide') && $('.hd .examinee .submit-label').eq(0).text() === ""}, guokaiText);
} else if (location.pathname.includes('/memberFront/paper.zhtml')) {
setIntervalFunc(()=>{return $('#question_').attr('style').length === 0}, renweiText);
} else if (location.pathname.includes('/exam/student/exam/resource/paper_card2')) {
setIntervalFunc(()=>{return $('.ui-question-answer-right').length === 0}, HuaQiaoAgain);
} else if (location.href.includes('/onlineclass/exam/')) {
setIntervalFunc(()=>{return $('.excer_list_view___YOSCa').length}, daLianText);
} else if (location.pathname.includes('/study/assignment/preview.aspx')||location.pathname.includes('/study/assignment/continuation.aspx')) {
shangHaiOpen();
} else if (location.pathname === ('/web-qz/moni/exam/exam_toExam.action')) {
zheJiangExam();
} else if (location.host === "www.zjooc.cn") {
hookJSON();
setIntervalFunc(()=>{return location.pathname.includes('/homework/do/') || location.pathname.includes('/test/do/') || location.pathname.includes('/exam/do/')}, zheJiangOnline);
} else if (location.host === "www.zjooc.cn") {
setIntervalFunc(()=>{return $('.settingsel-dialog').css('display') === 'none'}, zheJiangText);
} else if (location.host.includes('qingshuxuetang') && location.pathname.includes('/Student/ExercisePaper')) {
qingShuText();
} else if (location.host.includes('qingshuxuetang') && (location.pathname.includes('/Student/MakeupExamPaper') || location.pathname.includes('Student/ExamPaper'))) {
qingShuExam();
} else if (location.pathname === '/learnCourse/learnCourse.html') {
setIntervalFunc(()=>{return $('.question-setting-panel').length}, youXueText);
} else if (location.host === 'utest.ulearning.cn' && location.pathname === ('/')) {
setIntervalFunc(()=>{return $('.section-area').length === 1}, youXueExam);
} else if (location.pathname === ('/umooc/learner/homework.do')) {
setIntervalFunc(()=>{return $('.multiple-choices').length}, youXueWork);
} else if (location.pathname === ('/app-afstudy/self_test.html')) {
moNiExam();
} else if ((location.host === 'examination.xuetangx.com' || location.host === 'changjiang-exam.yuketang.cn') && location.pathname.includes('/result/')) {
hookJSON();
} else if (location.pathname === ('/Web_Study/Student/Center/MyWorkOnView') || location.pathname === ('/Web_Study/Student/Center/MyExamOnView')) {
setIntervalFunc(()=>{return $('.samllTopicNav').length}, fuJianText);
} else if (location.host === 'quiz.qingshuxuetang.com' && location.pathname.includes('/Student/Quiz/Detail')) {
qingShuText();
} else if (location.host === 'www.jwstudy.cn' && location.pathname.includes('/User/Student/myhomework.aspx') || location.pathname.includes('/examing.aspx')) {
huNanWork();
} else if (location.pathname.includes('/sls/N2014_StudyController/next')) {
wanXueText();
} else if (location.host.includes('wenjuan.com') && location.pathname === '/s/') {
wenJuanAutoFill();
} else if (location.pathname.includes('/oxer/page/ots/examIndex.html')) {
setIntervalFunc(()=>{return $('.tika_topline').length}, xueQiExam);
} else if (location.host === 'exam.yooc.me' && location.pathname.includes('/group')) {
setIntervalFunc(()=>{return $('.jsx-3527395752').length}, yiBanExam);
} else if (location.host === 'mooc.yncjxy.com' && location.pathname.includes('/user/work') || location.pathname.includes('/user/exam')) {
setIntervalFunc(()=>{return $('#stateName').text().trim() === '进行中'}, yinghuaText);
} else if (location.host === 'mooc.yncjxy.com' && location.pathname.includes('/user/exam')) {
setIntervalFunc(()=>{return $('#stateName').text().trim() === '进行中'}, yinghuaEaxe);
} else if (location.host === 'ncexam.cug.edu.cn' && location.pathname.includes('/Test/ViewTest')) {
setIntervalFunc(()=>{return $('.z333').length}, collectZg);
} else if (location.pathname.includes('/exam/ExamRd/Answer')) {
wenJuanExam();
} else if (location.pathname.includes('/nec/student/exam/exam-paper!test')) {
xiaMenText();
} else if (location.host === 'course.ougd.cn' && location.pathname.includes('/mod/quiz/attempt.php')) {
guangKaiText();
} else if (location.href.includes('ksnr') || location.href.includes('lxnr')) {
danweiExam();
} else if (location.host.includes('h5.xiaoeknow') || location.href.includes('/exam/h5_evaluation/')) {
xetH5();
} else if (location.href.includes('/dypx/OnlineExam/Exam.aspx')) {
deYangAgaintext();
} else if (location.host === 'studentexambaseh5.zhihuishu.com') {
setIntervalFunc(()=>{return $('.questionContent').length}, zhsIntegral1);
} else if (location.pathname.includes('/practice/start')) {
ziBoText();
} else if (location.pathname.includes('paperid')) {
heBeiExam();
} else if (location.pathname.includes('/exam/answer.html')) {
setIntervalFunc(()=>{return $('#question').length}, boJiaoExam);
} else if (location.pathname.includes('/cuggw/rs/olex_exam')) {
setIntervalFunc(()=>{return $('.paper_body').length}, baoDingExam);
} else if (location.host === 'www.goldgame.com.cn' && location.href.includes('/TestPage')) {
setIntervalFunc(()=>{return $('.tab-btn-box li').length}, jinPaiExam);
} else if (location.pathname.includes('/pages/exam/exam.html')) {
setIntervalFunc(()=>{return $('.exam-content-block .exam-content-topic').length}, qingDaoExam);
} else if (location.pathname.includes('/exam/student/exam/')) {
setIntervalFunc(()=>{return $('.ui-question-group').length}, tangShanExam);
} else if (location.pathname.includes('/Exam/StartExam')) {
dianMoExam();
} else if (location.pathname.includes('/Course/TestPaper')) {
dianMoText();
} else if (location.pathname.includes('/bsmytest/startTi.do')) {
jingGuanExam();
} else if (location.hostname === "exam2.euibe.com" && location.pathname === '/KaoShi/ShiTiYe.aspx') {
//match https://exam2.euibe.com/KaoShi/ShiTiYe.aspx?dtid=930&stid=136512&yh=1#question136512
exam2_euibe_com_exam();
}else if (location.hostname === "lzwyedu.jijiaool.com" && location.pathname.includes('/Student/ExamManage/CourseOnlineExamination')) {
//match http://lzwyedu.jijiaool.com/Student/ExamManage/CourseOnlineExamination/e5899557-bfd8-4b1a-85f7-09152c1340a1
lzwyedu_jijiaool_com_exam();
}else if (location.hostname === "zzx.ouchn.edu.cn" && location.pathname.includes('/edu/public/student/')) {
zzx_ouchn_edu_cn_exam();
}else if (location.hostname === "havust.hnscen.cn" && location.pathname.includes('/stuExam/examing/')) {
havust_hnscen_cn_exam();
}else if (location.hostname === "www.zygbxxpt.com" && location.pathname.includes('/exam')) {
www_zygbxxpt_com_exam();
}else if (location.hostname === "xuexi.jsou.cn" && location.pathname.includes('/jxpt-web/student/newHomework/showHomeworkByStatus')) {
xuexi_jsou_cn_work();
}else if (location.host.includes('czvtc.cj-edu.com') && location.pathname.includes('/ExamInfo') ){
setIntervalFunc(()=>{return $('.el-container .all_subject>.el-row')}, czvtc_cjEdu_com_exam);
}
exports.Ext = Ext;
exports.UE = UE$1;
exports._self = _self;
exports.parent = parent;
Object.defineProperty(exports, '__esModule', { value: true });
return exports;
})({});