速通NUIST学习通评教

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

目前為 2024-06-04 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @name 速通NUIST学习通评教
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.12
  5. // @description 南信大学习通的新版评教令人窒息。代码默认给所有老师全10分,大家都开心(想改分的改第98行),使用方法下面。
  6. // @author 咩咩怪!
  7. // @match *://i.chaoxing.com/*
  8. // @match *://i.chaoxing.com/*
  9. // @grant none
  10. // @license MIT
  11. // ==/UserScript==
  12.  
  13.  
  14.  
  15. // 创建悬浮窗
  16. var floatWindow = document.createElement('div');
  17. floatWindow.className = 'float-window';
  18. floatWindow.innerHTML = `
  19. <h3>打开到评教第一页</h3><br><h3>然后点开始运行</h3>
  20. <button id="anniu" class="float-button" onclick="changeParamAndText()">开始运行</button>
  21. `;
  22. document.body.appendChild(floatWindow);
  23.  
  24. // 创建样式
  25. var style = document.createElement('style');
  26. style.innerHTML = `
  27. .float-window {
  28. position: fixed;
  29. top: 0;
  30. left: 50%;
  31. transform: translateX(-50%);
  32. width: 120px;
  33. height: 80px;
  34. background-color: lightblue;
  35. border: 1px solid black;
  36. text-align: center;
  37. padding: 10px;
  38. z-index: 9999;
  39. }
  40.  
  41. .float-button {
  42. margin-top: 10px;
  43. width: 100px;
  44. height: 40px;
  45. font-size: 16px;
  46. cursor: pointer;
  47. z-index: 9999;
  48. }
  49. `;
  50. document.head.appendChild(style);
  51.  
  52. // 定义一个变量,初始值为1
  53. var param = 0;
  54. // 定义一个变量,表示是否还有 fontColor02 节点对象存在
  55. var hasFontColor02 = true;
  56. // 定义一个变量,表示是否需要换页
  57. var needChangePage = false;
  58. // 定义一个变量,表示当前的页码
  59. var pageNum = 0;
  60. // 定义一个变量,表示当前页的节点对象
  61. var curPage = null;
  62. // 使用 while 循环,当还有 fontColor02 节点对象存在时,继续循环
  63. var nummnum=1
  64.  
  65. // 定义一个函数,用来改变参数和按钮的文本
  66. function changeParamAndText() {
  67. // 切换参数的值,如果是1就变成0,如果是0就变成1
  68. param = param === 1 ? 0 : 1;
  69.  
  70. // 获取id为anniu的按钮元素
  71. var button = document.getElementById("anniu");
  72.  
  73. // 根据参数的值来改变按钮的文本
  74. if (param === 1) {
  75. button.innerHTML = "停止运行";
  76. setTimeout(() => {
  77. start_main();
  78. }, 500);
  79.  
  80. } else {
  81. button.innerHTML = "开始运行";
  82. }
  83.  
  84. // 打印参数的值
  85. console.log(param);
  86. }
  87.  
  88.  
  89. // 定义一个延时函数,返回一个 Promise 对象
  90. const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
  91.  
  92. // 定义一个 putdefen 函数,使用 async/await 语法
  93. async function putdefen() {
  94. await delay(400);
  95. console.log("进入点击函数");
  96. // 获取所有类名为 blueInp dafen 的元素
  97. const elements = document.getElementById("frame_content").contentWindow.document.getElementsByClassName("blueInp dafen");
  98. // 使用 for...of 循环遍历元素列表
  99. for (const element of elements) {
  100. // 设置元素的 value 属性为 10
  101. element.value = 10;//改分值在这里★★★
  102. }
  103. // 获取类名为 botBtnBox 的元素
  104. await delay(400);
  105. const box1 = document.getElementById("frame_content").contentWindow.document.querySelector(".botBtnBox");
  106. console.log(box1)
  107. // 如果 box 元素没有子节点,或者只有一个子节点,跳过这一步
  108. try{
  109. if (box1.children.length < 2) return;
  110. // 获取 box 元素的第二个子节点
  111. const button = box1.children[1];
  112. // 模拟用户点击元素
  113. button.click();
  114. }catch(error){console.log("是我想的那样");console.log(error.name + ": " + error.message);}
  115. // 等待 300 毫秒
  116. await delay(500);
  117. // 获取类名为 layui-layer-btn0 的元素
  118. const button2 = document.getElementById("frame_content").contentWindow.document.querySelector(".layui-layer-btn0");
  119. // 模拟用户点击元素
  120. button2.click();
  121. // 等待 100 毫秒
  122. await delay(400);
  123. // 获取 id 名字为 pageindex 的节点
  124. let pageindex = document.getElementById("frame_content").contentWindow.document.getElementById("pageindex");
  125. // 获取 pageindex 节点的所有子节点
  126. let children = pageindex.children;
  127. // 使用 for...of 循环遍历子节点列表
  128. for (const child of children) {
  129. // 如果子节点的 innerHTML 在 "1" 到 "9" 之间,表示是页码节点
  130. if (child.innerHTML >= "1" && child.innerHTML <= "9") {
  131. if (Number(child.innerHTML) === pageNum) {
  132. // 模拟用户点击子节点
  133. console.log("点击函数回到当前页",Number(child.innerHTML))
  134. child.click();
  135. // 跳出 for 循环
  136. await delay(400);
  137. break;
  138. }
  139. }
  140. }
  141.  
  142. }
  143.  
  144. // 定义一个主函数,使用 async/await 语法
  145. async function start_main() {
  146. console.log("进入主函数")
  147. while (true) {
  148. await delay(100);
  149. if (param === 1){
  150. // 获取 id 名字为 pageindex 的节点
  151. console.log("第",nummnum,"次循环")
  152. nummnum=nummnum+1
  153. await delay(200);
  154. let pageindex = document.getElementById("frame_content").contentWindow.document.getElementById("pageindex");
  155. // 获取 pageindex 节点的所有子节点
  156. let children = pageindex.children;
  157. // 使用 for...of 循环遍历子节点列表
  158. for (const child of children) {
  159. console.log("进入确定页码");
  160. // 如果子节点的 innerHTML 在 "1" 到 "9" 之间,表示是页码节点
  161. if (child.innerHTML >= "1" && child.innerHTML <= "9") {
  162. // 获取子节点的类名
  163. let className = child.className;
  164. // 如果类名包含 cur,表示是当前页的节点
  165. if (className.includes("cur")) {
  166. // 把子节点赋值给 curPage
  167. curPage = child;
  168. console.log(child.innerHTML);
  169. // 获取子节点的 innerHTML,转换为数字
  170. pageNum = Number(child.innerHTML);
  171. console.log("当前页码为:",Number(child.innerHTML))
  172. }
  173. }
  174. }
  175.  
  176.  
  177. // 检查是否还有待评价的 fontColor02 节点
  178. hasFontColor02 = false;
  179. // 再次获取所有类名为 fontColor02 的元素
  180. const elements2 = document.getElementById("frame_content").contentWindow.document.getElementsByClassName("fontColor02");
  181. // 使用 for...of 循环遍历元素列表
  182. for (const element of elements2) {
  183. console.log("检查是否还有待评价的,决定是否换页");
  184. // 获取元素的文字内容,包括 HTML 标签
  185. const text = element.innerHTML;
  186. // 如果文字是“待评价”,表示还有待评价的 fontColor02 节点
  187. if (text === "待评价") {
  188. // 设置 hasFontColor02 为 true
  189. console.log("还有待评价的");
  190. hasFontColor02 = true;
  191. needChangePage = false;
  192. // 跳出 for 循环
  193. break;
  194. }
  195. }
  196. // 如果没有待评价的 fontColor02 节点,设置 needChangePage 为 true,表示需要换页
  197. if (!hasFontColor02) {
  198. needChangePage = true;
  199. console.log("该换页了")
  200. }
  201.  
  202.  
  203. if (needChangePage) {
  204. console.log("进入换页");
  205. let pageindex = document.getElementById("frame_content").contentWindow.document.getElementById("pageindex");
  206. // 获取 pageindex 节点的所有子节点
  207. let children = pageindex.children;
  208. // 使用 for...of 循环遍历子节点列表
  209. for (const child of children) {
  210. // 如果子节点的 innerHTML 在 "1" 到 "9" 之间,表示是页码节点
  211. if (child.innerHTML >= "1" && child.innerHTML <= "9") {
  212. // 如果等于 pageNum+1,表示是要更换的页码
  213. if (Number(child.innerHTML) === pageNum+1) {
  214. // 模拟用户点击子节点
  215. console.log("要换成",pageNum+1)
  216. child.click();
  217. // 跳出循环
  218. pageNum=pageNum+1;
  219. break;
  220. }
  221. }
  222. }
  223. }
  224.  
  225. // 获取所有类名为 fontColor02 的元素
  226. const elements = document.getElementById("frame_content").contentWindow.document.getElementsByClassName("fontColor02");
  227. // 使用 for...of 循环遍历元素列表
  228. for (const element of elements) {
  229. console.log("检查是否是待评价的,是就点击");
  230. // 获取元素的文字内容,包括 HTML 标签
  231. const text = element.innerHTML;
  232. // 如果文字是“待评价”,则执行以下操作
  233. if (text === "待评价") {
  234.  
  235. // 调用点击函数
  236. element.click();
  237. await putdefen();
  238. await delay(400);
  239. break;
  240. }
  241. }
  242.  
  243. }else{break;}
  244. }console.log("整个函数结束了")
  245. }
  246.  
  247. var image1 = document.getElementById("anniu");
  248. image1.onclick = changeParamAndText;

QingJ © 2025

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