速通NUIST学习通评教

南信大学习通的新版评教令人窒息。代码默认给所有老师全10分,大家都开心(想改分的改第98行),使用方法下面。

目前为 2024-06-04 提交的版本。查看 最新版本

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



// 创建悬浮窗
var floatWindow = document.createElement('div');
floatWindow.className = 'float-window';
floatWindow.innerHTML = `
  <h3>打开到评教第一页</h3><br><h3>然后点开始运行</h3>
  <button id="anniu" class="float-button" onclick="changeParamAndText()">开始运行</button>
`;
document.body.appendChild(floatWindow);

// 创建样式
var style = document.createElement('style');
style.innerHTML = `
  .float-window {
    position: fixed;
    top: 0;
    left: 50%;
    transform: translateX(-50%);
    width: 120px;
    height: 80px;
    background-color: lightblue;
    border: 1px solid black;
    text-align: center;
    padding: 10px;
    z-index: 9999;
  }

  .float-button {
    margin-top: 10px;
    width: 100px;
    height: 40px;
    font-size: 16px;
    cursor: pointer;
    z-index: 9999;
  }
`;
document.head.appendChild(style);

  // 定义一个变量,初始值为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;

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址