您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
自动完成兰州大学评教任务,从“个人工作台”->“听评课" 中进入
当前为
// ==UserScript== // @name 兰大自动评教 // @namespace https://github.com/LaLa-HaHa-Hei/ // @version 1.1.1 // @description 自动完成兰州大学评教任务,从“个人工作台”->“听评课" 中进入 // @author 代码见三 // @license GNU GPLv3 // @match *://jwqe.lzu.edu.cn:8080/* // ==/UserScript== (function () { 'use strict'; const sleep = (delay) => new Promise((resolve) => setTimeout(resolve, delay)) main() async function main() { if (await isEvaluatePage()) { let buttonElement = injectButton() buttonElement.addEventListener('click', autoEvaluate) } } // 用是否有uni-view.xspj元素判断是否是评教页面 async function isEvaluatePage() { let xspjElement = null for (let i = 0; i < 20 && xspjElement === null; i++) { await sleep(500) xspjElement = document.querySelector('uni-view.xspj') } return xspjElement !== null } // 注入按钮 function injectButton() { const buttonElement = document.createElement('button') buttonElement.id = 'autoEvaluateButton' buttonElement.textContent = '自动评教(请先打开某个评教项目)' buttonElement.style.cssText = ` position: absolute; top: 2px; right: 10px; z-index: 9999; height: 40px; width: 280px; line-height: 40px; background-color: #FF8F2B; color: #fff; border: none; border-radius: 5px; font-size: 16px; cursor: pointer; `; document.body.appendChild(buttonElement) return buttonElement } // 自动评教 async function autoEvaluate() { // 由于每次评价完上次页面DOM会被消毁,所以需要每次都获取allList,而不能用for去遍历allList!!! while (true) { const wpList = document.querySelectorAll('uni-view.wp') // 未评 const wwcList = document.querySelectorAll('uni-view.wwc') // 未完成 const allList = [...wpList, ...wwcList] if (allList.length === 0) { alert('已完成评教') return } const firstClassElement = allList[0].parentElement.parentElement.parentElement // console.log(firstClassElement) // 课程评教 const kcpj = firstClassElement.querySelector('uni-view.box-hjjs-footer-kcpj') if (kcpj) { kcpj.click() await sleep(2000) if (document.querySelector('.box3-1')) { await evaluate() } else { document.querySelector('.header_left_back').click() } await sleep(1000) } // 教师评教 const jspj = firstClassElement.querySelector('uni-view.box-hjjs-footer-jspj') if (jspj) { jspj.click() await sleep(500) document.evaluate("//uni-view[text()='评价']", document).iterateNext().click() await sleep(2000) await evaluate() await sleep(1000) } console.log("完成") await sleep(1500) } async function evaluate() { // .box2-1列表 const box2List = document.querySelectorAll('uni-view.box2-1'); // .box2中倒数两个是输入,前面的全是选择 for (let i = 0; i < box2List.length - 3; i++) { const uniListCellList = box2List[i].querySelectorAll('.uni-list-cell'); uniListCellList[0].click() } // 不能全选“完全符合”,最后一个选“符合”,也就是第二个选项 { const uniListCellList = box2List[box2List.length - 3].querySelectorAll('.uni-list-cell'); uniListCellList[1].click() } //给最后两个输入 “课堂氛围很好,老师很认真” 和 “无” { const textareaElement = box2List[box2List.length - 2].querySelector('textarea.uni-textarea-textarea'); const event = new InputEvent('input'); textareaElement.value = "课堂氛围很好,老师很认真"; textareaElement.dispatchEvent(event); } { const textareaElement = box2List[box2List.length - 1].querySelector('textarea.uni-textarea-textarea'); const event = new InputEvent('input'); textareaElement.value = "无"; textareaElement.dispatchEvent(event); } // 提交 document.querySelector('.box3-1').click() await sleep(1000) document.querySelector(".confirm.btn").click(); } } })();