一维大成湘才培训网自动答题助手 - 四则运算(延迟执行 + 容错版)

用于一维大成湘才培训网自动答题插件

// ==UserScript==
// @name         一维大成湘才培训网自动答题助手 - 四则运算(延迟执行 + 容错版)
// @namespace    http://tampermonkey.net/
// @version      1.1
// @description  用于一维大成湘才培训网自动答题插件
// @author       yqls
// @match        *://hunan.bjewaytech.com/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    console.log("【自动答题脚本】已加载");

    // 设置延迟时间为 8000 毫秒(8 秒)
    const delayTime = 8000;

    // 延迟启动自动答题逻辑
    setTimeout(() => {
        console.log("【调试】延迟 8 秒后启动自动答题逻辑");
        monitorAnswerDialog();
    }, delayTime);

    // 持续监测答题框是否出现(含初始化检测)
    function monitorAnswerDialog() {
        // 初始化检测:弹窗是否已存在
        const existingDialog = document.querySelector('.el-dialog__wrapper .el-dialog[aria-label="回答问题卡"]');
        if (existingDialog && isVisible(existingDialog)) {
            console.log("【调试】初始化检测到答题弹窗");
            autoSolveMath(existingDialog);
            return;
        }

        // 持续监听 DOM 变化
        const observer = new MutationObserver((mutations) => {
            const dialog = document.querySelector('.el-dialog__wrapper .el-dialog[aria-label="回答问题卡"]');
            if (dialog && isVisible(dialog)) {
                console.log("【调试】MutationObserver 检测到答题弹窗");
                autoSolveMath(dialog);
            }
        });

        observer.observe(document.body, { childList: true, subtree: true });
        console.log("【调试】MutationObserver 已启动");
    }

    // 判断元素是否可见
    function isVisible(element) {
        return window.getComputedStyle(element).display !== 'none';
    }

    // 获取题目文本(增强兼容性)
    function getQuestionText(dialog) {
        const rawQuestion =
            dialog.querySelector('h3 p p')?.innerText ||
            dialog.querySelector('.answer_list_head h3')?.innerText ||
            dialog.querySelector('.answer_list_head')?.innerText ||
            '';
        return rawQuestion.trim();
    }

    // 提取数学表达式
    function extractMathExpression(questionText) {
        const cleanedExpr = questionText.replace(/[^\d+\-*/÷×().]/g, '');
        const exprMatch = cleanedExpr.match(/([0-9+\-*/÷×().]+)/);
        return exprMatch ? exprMatch[1].trim().replace(/×/g, '*').replace(/÷/g, '/') : null;
    }

    // 自动解题函数
    function autoSolveMath(dialog) {
        console.log("【调试】进入 autoSolveMath 函数");

        // 提取题目文本
        const rawQuestion = getQuestionText(dialog);
        console.log("【调试】原始题目文本:", rawQuestion);

        if (!rawQuestion) {
        console.warn("【调试】未能找到题目文本,5秒后重试");
        setTimeout(() => {
            autoSolveMath(dialog); // 5秒后重试当前弹窗
        }, 5000);
            return;
        }

        // 提取数学表达式
        const expr = extractMathExpression(rawQuestion);
        if (!expr) {
            console.warn("【调试】未识别到数学表达式");
            return;
        }
        console.log("【调试】最终表达式:", expr);

        try {
            const result = new Function(`return ${expr}`)();
            console.log("【调试】计算结果:", result);

            // 选择答案
            const options = dialog.querySelectorAll('.el-radio__label p p');
            let found = false;
            for (let option of options) {
                if (option.innerText.trim() === result.toString()) {
                    console.log("【调试】找到正确答案选项");
                    option.closest('.el-radio')?.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true, view: window }));
                    found = true;
                    break;
                }
            }
            if (!found) {
                console.warn("【调试】未找到匹配的答案选项");
            }

            // 自动提交
            const submitBtn = dialog.querySelector('.through_box .el-button') || dialog.querySelector('.el-button');
            if (submitBtn) {
                console.log("【调试】找到提交按钮");
                setTimeout(() => {
                    submitBtn.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true, view: window }));
                }, 500);
            } else {
                console.warn("【调试】未找到提交按钮");
            }

        } catch (e) {
            console.error("【调试】表达式解析失败:", expr, e);
        }
    }
})();

QingJ © 2025

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