Greasy Fork

Greasy Fork is available in English.

XAUAT 自动评教脚本

XAUAT 自动评教

// ==UserScript==
// @name         XAUAT 自动评教脚本
// @namespace    http://tampermonkey.net/
// @version      1.1
// @description  XAUAT 自动评教
// @author       huang
// @match        https://swjw.xauat.edu.cn/evaluation-student-frontend/*
// @grant        none
// ==/UserScript==

(function () {
    'use strict';

    console.log('xauat自动评教脚本-1.1');

    // 延迟函数
    function sleep(ms) {
        return new Promise(resolve => setTimeout(resolve, ms));
    }

    // 等待元素加载
    function waitForElement(selector) {
        return new Promise(resolve => {
            const observer = new MutationObserver(() => {
                const element = document.querySelector(selector);
                if (element) {
                    observer.disconnect();
                    resolve(element);
                }
            });

            observer.observe(document.body, { childList: true, subtree: true });
        });
    }

    // 自动答题函数
    async function autoEvaluate() {
        try {
            await waitForElement('.item');
            console.log('开始自动评教');

            const items = document.querySelectorAll('.item');
            for (let item of items) {
                let option_count = 0;
                const options = item.querySelectorAll('label.el-checkbox');

                for (let option of options) {
                    const checkbox = option.querySelector('input.el-checkbox__original');
                    if (checkbox && !checkbox.checked) {
                        checkbox.click();
                        console.log(`选项 ${checkbox.value} 已选中`);
                    }
                    await sleep(1);
                    if (++option_count >= 3) break;
                }
            }

            const textarea = document.querySelector('textarea.el-textarea__inner');
            if (textarea) {
                textarea.value = '这个老师真棒!';
                textarea.dispatchEvent(new Event('input', { bubbles: true }));
                console.log('已填写评教内容');
            }

            const submitBtn = document.querySelector('.el-button.el-button--primary.el-button--small');
            if (submitBtn) {
                submitBtn.click();
                console.log('提交按钮点击成功');
            }

            console.log('评教完成并提交');
        } catch (e) {
            console.error('autoEvaluate 出错:', e);
        }
    }

    // 自动进入评教页面函数
    async function autoEntry() {
        try {
            const btnSelector = 'button.el-button.el-button--primary.el-button--mini.is-plain.is-round.borderhalf';
            await waitForElement(btnSelector);

            const btn = document.querySelector(btnSelector);
            if (btn) {
                btn.click();
                console.log('已点击评教按钮');
            }
        } catch (e) {
            console.error('autoEntry 出错:', e);
        }
    }

    // 路由监听
    function setupRouteHook() {
        try {
            const appVue = document.querySelector("#app").__vue__;
            if (!appVue || !appVue.$router || !appVue.$router.afterHooks) {
                console.warn('Vue Router 未正确初始化');
                return;
            }

            appVue.$router.afterHooks.push((to, from) => {
                if (to.path.startsWith("/timelySurvey/")) {
                    autoEvaluate();
                } else if (to.path.startsWith("/timely-evaluation/myparticipate")) {
                    autoEntry();
                }
            });
        } catch (e) {
            console.error('路由监听设置失败:', e);
        }
    }

    // 初始化
    (async () => {
        setupRouteHook();
    })();
})();