您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
zh-cn
// ==UserScript== // @name 辅助学习 // @namespace Violentmonkey Scripts // @match http://kxxy.tjrtvu.edu.cn/NewPages/StudyDxxt.aspx // @grant none // @description zh-cn // @version 0.0.1.20190930023222 // ==/UserScript== //发送ajax就靠它 let aj = class Ajax { constructor() { //定义一个变量用于存放XMLHttpRequest对象 this.xmlHttpRequest = null; if (window.ActiveXObject) { //IE浏览器的创建方式 this.xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP"); } else if (window.XMLHttpRequest) { //Netscape浏览器中的创建方式 this.xmlHttpRequest = new XMLHttpRequest(); } } send(method, url, success, err) { if (this.xmlHttpRequest != null) { //创建HTTP请求 this.xmlHttpRequest.open(method, url, true) //设置HTTP请求状态变化的函数 this.xmlHttpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); //发送请求 this.xmlHttpRequest.send(); this.xmlHttpRequest.onreadystatechange = this.httpStateChange.bind(this, success, err); } } httpStateChange(success, err) { if (this.xmlHttpRequest.readyState == 4) { //判断异步调用是否成功 if (this.xmlHttpRequest.status == 200 || this.xmlHttpRequest.status == 0) { success(this.xmlHttpRequest); } else { err() } } } } //判断是否需要发送网络请求 let need_send =(url_obj,callback)=>{ // 获取这个页面的一个标记 let flag = `${url_obj.CourseId}_${url_obj.CourseCategoryId}` //获得的结果字符串 let result_str = null; if(sessionStorage.getItem(flag)){ callback( sessionStorage.getItem(flag) ) }else{ sessionStorage.clear(); console.log("进行了请求",url_obj) let r_url = `http://kxxy.tjrtvu.edu.cn/NewPages/StudentXtjx.aspx?CategoryId=${url_obj.CourseCategoryId}&CourseId=${url_obj.CourseId}` send_Obj(r_url,(str)=>{ sessionStorage.setItem(flag,str) callback(str); }); } } //发送ajax请求 let send_Obj = (url,callback)=>{ let ajax = new aj(); let end = null; ajax.send( 'get', url, (res) => { end = math_Obj(res.responseText); callback(end) }, () => { console.log('err') } ) } //解析答案页面 let math_Obj = (text)=>{ let arr = [] let a_obj = text.match(/<body.*?>([\s\S]*?)<\/body>/)[0] let b_obj = a_obj.replace(/<div class="postTitle"><b>正确答案:<\/b><span>(.*?)<\/span><\/div>/g,function(){ arr.push(arguments[1]); }); return JSON.stringify(arr); } //解析url let parse_url = (url)=>{ let obj ={}; url.map((item)=>{ let a = item.split("="); obj[ a[0] ]= a[1] }) return obj } //河蟹后获取链接 let get_url = ()=>{ let flag={ next:true, index:0, } let d = document.querySelectorAll('.chapter_menu_second') let url = null; while(flag.next){ if(flag.index==d.length){ url = d[flag.index].children[0].href flag.next = false }else{ if(d[flag.index].style.backgroundRepeat!==""){ url = d[flag.index].children[0].href flag.next = false } flag.index++ } } return url.split("?")[1].split("&") } //获取答案后,调用点击事件 let get_result = (arr)=>{ let num = document.querySelector('select[name="ctl00$Cph$CoursePostInfoNew1$DrpPostList"]').selectedIndex let result = arr[num].split("") let type = document.querySelector('span[id="ctl00_Cph_CoursePostInfoNew1_LblType"]').textContent ; not_click(); click_button(type,result) next_click() } //点击答案 let click_button = (type,result)=>{ switch(type){ case "单选题": // div .ctl00_Cph_CoursePostInfoNew1_PanelSingle 块 // ctl00_Cph_CoursePostInfoNew1_SingleB 单个选项 document.querySelector(`input[id=ctl00_Cph_CoursePostInfoNew1_Single${result[0]}]`).click(); break; case "多选题": // div .ctl00_Cph_CoursePostInfoNew1_PanelMultiple 块 // ctl00_Cph_CoursePostInfoNew1_MultipleA 单个选项 result.forEach((item)=>{ document.querySelector(`input[id=ctl00_Cph_CoursePostInfoNew1_Multiple${item}]`).click(); }) break; case "判断题": // div .ctl00_Cph_CoursePostInfoNew1_PanelJudge 块 // ctl00_Cph_CoursePostInfoNew1_JudgeA 单个选项 document.querySelector(`input[id=ctl00_Cph_CoursePostInfoNew1_Judge${result[0]}]`).click(); break; default: console.log("other",type) break; } document.querySelector("input[id=ctl00_Cph_CoursePostInfoNew1_BtnOK_Submint]").click() } //点击下一个 let next_click = ()=>{ let next = document.querySelector("a[id=ctl00_Cph_CoursePostInfoNew1_CoursePostInfoNext1_ExampleNext]") let back = document.querySelector("input[id=ctl00_BtnExit]") if(next){ next.click(); }else{ //document.location.href ="http://kxxy.tjrtvu.edu.cn/NewPages/StudyCourse_new.aspx" //http://kxxy.tjrtvu.edu.cn/newindex/login.aspx //back.click(); sessionStorage.clear(); document.location.href ="http://kxxy.tjrtvu.edu.cn/newindex/login.aspx" } } //点击知识要点 let not_click =()=>{ let button = document.querySelector("input[id=ctl00_Cph_CoursePostInfoNew1_CoursePostInfoKnowledge1_Look]") if(button){ button.click(); document.querySelector("div[id=KnowLedgeInfoDivClose]").click(); } } //主函数 let ok = () => { //获取get请求 let url = get_url() let url_obj = parse_url(url); //判断是否需要发送ajax请求,二层回调地狱23333333~ need_send(url_obj,(str)=>{ get_result(JSON.parse(str)); }) } window.addEventListener('load', ok);