// ==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;