您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
neu 评教助手
- // ==UserScript==
- // @name NEU evaluatevl
- // @namespace http://tampermonkey.net/
- // @version 2024-11-30
- // @description neu 评教助手
- // @author yukaChen
- // @match http://210.30.204.138/school/proj/evaluatevl-0/module/task/org/*/mytask*
- // @icon https://www.google.com/s2/favicons?sz=64&domain=204.138
- // @grant none
- // @license MIT
- // ==/UserScript==
- (function () {
- "use strict";
- const currentUrl = window.location.href;
- let urlArr = currentUrl.split("/");
- function delay(milliseconds) {
- return new Promise((resolve) => {
- setTimeout(resolve, milliseconds);
- });
- }
- async function evaluate() {
- console.log("start evaluating....");
- let tableRows = document.querySelectorAll("tr"); // btw I don't know why someone still use <table> tag today XD
- let saveResultBtn = document.querySelector("#btn-saveResult"); // the The second to last to submit
- function checkAllRadio(tableRows) {
- tableRows.forEach((item) => {
- const itemChildren = item.children;
- // console.log(itemChildren.length);
- if (itemChildren.length > 5) {
- Array.from(itemChildren).forEach((child, index) => {
- // what index equals to will be varied based on many things.......
- // basically, it matched the scores you give your teacher
- if (index === 4) {
- const inputButton = child.querySelector("input[type='radio']");
- // console.log(child);
- if (inputButton) {
- // console.log(inputButton);
- inputButton.click();
- }
- }
- });
- }
- });
- }
- async function submitResult(saveResultBtn) {
- saveResultBtn.click();
- await delay(1 * 500);
- let confirmBtn = document.querySelector("button.confirm"); // confirm button, it's not on the dom
- confirmBtn.click();
- }
- function next() {
- let returnBtn = document.querySelector("#btn-goBack");
- returnBtn.click();
- }
- checkAllRadio(tableRows);
- await delay(1 * 1000);
- submitResult(saveResultBtn);
- await delay(1 * 1000);
- next();
- }
- function startNextEvaluate() {
- console.log("start next evaluating....");
- let startButton = document.querySelector("a.btn-primary");
- if (startButton) {
- startButton.click();
- }
- }
- function main() {
- // usually, there is a detail path (/detail/...) in evaluate page
- if (urlArr.find((item) => item === "detail")) {
- setTimeout(evaluate, 1 * 1000);
- } else {
- setTimeout(startNextEvaluate, 1 * 1000);
- }
- }
- setTimeout(main, 2 * 1000);
- })();