Auto grading

USTC 自动评价 tqm.ustc.edu.cn

目前为 2022-12-29 提交的版本。查看 最新版本

// ==UserScript==
// @name         Auto grading
// @namespace    http://tampermonkey.net/
// @version      0.2.1
// @description  USTC 自动评价 tqm.ustc.edu.cn
// @author       PRO_2684
// @match        https://tqm.ustc.edu.cn/index.html*
// @icon         https://tqm.ustc.edu.cn/favicon.ico
// @grant        none
// @license      unlicense
// ==/UserScript==

(function() {
    'use strict';
    let standard_answers = {
        '教学内容': ['非常同意'],
        '教学资源': ['非常满意', '非常同意'],
        '教材单列': ['非常满意'],
        '课程难度': ['适合'],
        '教学态度': ['非常同意'],
        '教学水平': ['非常同意'],
        '教学手段': ['非常同意'],
        '教学方法': ['非常同意'],
        '师生互动': ['非常同意'],
        '学习投入': ['3-4小时'],
        '知识掌握': ['非常同意'],
        '能力提升': ['非常同意'],
        '兴趣培养': ['非常同意'],
        '推荐度': ['会'],
        '整体评价': ['非常好'],
        '课程准备': ['非常同意'],
        '实验报告': ['非常同意'],
        '教学表达': ['非常同意'],
        '课程安排': ['非常同意'],
        '课程考核': ['非常同意'],
        '纪律约束': ['非常同意'],
        '教师示范': ['非常同意'],
        '课程氛围': ['非常同意'],
        '素养提升': ['非常同意'],
        '个人发展': ['非常同意'],
        '1.该助教是否随堂听课?': ['全部'],
        '2.该助教批改作业是否认真?': ['非常认真'],
        '3.该助教习题课/答疑课准备是否充分?': ['非常充分'],
        '4.该助教对课程知识的掌握是否扎实?': ['非常扎实'],
        '5.该助教习题课/答疑课互动中表达是否清晰?': ['非常清晰'],
        '6.该助教的综合表现': ['优秀']
    };
    let menu_root;
    function append_link() {
        let auto_grade = document.createElement('a');
        auto_grade.innerText = "自动评价";
        auto_grade.onclick = grade;
        menu_root.appendChild(auto_grade);
    }
    function grade() {
        let questions = document.querySelectorAll("[class|='index_subject']");
        questions.forEach((question) => {
            let required = Boolean(question.querySelector('[class|="index_necessary"]'));
            if (!required) return;
            let tmp = question.querySelector("[class|='index_title']").querySelectorAll('p');
            let title = tmp[tmp.length - 1].innerText;
            let standard_answer = standard_answers[title];
            console.log(`[Auto grading] ${title}: ${standard_answer}`);
            if (standard_answer) {
                let options = question.querySelectorAll('[style="width: 100%;"]');
                options.forEach((option) => {
                    let is_standard_answer = (standard_answer.indexOf(option.innerText) >= 0);
                    if (is_standard_answer) {
                        option.firstChild.click();
                    }
                });
            }
        });
    }
    const root_node = document.getElementById('root');
    const config = { attributes: false, childList: true, subtree: true };
    const callback = function(mutations, observer) {
        menu_root = root_node.querySelector('.ant-menu-root');
        if (menu_root) {
            append_link();
            observer.disconnect();
        }
    }
    const observer = new MutationObserver(callback);
    observer.observe(root_node, config);
})();