// ==UserScript== // @name 速通NUIST学习通评教 // @namespace http://tampermonkey.net/ // @version 1.0 // @description 南信大学习通的新版评教令人窒息。代码默认给所有老师全10分,大家都开心(想改分的改第98行) // @author 咩咩怪! // @match *://i.chaoxing.com/* // @match *://i.chaoxing.com/* // @grant none // @license MIT // @downloadURL none // ==/UserScript== $("body").append(`

打开到评教第一页


然后点开始运行

`); $("head").append(``); // 定义一个变量,初始值为1 var param = 0; // 定义一个变量,表示是否还有 fontColor02 节点对象存在 var hasFontColor02 = true; // 定义一个变量,表示是否需要换页 var needChangePage = false; // 定义一个变量,表示当前的页码 var pageNum = 0; // 定义一个变量,表示当前页的节点对象 var curPage = null; // 使用 while 循环,当还有 fontColor02 节点对象存在时,继续循环 var nummnum=1 // 定义一个函数,用来改变参数和按钮的文本 function changeParamAndText() { // 切换参数的值,如果是1就变成0,如果是0就变成1 param = param === 1 ? 0 : 1; // 获取id为anniu的按钮元素 var button = document.getElementById("anniu"); // 根据参数的值来改变按钮的文本 if (param === 1) { button.innerHTML = "停止运行"; setTimeout(() => { start_main(); }, 500); } else { button.innerHTML = "开始运行"; } // 打印参数的值 console.log(param); } // 定义一个延时函数,返回一个 Promise 对象 const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); // 定义一个 putdefen 函数,使用 async/await 语法 async function putdefen() { await delay(400); console.log("进入点击函数"); // 获取所有类名为 blueInp dafen 的元素 const elements = document.getElementById("frame_content").contentWindow.document.getElementsByClassName("blueInp dafen"); // 使用 for...of 循环遍历元素列表 for (const element of elements) { // 设置元素的 value 属性为 10 element.value = 10;//改分值在这里★★★ } // 获取类名为 botBtnBox 的元素 await delay(400); const box1 = document.getElementById("frame_content").contentWindow.document.querySelector(".botBtnBox"); console.log(box1) // 如果 box 元素没有子节点,或者只有一个子节点,跳过这一步 try{ if (box1.children.length < 2) return; // 获取 box 元素的第二个子节点 const button = box1.children[1]; // 模拟用户点击元素 button.click(); }catch(error){console.log("是我想的那样");console.log(error.name + ": " + error.message);} // 等待 300 毫秒 await delay(500); // 获取类名为 layui-layer-btn0 的元素 const button2 = document.getElementById("frame_content").contentWindow.document.querySelector(".layui-layer-btn0"); // 模拟用户点击元素 button2.click(); // 等待 100 毫秒 await delay(400); // 获取 id 名字为 pageindex 的节点 let pageindex = document.getElementById("frame_content").contentWindow.document.getElementById("pageindex"); // 获取 pageindex 节点的所有子节点 let children = pageindex.children; // 使用 for...of 循环遍历子节点列表 for (const child of children) { // 如果子节点的 innerHTML 在 "1" 到 "9" 之间,表示是页码节点 if (child.innerHTML >= "1" && child.innerHTML <= "9") { if (Number(child.innerHTML) === pageNum) { // 模拟用户点击子节点 console.log("点击函数回到当前页",Number(child.innerHTML)) child.click(); // 跳出 for 循环 await delay(400); break; } } } } // 定义一个主函数,使用 async/await 语法 async function start_main() { console.log("进入主函数") while (true) { await delay(100); if (param === 1){ // 获取 id 名字为 pageindex 的节点 console.log("第",nummnum,"次循环") nummnum=nummnum+1 await delay(200); let pageindex = document.getElementById("frame_content").contentWindow.document.getElementById("pageindex"); // 获取 pageindex 节点的所有子节点 let children = pageindex.children; // 使用 for...of 循环遍历子节点列表 for (const child of children) { console.log("进入确定页码"); // 如果子节点的 innerHTML 在 "1" 到 "9" 之间,表示是页码节点 if (child.innerHTML >= "1" && child.innerHTML <= "9") { // 获取子节点的类名 let className = child.className; // 如果类名包含 cur,表示是当前页的节点 if (className.includes("cur")) { // 把子节点赋值给 curPage curPage = child; console.log(child.innerHTML); // 获取子节点的 innerHTML,转换为数字 pageNum = Number(child.innerHTML); console.log("当前页码为:",Number(child.innerHTML)) } } } // 检查是否还有待评价的 fontColor02 节点 hasFontColor02 = false; // 再次获取所有类名为 fontColor02 的元素 const elements2 = document.getElementById("frame_content").contentWindow.document.getElementsByClassName("fontColor02"); // 使用 for...of 循环遍历元素列表 for (const element of elements2) { console.log("检查是否还有待评价的,决定是否换页"); // 获取元素的文字内容,包括 HTML 标签 const text = element.innerHTML; // 如果文字是“待评价”,表示还有待评价的 fontColor02 节点 if (text === "待评价") { // 设置 hasFontColor02 为 true console.log("还有待评价的"); hasFontColor02 = true; needChangePage = false; // 跳出 for 循环 break; } } // 如果没有待评价的 fontColor02 节点,设置 needChangePage 为 true,表示需要换页 if (!hasFontColor02) { needChangePage = true; console.log("该换页了") } if (needChangePage) { console.log("进入换页"); let pageindex = document.getElementById("frame_content").contentWindow.document.getElementById("pageindex"); // 获取 pageindex 节点的所有子节点 let children = pageindex.children; // 使用 for...of 循环遍历子节点列表 for (const child of children) { // 如果子节点的 innerHTML 在 "1" 到 "9" 之间,表示是页码节点 if (child.innerHTML >= "1" && child.innerHTML <= "9") { // 如果等于 pageNum+1,表示是要更换的页码 if (Number(child.innerHTML) === pageNum+1) { // 模拟用户点击子节点 console.log("要换成",pageNum+1) child.click(); // 跳出循环 pageNum=pageNum+1; break; } } } } // 获取所有类名为 fontColor02 的元素 const elements = document.getElementById("frame_content").contentWindow.document.getElementsByClassName("fontColor02"); // 使用 for...of 循环遍历元素列表 for (const element of elements) { console.log("检查是否是待评价的,是就点击"); // 获取元素的文字内容,包括 HTML 标签 const text = element.innerHTML; // 如果文字是“待评价”,则执行以下操作 if (text === "待评价") { // 调用点击函数 element.click(); await putdefen(); await delay(400); break; } } }else{break;} }console.log("整个函数结束了") } var image1 = document.getElementById("anniu"); image1.onclick = changeParamAndText;