🚀 学习通AI刷课答题终极版|💯 全自动刷章节与测测验|🎯 作业自动答题|🧠 AI大模型精准作答|🛠️ 无需配置|长期维护更新

采用DeepSeek大模型,题目识别准、作答快,所有题目均可作答。支持自动刷课、自动答题、自动完成章节测试,简洁界面、稳定服务,持续适配平台更新。

在您安装前,Greasy Fork 希望您知道此脚本声明其包含了一些负面功能。这些功能也许会使脚本作者获利,而不能给您带来任何直接的金钱收益。

您只有在付费后才能使用脚本的全部功能。Greasy Fork 未参与到支付的流程,因此无法验证您是否获得了有价值的东西,亦无法帮助您申请退款。 脚本作者的说明: 脚本存在第三方答题接口付费功能

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         🚀 学习通AI刷课答题终极版|💯 全自动刷章节与测测验|🎯 作业自动答题|🧠 AI大模型精准作答|🛠️ 无需配置|长期维护更新
// @namespace    http://tampermonkey.net/
// @version      1.0.3
// @description  采用DeepSeek大模型,题目识别准、作答快,所有题目均可作答。支持自动刷课、自动答题、自动完成章节测试,简洁界面、稳定服务,持续适配平台更新。
// @author       Peince
// @match        *://*.chaoxing.com/*
// @grant        GM_xmlhttpRequest
// @grant        GM_addStyle
// @grant        GM_getResourceText
// @connect      api.116611.xyz
// @resource     typrMd5Lib https://116611.xyz/typr-md5.js
// @resource     fontTableData https://116611.xyz/table.json
// @license CC-BY-NC-ND-4.0
// @antifeature  payment  脚本存在第三方答题接口付费功能
// @icon          data:image/png;base64,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Z+eaKTvQKyPRFpRTRThQAtFFFBIlFFFACUUUUAFOFNpwoAKKKKYwooooJHUUlGaAFopM0ZoAKKKKACiiigAooopAFFFFABRRRQAtFFFAhaKKKACiiigAoFLRQAClooqgExSEUuaM1ICUUUUAFFFFAC0UlGaAFpRTRThQIWijNJmgBaKSlpgFLSUUAGaXNJiigBc0ZpKTNAC5ooooAKKKKACiiikAUUUUALmgGkoFAhwpwpopRQSx9FJRQSLRSUUALSGijNACGiikoAXNLTc0uaAFopKKADNFFFAxc0ZpKKAFooooAKKKKACiiimIKRjTqjepAv6B/wAh2w/67LXf+LfCQ1FTd2eFuFXlezD09q4Dw7/yHbD/AK7rXuA+7XpYWCnBpnzebVp0a8ZQ7Hgjo0bsjjDKcEehpOnWu+8d+FlUHUrBAp5adR3964H71clWk6bsz2MHio4mnzRCijpRWR2CjpSGlHSkNIBaWkpaAEooooASkNLSGgAooooAWiiigYUUUUAFFFFACiigUUCCilpKCQoopKAFooooAKKKKACiiigBM0UUUxlHvSikFKKR1gKdikFOoASiiigkDTTTjTaACnCkpwoATFGKM0ZoAKKKKYwooooELmjNJRQAuaM0lFAC0UUUCCiiigAooopAFFFFABRRRQAtFFFABS0lAoELRRRQAtFJRQAtGaSiqAKKM0VICZozSkUmKAFooooAKM0lFAC0optKKBDqM0lFAC0UUUwFopKWgBaKbRmgBaKKKACiiigAooooAKKKKQBRRRQAUoFApRQIMUtLRQSwozRRQSGaM0UUAGaTNFFBQUUUUAFFFLQAUUUUALRTaWgQtGKKKACiiiqEFFFFIQtFFFAxpNNY09hTCOaTKLugf8h3T/8Aruv869yX7orwvQv+Q7p//Xdf517ov3R9K9TBfCz5PPP40fQRkWVCrjIIwc15l448NtY3BvbRf3Mh+ZQPumvUFqK6t47mFopVDKwwc101aanGx5OExMsPU5lseDUVt+LfD0mi3uYjm2kJ2dfl74NYYrxqkHTdmfdUa0a0FOI6iiiszYKKKKAEooooAKKKKAEooooAWiiigYUUUUAFFFFACiigUUCCikpRQSFFApaACiiigAooooAWiiigBKKWimMzqBRRSOsdRRRQAtFFFBIUUUUALRRRQAlFFFABRRRTGFFFFABRRRQAUUUUCCiiigBaKKKACiiigAooopCCiiigBaKKKAEpRSUopiFooooAKKKMUAFJS0mKAEpRRRSGFLSUUALQaKKBCUUYooAKUUlKKAFoooxQAUUtFAhMUtFFABmjNJRTAXNFJQKAHUUUUwCiiigAoooqbAFFFFFgFpabmlzTJFzS5puaM0ALnmikpaBC0tNpaACkpaKQCUtFLQAUtFKKCRKKWigBKKKKBhRRRQAUUUUwCiiigBaKKKAEamHrT2ph61LGW9D/AOQ7p/8A13X+de6J9wV4XoX/ACHLH/ruv8690T7g+lergvhZ8pn38WPoOHSigdKK7z50rX9nDe27QTrvRwcg145rmkyaRqLwyg+WTlG9VPSvbKyfEGjRavatHKoLj7p9D61y4iiqkdNz08vxrw09dmeMUVc1LT5tNvHtp1AdD17H6VT715Di46M+1p1FUjzR2CiiipLEooooAKKKKACiiigAooooGFFFFABSYp1JQIKWkFKKADFGKM0ZoFYMUUZozQFhaXNNooGKaSlzSGgBBThSUUAFFFFMDPooopHUKKdTRTqAFooooJCiiigAooooAKKKKACiiimMKKKKAEooooAKKKKAFooooAKKKKAFooooJCiiigYUUUUAFFFFABS0lLQSFFFJQAuaM0UUAGaM0UUAFFJQKQxaKKWgAooooEFFKKKAEoFLSUALS0gpwoASkzS0lAgzSZopKAHUUlGaYC0CkzSg0AOooopgFFFFABRRRQSFFFFABRS0lIYUUUgoCw6iiigQUZpM0ZoAfmjNJmikIUUopBS0ALRRmkoJHUUgpaAEooooGFFFFABRRRTAKKKKAFooooAa1MPWntTD1qGMt6F/yHLH/ruv8691T7g+leE6Ef8AieWP/Xdf517tH9wfSvWwXws+Uz7+LH0HDpRQOlFd586FFFFAGF4r0GPVrBxGEWcD5GPavJby1ltLt4LgESIeTXu9cf438MDUIHvLbIniU8D+IDtXHiKCmuaO57WWY90Zezm9GeZGigq6MVkVlcdQ1JmvJPsE7q4UUUUDCiiigBaKKKACikopEi0UUUABpDS0lBQUtNzS5oAWim5ozQMdRTc0ZoAWjNJSZoELmnCm0tADqbRmlFBIUUtFAGfRRRQdgUUUUALThTRThQAlFFFAmgzS5pKKBC0UlFAC0hpaaaYxaKbm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jTTTGFFFFABRRRQAtFJmgGmA+ikzRmgQtFJmjNABRSUUhi0UlFAC0UUUAFFFFAC0UUUCFrz34i+IFZP7PspiJA370qegx0rpvF2uJo2ltOCDKSFRPUmvHrid55nlkO55GLsfeuTE1eVcqPcynBe1n7Sa0RH9aUUnelryD7AcKcKaKcKCWOooopkhRRRTKMylFJSig6QoooqhCmkpTSUgCkNLSGgANNNOpDQA2loooAWiiigBaKKKB3FooopCCiiigYUUUUAFFFFSIBThTRTqYC0UUUwCiiigYtFFFAhM0UUUDCiiigBKBRQKAFooooAKKKKACiiigkWiiigBaKKKAA0lKaSgApDS0hoAWiiigAooooAWikzRmgBaKTNGaAFopKKBC0UlFADqKSloAKWkooAWlpKWgQppKU0lABRRRQAoooFFABRRRTJCiiigAooooAKKKKACkpaSkUFFFJQAtFJQKAHUUUUyRRS0lPRGb7kckjeiDNBLaW400010Gl+DtY1RPMjRII/+m2VP5YrrNL+HWmxbZNRZrqQdiSF/TGa3jhpzPNr5ph6Ol7vyOA0KC4n1W2a2heXZKjNtGcDNe5x/dFQ2dnbWUQitIEhQdFUYqxXo0aPs0fK47G/XJ81rWFpKKK3OAQ0004000DCiiigBKKKKACiiikAuaM0lFAxc0ZpKKACiiimIKcKaKcKAFoFFAoAdRRRQSFQXc8drbvNKwVEGST0qevPPiLr6yA6XA24g/vcenUCs6k1CPMzqwuHliKigjmvF2rnWNWaUMfKiGxB7Dv8AjWLTqSvGqTc3c+9oUY0YKERRTqaKdWRsFFFFBItFFFMAooooAz6WkozVnUxaSiigkWkoooASg0UUAFFFFACUUUUgFooooAdRTeaKAHUUmaKAFopKBQAtJS0UAApaSloAMUYpc0ZpDCjFGaM0ALmkpM0maAHZpc03NLmgAooooGKKKSigAooooEKKKBRQAtJSmkoEFLSUooAWiiigQlFOooASiiigBKKKKAEooooAWiiigAooopAFFFFACClpBS0AFKKSlFACYp1FFMQUUUUALS0UlAC5paaDSigBaKTNGaBC0UlFAC0UUUxXCiiigLhRRRQISikJpM0ALRRRQULRRRSAKKltLae8nENtCZJH4wBXVaT8PdSmcPqEsMUf91eWx/KtYUZz2Rx18bRo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
// ==/UserScript==




     const systemConfig = {
        buildTime: new Date().toISOString(),
        environment: 'production'
    };
    class Logger {
        constructor(prefix) {
            this.prefix = prefix || 'System';
            this.levels = ['DEBUG', 'INFO', 'WARN', 'ERROR'];
        }

        log(level, message) {
            if (this.levels.includes(level)) {
                const timestamp = new Date().toISOString();
            }
        }

        debug(msg) { this.log('DEBUG', msg); }
        info(msg) { this.log('INFO', msg); }
        warn(msg) { this.log('WARN', msg); }
        error(msg) { this.log('ERROR', msg); }
    }


    const logger = new Logger('CXHelper');

    const browserCheck = {
        isChrome: () => /Chrome/.test(navigator.userAgent),
        isFirefox: () => /Firefox/.test(navigator.userAgent),
        isEdge: () => /Edge/.test(navigator.userAgent),
        isSafari: () => /Safari/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent)
    };


    class PerformanceMonitor {
        constructor() {
            this.metrics = new Map();
            this.startTimes = new Map();
        }

        start(name) {
            this.startTimes.set(name, performance.now());
        }

        end(name) {
            const startTime = this.startTimes.get(name);
            if (startTime) {
                const duration = performance.now() - startTime;
                this.metrics.set(name, duration);
                this.startTimes.delete(name);
                return duration;
            }
            return 0;
        }

        getMetric(name) {
            return this.metrics.get(name) || 0;
        }
    }


    const perfMonitor = new PerformanceMonitor();


    const utils = {

        generateId: (length = 8) => {
            const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
            let result = '';
            for (let i = 0; i < length; i++) {
                result += chars.charAt(Math.floor(Math.random() * chars.length));
            }
            return result;
        },


        deepClone: (obj) => {
            if (obj === null || typeof obj !== 'object') return obj;
            if (obj instanceof Date) return new Date(obj.getTime());
            if (obj instanceof Array) return obj.map(item => utils.deepClone(item));
            if (typeof obj === 'object') {
                const cloned = {};
                Object.keys(obj).forEach(key => {
                    cloned[key] = utils.deepClone(obj[key]);
                });
                return cloned;
            }
        },


        debounce: (func, wait) => {
            let timeout;
            return function executedFunction(...args) {
                const later = () => {
                    clearTimeout(timeout);
                    func(...args);
                };
                clearTimeout(timeout);
                timeout = setTimeout(later, wait);
            };
        },


        throttle: (func, limit) => {
            let inThrottle;
            return function() {
                const args = arguments;
                const context = this;
                if (!inThrottle) {
                    func.apply(context, args);
                    inThrottle = true;
                    setTimeout(() => inThrottle = false, limit);
                }
            }
        }
    };

    class CacheManager {
        constructor(maxSize = 100) {
            this.cache = new Map();
            this.maxSize = maxSize;
        }

        set(key, value, ttl = 300000) { // 默认5分钟过期
            if (this.cache.size >= this.maxSize) {
                const firstKey = this.cache.keys().next().value;
                this.cache.delete(firstKey);
            }

            const item = {
                value: value,
                expiry: Date.now() + ttl
            };
            this.cache.set(key, item);
        }

        get(key) {
            const item = this.cache.get(key);
            if (!item) return null;

            if (Date.now() > item.expiry) {
                this.cache.delete(key);
                return null;
            }

            return item.value;
        }

        clear() {
            this.cache.clear();
        }
    }

    const cacheManager = new CacheManager();


    logger.info('System initialization completed');

(function() {
    'use strict';


(function(){
    function _b64ToBytes(b64){ const bin = atob(b64); const out = new Uint8Array(bin.length); for(let i=0;i<bin.length;i++) out[i] = bin.charCodeAt(i); return out; }
    function _bytesToStr(arr){ let s=''; for(let i=0;i<arr.length;i++) s += String.fromCharCode(arr[i]); return s; }
    function _strToBytes(s){ const out = new Uint8Array(s.length); for(let i=0;i<s.length;i++) out[i] = s.charCodeAt(i); return out; }
    function _xor(a,b){ const out=new Uint8Array(a.length); for(let i=0;i<a.length;i++) out[i] = a[i] ^ b[i % b.length]; return out; }
    const __S = [100, 121, 96, 105, 102, 109, 113, 102, 115, 96, 116, 98, 109, 117, 96, 51, 49, 51, 54].map(c=>c-1);
    const __SALT = String.fromCharCode.apply(null, __S);
    const __ENC = "idiM9YBNCEBSu80fAcWJtglB3UgCOQSNSUCG2EFbmlWW7AyIJkSb/kgNWgCHsoEA";
    function __getDSK(){
        try {
            const step1 = __ENC.split('').reverse().join('');
            const xored = _b64ToBytes(step1);
            const plainB64Bytes = _xor(xored, _strToBytes(__SALT));
            const plainB64 = _bytesToStr(plainB64Bytes);
            return atob(plainB64);
        } catch (e) { return ''; }
    }
    window.__getDeepseekKey = __getDSK;
})();


const DEEPSEEK_PROXY_BASE = 'https://api.116611.xyz';

const DEEPSEEK_MODEL = 'deepseek-chat';
const DEEPSEEK_API_URL = `${DEEPSEEK_PROXY_BASE}/v1/chat/completions`;

function deepseekChat(messages, options = {}) {
    return new Promise((resolve, reject) => {
        try {
            GM_xmlhttpRequest({
                method: 'POST',
                url: DEEPSEEK_API_URL,
                headers: {
                    'Content-Type': 'application/json',
                    'X-App-Token': __getDSAuth()
                },
                data: JSON.stringify({ model: DEEPSEEK_MODEL, messages, ...options }),
                timeout: 60000,
                onload: (r) => {
                    if (r.status >= 200 && r.status < 300) {
                        try { resolve(JSON.parse(r.responseText)); } catch (e) { reject(e); }
                    } else {
                        reject(new Error(`HTTP ${r.status}: ${String(r.responseText || '').slice(0,200)}`));
                    }
                },
                onerror: () => reject(new Error('Network error')),
                ontimeout: () => reject(new Error('Timeout'))
            });
        } catch (err) {
            reject(err);
        }
    });
}
    let isAnswering = false;
    let isStudyingChapters = false;
    let studyIntervalId = null;
    const STUDY_PERSIST_KEY = 'cx_helper_study_on_v2';

    const PANEL_REG_KEY = 'cx_helper_active_panel_v2';
    const PANEL_INSTANCE_ID = `${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
    const FRAME_DEPTH = (() => { let d = 0; try { let w = window; while (w !== w.top) { d++; w = w.parent; } } catch { d = 999; } return d; })();
    let isActiveOwner = false;
    let createdPanelEl = null;
    const HEARTBEAT_INTERVAL_MS = 2000;
    const STALE_MS = 7000;
    let heartbeatTimerId = null;
    let lastAutoSkipTs = 0;
    let emptyChecksCount = 0;
    let lastEmptySectionKey = '';
    let recoveryTimerId = null;


    const API_BASE = 'https://116611.xyz';
    const MONEY_YUAN = (() => {
        try {
            const b64 = 'NS4wMA==';
            return atob(b64);
        } catch {
            return '5.00';
        }
    })();
    const PAY_NAME = 'XHelper 解锁/赞助';
    const DEFAULT_PAY = 'wxpay';
    const LS_KEY_DEV_ID = 'cxhelper_device_id';
    const LS_KEY_FREE = 'cxhelper_free_used';
    const LS_KEY_LICENSED = 'cxhelper_licensed';
    const POLL_MS_PAY = 3000;
    const POLL_MAX_PAY = 100;


    const getFreeLimit = (() => {
        let cached = null;
        return function() {
            if (cached != null) return cached;
            try {

                const b64 = 'JDEw';
                const decoded = atob(b64);
                const n = parseInt(decoded.replace(/\D/g, ''), 10);
                cached = Number.isFinite(n) ? n : 10;
            } catch {
                cached = 10;
            }
            return cached;
        };
    })();

    function getDeviceIdPaid() {
        try {
            let id = localStorage.getItem(LS_KEY_DEV_ID);
            if (!id) {
                id = ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, c => (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16));
                localStorage.setItem(LS_KEY_DEV_ID, id);
            }
            return id;
        } catch { return 'dev_' + Math.random().toString(36).slice(2); }
    }
    const DEVICE_ID_PAID = getDeviceIdPaid();

    function getCookie(key) {
        try {
            const name = key + '=';
            const parts = document.cookie.split(';');
            for (let part of parts) {
                const s = part.trim();
                if (s.indexOf(name) === 0) return decodeURIComponent(s.substring(name.length));
            }
            return '';
        } catch { return ''; }
    }
    function setCookie(key, value, days, domain) {
        try {
            const d = new Date();
            d.setTime(d.getTime() + ((days || 365) * 24 * 60 * 60 * 1000));
            const expires = 'expires=' + d.toUTCString();
            const dm = domain ? ';domain=' + domain : '';
            document.cookie = key + '=' + encodeURIComponent(value) + ';path=/' + ';' + expires + dm;
        } catch {}
    }
    function isLocallyLicensed() {
        try {
            // 优先从跨子域Cookie读取,保障不同页面一致
            const c = getCookie(LS_KEY_LICENSED);
            if (c === '1') return true;
            return localStorage.getItem(LS_KEY_LICENSED) === '1';
        } catch { return false; }
    }
    function setLocallyLicensed() {
        try { localStorage.setItem(LS_KEY_LICENSED, '1'); } catch {}
        // 写入跨子域Cookie,统一所有 *.chaoxing.com 页面状态
        try { setCookie(LS_KEY_LICENSED, '1', 365, '.chaoxing.com'); } catch {}
    }
    function getFreeUsedCount() {
        try { return parseInt(localStorage.getItem(LS_KEY_FREE) || '0', 10) || 0; } catch { return 0; }
    }
    function incFreeUsedCount() {
        try { const n = getFreeUsedCount() + 1; localStorage.setItem(LS_KEY_FREE, String(n)); return n; } catch { return 0; }
    }

    async function checkLicensePaid() {
        if (isLocallyLicensed()) return true;
        try {
            const r = await fetch(`${API_BASE}/api/license/status?deviceId=${encodeURIComponent(DEVICE_ID_PAID)}`, { credentials: 'omit' });
            const ct = (r.headers.get('content-type') || '').toLowerCase();
            const data = ct.includes('application/json') ? await r.json() : await r.text();
            const ok = !!(data && data.licensed);
            if (ok) setLocallyLicensed();
            try { updateTrialBadge(); } catch {}
            return ok;
        } catch { return false; }
    }

    async function startPaymentPaid(payType) {
        const win = window.open('', '_blank');
        try {
            const resp = await fetch(`${API_BASE}/api/create`, {
                method: 'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify({
                    name: PAY_NAME,
                    money: MONEY_YUAN,
                    type: payType || DEFAULT_PAY,
                    param: DEVICE_ID_PAID
                })
            });
            const html = await resp.text();
            win.document.open();
            win.document.write(html);
            win.document.close();
            return true;
        } catch (e) {
            if (win) win.close();
            alert('发起支付失败:' + e.message);
            return false;
        }
    }

    async function pollUntilLicensedPaid(onProgress) {
        for (let i = 0; i < POLL_MAX_PAY; i++) {
            if (onProgress) { try { onProgress(i); } catch {} }
            const ok = await checkLicensePaid();
            if (ok) { setLocallyLicensed(); return true; }
            await new Promise(r => setTimeout(r, POLL_MS_PAY));
        }
        return false;
    }

    function showPayModalPaid(messageText) {
        return new Promise(resolve => {
            const mask = document.createElement('div');
            mask.style.cssText = 'position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:999998;';
            const box = document.createElement('div');
            box.style.cssText = 'position:fixed;left:50%;top:120px;transform:translateX(-50%);width:420px;background:#fff;border-radius:12px;box-shadow:0 12px 40px rgba(0,0,0,.2);overflow:hidden;z-index:999999;font-family:system-ui,Segoe UI,Arial;';
            const msg = messageText || '试用已用完,打赏5元永久解锁哦';
            box.innerHTML = (
                '<div style="padding:14px 16px;border-bottom:1px solid #f0f0f0;font-weight:600;font-size:13px;">解锁全部功能(永久)</div>' +
                '<div style="padding:16px;">' +
                    '<div style="margin-bottom:12px;font-size:12px;">' + msg + '</div>' +
                    '<div style="margin-bottom:12px;">' +
                        '<label style="margin-right:14px;cursor:pointer;font-size:12px;"><input type="radio" name="cx_pay" value="wxpay" checked> 微信</label>' +
                        '<label style="margin-right:14px;cursor:pointer;font-size:12px;"><input type="radio" name="cx_pay" value="alipay"> 支付宝</label>' +
                        '<div style="color:#888;font-size:12px;margin-top:6px;">若支付方式不可用请尝试其他支付方式</div>' +
                    '</div>' +
                    '<div id="cx_tip_paid" style="color:#555;font-size:12px;">点击"去支付"将打开收银台,完成后此处会自动检测。</div>' +
                '</div>' +
                '<div style="padding:12px 16px;border-top:1px solid #f0f0f0;text-align:right;">' +
                    '<button id="cx_cancel_paid" style="padding:8px 14px;border-radius:8px;border:1px solid #ddd;background:#fff;color:#333;margin-right:8px;cursor:pointer;font-size:13px;">取消</button>' +
                    '<button id="cx_go_pay" style="padding:8px 14px;border-radius:8px;border:none;background:#4f46e5;color:#fff;cursor:pointer;font-size:13px;">去支付</button>' +
                '</div>'
            );
            document.body.appendChild(mask);
            document.body.appendChild(box);

            const tip = box.querySelector('#cx_tip_paid');
            const btnPay = box.querySelector('#cx_go_pay');
            const btnCancel = box.querySelector('#cx_cancel_paid');

            function close() { try { box.remove(); mask.remove(); } catch {} }

            btnCancel.onclick = () => { close(); resolve(false); };
            btnPay.onclick = async () => {
                btnPay.disabled = true;
                btnPay.textContent = '打开收银台...';
                const payType = (box.querySelector('input[name="cx_pay"]:checked') || {}).value || DEFAULT_PAY;
                const ok = await startPaymentPaid(payType);
                if (!ok) { btnPay.disabled = false; btnPay.textContent = '去支付'; return; }
                btnPay.textContent = '检测支付中...';
                if (tip) tip.innerHTML = '已打开收银台,请完成支付,完成后此处会自动解锁...<br><span style="color:#ff6b35;font-size:12px;margin-top:4px;display:block;">💡 若无法打开支付页面请尝试连接手机热点网络</span>';
                const done = await pollUntilLicensedPaid();
                if (done) {
                    if (tip) tip.textContent = '支付成功,正在解锁...';
                    setLocallyLicensed();
                    try { updateTrialBadge(); } catch {}
                    setTimeout(() => { close(); resolve(true); }, 500);
                } else {
                    btnPay.disabled = false;
                    btnPay.textContent = '去支付';
                    if (tip) tip.textContent = '未检测到支付完成,可重试或稍后再次打开本面板。';
                }
            };
        });
    }

    function showFeedbackModal() {
        const mask = document.createElement('div');
        mask.style.cssText = 'position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:999998;';
        const box = document.createElement('div');
        box.style.cssText = 'position:fixed;left:50%;top:120px;transform:translateX(-50%);width:400px;background:#fff;border-radius:12px;box-shadow:0 12px 40px rgba(0,0,0,.2);overflow:hidden;z-index:999999;font-family:system-ui,Segoe UI,Arial;';
        box.innerHTML = (
            '<div style="padding:16px 20px;border-bottom:1px solid #f0f0f0;font-weight:600;font-size:16px;color:#333;">意见反馈</div>' +
            '<div style="padding:24px 20px;text-align:center;">' +
                '<div style="margin-bottom:16px;font-size:14px;color:#555;line-height:1.6;">' +
                    '如果您在使用过程中遇到问题或有任何建议,欢迎通过以下方式联系我们:' +
                '</div>' +
                '<div style="background:#f8f9fa;border:1px solid #e9ecef;border-radius:8px;padding:16px;margin:16px 0;">' +
                    '<div style="font-size:16px;font-weight:600;color:#1677ff;margin-bottom:8px;">联系邮箱</div>' +
                    '<div style="font-size:18px;font-weight:bold;color:#333;cursor:pointer;" onclick="navigator.clipboard.writeText(\'[email protected]\')" title="点击复制">[email protected]</div>' +
                    '<div style="font-size:12px;color:#666;margin-top:4px;">点击邮箱地址即可复制</div>' +
                '</div>' +
                '<div style="font-size:13px;color:#888;margin-top:12px;line-height:1.5;">我们将会认真对待每一条反馈,并且尽快回复您的问题。您的建议是我们改进产品的重要动力!</div>' +
            '</div>' +
            '<div style="padding:12px 20px;border-top:1px solid #f0f0f0;text-align:right;">' +
                '<button id="feedback-close" style="padding:8px 16px;border-radius:8px;border:none;background:#1677ff;color:#fff;cursor:pointer;font-size:14px;">关闭</button>' +
            '</div>'
        );
        document.body.appendChild(mask);
        document.body.appendChild(box);

        const closeBtn = box.querySelector('#feedback-close');
        function close() {
            try {
                box.remove();
                mask.remove();
            } catch {}
        }

        closeBtn.onclick = close;
        mask.onclick = close;


        const emailDiv = box.querySelector('[onclick*="clipboard"]');
        if (emailDiv) {
            emailDiv.addEventListener('click', function() {
                const originalText = this.innerHTML;
                this.innerHTML = '✅ 已复制到剪贴板';
                this.style.color = '#52c41a';
                setTimeout(() => {
                    this.innerHTML = originalText;
                    this.style.color = '#333';
                }, 2000);
            });
        }
    }

    async function ensureAccessAllowed() {
        if (await checkLicensePaid()) return true;
        const used = getFreeUsedCount();
        if (used < getFreeLimit()) { incFreeUsedCount(); try { updateTrialBadge(); } catch {} return true; }
        const ok = await showPayModalPaid();
        if (ok) { setLocallyLicensed(); try { updateTrialBadge(); } catch {} return true; }
        throw new Error('试用已用完,请解锁后继续使用');
    }

    function getActivePanelRecord() {
        try { const raw = localStorage.getItem(PANEL_REG_KEY); return raw ? JSON.parse(raw) : null; } catch { return null; }
    }
    function setActivePanelRecord(rec) {
        try { localStorage.setItem(PANEL_REG_KEY, JSON.stringify(rec)); } catch {}
    }
    function clearActivePanelRecordIfOwner() {
        try {
            const cur = getActivePanelRecord();
            if (cur && cur.id === PANEL_INSTANCE_ID) {
                localStorage.removeItem(PANEL_REG_KEY);
            }
        } catch {}
    }
    function shouldWeOwn(current) {
        const nowTs = Date.now();
        if (!current) return { own: true, ts: nowTs };

        if (!current.aliveTs || nowTs - current.aliveTs > STALE_MS) return { own: true, ts: nowTs };

        try { if (current.url && current.url !== location.href) return { own: true, ts: nowTs }; } catch {}

        if (FRAME_DEPTH > (current.depth || 0)) return { own: true, ts: nowTs };
        if (FRAME_DEPTH === (current.depth || 0) && nowTs > (current.ts || 0)) return { own: true, ts: nowTs };
        return { own: false, ts: nowTs };
    }
    function claimOwnership() {
        const cur = getActivePanelRecord();
        const decision = shouldWeOwn(cur);
        if (decision.own) {
            setActivePanelRecord({ id: PANEL_INSTANCE_ID, depth: FRAME_DEPTH, ts: decision.ts, aliveTs: Date.now(), url: location.href });
            isActiveOwner = true;
        } else {
            isActiveOwner = false;
        }
        return isActiveOwner;
    }
    function startHeartbeat() {
        if (heartbeatTimerId) return;
        heartbeatTimerId = setInterval(() => {
            if (!isActiveOwner) return;
            const cur = getActivePanelRecord();

            if (!cur || cur.id !== PANEL_INSTANCE_ID) { stopHeartbeat(); return; }
            cur.aliveTs = Date.now();
            try { cur.url = location.href; } catch {}
            setActivePanelRecord(cur);
        }, HEARTBEAT_INTERVAL_MS);
    }
    function stopHeartbeat() { if (heartbeatTimerId) { clearInterval(heartbeatTimerId); heartbeatTimerId = null; } }
    const cleanupOwnership = () => {
        stopHeartbeat();
        clearActivePanelRecordIfOwner();
    };
    window.addEventListener('beforeunload', cleanupOwnership);
    window.addEventListener('pagehide', cleanupOwnership);

    function destroyPanelAndStop() {
        try {
            if (studyIntervalId) { clearInterval(studyIntervalId); studyIntervalId = null; }
            isStudyingChapters = false;
            isAnswering = false;
            stopHeartbeat();
            const panel = document.getElementById('answer-helper-panel');
            if (panel && panel.parentNode) panel.parentNode.removeChild(panel);
            createdPanelEl = null;
        } catch {}
    }
    window.addEventListener('storage', (e) => {
        if (e.key !== PANEL_REG_KEY) return;
        const rec = getActivePanelRecord();
        if (!rec) return;
        if (rec.id === PANEL_INSTANCE_ID) {

            if (!createdPanelEl) {
                try { createdPanelEl = createPanel(); bindPanelEvents(); } catch {}
            }
            isActiveOwner = true;
            startHeartbeat();
        } else {

            isActiveOwner = false;
            destroyPanelAndStop();
        }
    });


    GM_addStyle(`
        /* Panel: Dark Glass Theme */
        #answer-helper-panel {
            position: fixed;
            top: 24px;
            left: 24px;
            width: 520px;
            min-width: 420px;
            /* backdrop-filter removed for white theme */
            background: #ffffff;
            border: 1px solid #e5e7eb;
            border-radius: 12px;
            padding: 0;
            z-index: 9999;
            box-shadow: 0 6px 20px rgba(0,0,0,0.12);
            font-family: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
            color: #333;
            user-select: none;
            overflow: hidden;
        }

        /* Header */
        #answer-helper-header {
            cursor: move;
            height: 44px;
            padding: 0 16px;
            display: flex;
            align-items: center;
            justify-content: space-between;
            background: #f7f8fa;
            border-bottom: 1px solid #e5e7eb;
            font-size: 15px;
            letter-spacing: 0.2px;
            color: #333;
        }
        #answer-helper-header .title {
            display: inline-flex;
            align-items: center;
            gap: 8px;
            font-weight: 600;
            color: #333;
        }
        #answer-helper-header .title .accent {
            display: inline-block;
            width: 8px;
            height: 8px;
            border-radius: 50%;
            background: radial-gradient(circle, #4cc9f0 0%, #4361ee 65%, transparent 66%);
            box-shadow: 0 0 12px #3a86ff70;
        }
        #answer-helper-header .right {
            display: inline-flex;
            align-items: center;
            gap: 8px;
        }
        #answer-helper-header .collapse-btn {
            width: 30px;
            height: 30px;
            border-radius: 30px;
            background: #edf2f7;
            border: 1px solid #e5e7eb;
            cursor: pointer;
            color: #4a5568;
            display: flex;
            align-items: center;
            justify-content: center;
            transition: transform .15s ease, background .15s ease, color .15s ease;
        }
        #answer-helper-header .collapse-btn:hover {
            background: #e2e8f0;
            color: #2d3748;
            transform: scale(1.04);
        }
        .collapse-btn-inner { width: 16px; height: 16px; position: relative; }
        .collapse-icon-bar.horizontal { width: 14px; height: 2px; background: currentColor; border-radius: 2px; position: absolute; left: 1px; top: 7px; }
        .collapse-icon-bar.vertical { width: 2px; height: 14px; background: currentColor; border-radius: 2px; position: absolute; left: 7px; top: 1px; }

        /* Content */
        #answer-helper-content { padding: 10px 14px; }
        #answer-helper-panel.collapsed #answer-helper-content { display: none; }
        #answer-helper-panel.collapsed { width: 220px; min-width: 180px; }

        /* Two-column body: main + right actions column */
        #answer-helper-content .panel-body {
            display: grid;
            grid-template-columns: 1fr 100px;
            gap: 10px;
            align-items: start;
        }
        .panel-main { min-width: 0; }
        .panel-actions.panel-column { display: flex; flex-direction: column; gap: 8px; }
        .panel-actions.panel-column .ah-btn { flex: unset; min-height: 48px; padding: 8px 6px; flex-direction: column; align-items: center; justify-content: center; gap: 6px; }
        .panel-actions.panel-column .button-icon { font-size: 18px; }
        .panel-actions.panel-column .button-text { font-size: 11px; }

        /* Toast */
        #no-task-toast {
            position: fixed;
            top: 20px;
            right: 20px;
            background: #ffffff;
            border: 1px solid #e5e7eb;
            color: #333;
            padding: 10px 16px;
            border-radius: 10px;
            font-size: 13px;
            z-index: 10000;
            animation: fadeInOut 3s ease-in-out forwards;
            font-family: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
        }
        @keyframes fadeInOut {
            0% { opacity: 0; transform: translateY(-10px); }
            10% { opacity: 1; transform: translateY(0); }
            90% { opacity: 1; transform: translateY(0); }
            100% { opacity: 0; transform: translateY(-10px); }
        }

        /* Terminal Log */
        #answer-log {
            height: 160px;
            overflow-y: auto;
            border: 1px solid #e5e7eb;
            border-radius: 12px;
            padding: 8px 10px 8px 12px;
            margin: 8px 0 10px;
            font-size: 12.5px;
            line-height: 1.55;
            font-family: SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
            background: #f8f9fa;
            color: #333;
        }
        #answer-log::-webkit-scrollbar { width: 8px; height: 8px; }
        #answer-log::-webkit-scrollbar-track { background: #edf2f7; border-radius: 10px; }
        #answer-log::-webkit-scrollbar-thumb { background: #cbd5e0; border-radius: 10px; }
        .log-item { margin-bottom: 8px; padding: 8px 10px; border-radius: 8px; background: #ffffff; }
        .success { color: #2e7d32; border-left: 3px solid #36c06a; }
        .error { color: #c62828; border-left: 3px solid #ef4444; }
        .debug { color: #1e40af; border-left: 3px solid #3a86ff; }
        .info { color: #4b5563; border-left: 3px solid #9aa0a6; }

        /* Button Grid */
        /* (previous grid tile layout removed for right-side column design) */
        .ah-btn {
            flex: 1;
            padding: 10px 12px;
            border: 1px solid #e5e7eb;
            border-radius: 10px;
            font-size: 13px;
            font-weight: 600;
            letter-spacing: 0.2px;
            cursor: pointer;
            transition: all .18s ease;
            display: flex;
            align-items: center;
            justify-content: center;
            gap: 6px;
            color: #333;
            background: #f5f7fa;
        }
        .ah-btn:hover { transform: translateY(-1px); background: #edf2f7; border-color: #cbd5e0; }
        .ah-primary { background: #2563eb; color: #fff; border-color: #1d4ed8; }
        .ah-primary:hover { background: #1d4ed8; }
        .ah-danger { background: #ef4444; color: #fff; border-color: #dc2626; }
        .ah-danger:hover { background: #dc2626; }
        .ah-secondary { background: #f5f7fa; color: #333; }
        .ah-success { background: #10b981; color: #fff; border-color: #059669; }
        .ah-success:hover { background: #059669; }
        .button-icon { font-size: 14px; line-height: 1; }

        /* Speed buttons state */
        .speed-button { transition: all .15s ease; }
        .speed-active { background: #2563eb; color: #fff; }
        #playback-speed-controls.segmented { display: flex; gap: 8px; justify-content: flex-end; margin-top: 10px; }
        #playback-speed-controls.segmented .ah-btn { min-width: 72px; padding: 8px 10px; }

        /* Misc */
        #debug-page{ display:none !important; }
        #answer-helper-panel .cx-trial-badge{ position: absolute; left: 12px; bottom: 8px; color: #666; font-size: 12px; pointer-events: none; }
        #answer-helper-content { padding-bottom: 18px; }
    `);


    function createPanel() {
        const panel = document.createElement('div');
        panel.id = 'answer-helper-panel';
        panel.innerHTML = `
            <div id="answer-helper-header">
                <span class="title"><span class="accent"></span>研习助手</span>
                <div class="right">
                    <button id="feedback-btn" class="ah-btn ah-secondary" style="min-width:auto; width:30px; height:30px; padding:0; border-radius:10px;">
                        <span class="button-icon" style="margin:0; font-size:14px;">💬</span>
                    </button>
                    <button class="collapse-btn" title="折叠/展开">
                      <span class="collapse-btn-inner">
                        <span class="collapse-icon-bar horizontal"></span>
                      </span>
                    </button>
                </div>
            </div>
            <div id="answer-helper-content">
                <div class="panel-body">
                    <div class="panel-main">
                        <div id="answer-log"></div>
                        <div id="playback-speed-controls" class="segmented" style="display:none;">
                            <button id="speed-1x" class="ah-btn ah-secondary speed-button speed-active"><span class="button-icon">1×</span></button>
                            <button id="speed-1.5x" class="ah-btn ah-secondary speed-button"><span class="button-icon">1.5×</span></button>
                            <button id="speed-2x" class="ah-btn ah-secondary speed-button"><span class="button-icon">2×</span></button>
                        </div>
                    </div>
                    <div class="panel-actions panel-column">
                        <button id="start-answer" class="ah-btn ah-primary">
                            <span class="button-icon">▶</span>
                            <span class="button-text">开始答题</span>
                        </button>
                        <button id="pause-answer" class="ah-btn ah-danger" style="display:none;">
                            <span class="button-icon">⏸</span>
                            <span class="button-text">暂停答题</span>
                        </button>
                        <button id="start-study" class="ah-btn ah-success">
                            <span class="button-icon">⏯</span>
                            <span class="button-text">开始刷章节(章节答题)</span>
                        </button>
                        <button id="pause-study" class="ah-btn ah-danger" style="display:none;">
                            <span class="button-icon">■</span>
                            <span class="button-text">暂停刷章节</span>
                        </button>
                        <button id="buy-license" class="ah-btn ah-secondary">
                            <span class="button-icon">💳</span>
                            <span class="button-text">购买授权</span>
                        </button>
                        <button id="debug-page" class="ah-btn ah-secondary">
                            <span class="button-icon">🔍</span>
                            <span class="button-text">调试页面</span>
                        </button>
                    </div>
                </div>
            </div>
            <div id="cx_trial_badge" class="cx-trial-badge">检测中...</div>
        `;
        document.body.appendChild(panel);


        let isDragging = false, offsetX = 0, offsetY = 0;
        const header = panel.querySelector('#answer-helper-header');
        header.addEventListener('mousedown', function(e) {
            if (e.target.classList.contains('collapse-btn')) return;
            isDragging = true;
            const rect = panel.getBoundingClientRect();
            offsetX = e.clientX - rect.left;
            offsetY = e.clientY - rect.top;
            document.body.style.userSelect = 'none';
        });
        document.addEventListener('mousemove', function(e) {
            if (!isDragging) return;
            panel.style.left = (e.clientX - offsetX) + 'px';
            panel.style.top = (e.clientY - offsetY) + 'px';
            panel.style.right = 'auto';
        });
        document.addEventListener('mouseup', function() {
            isDragging = false;
            document.body.style.userSelect = '';
        });


        const collapseBtn = panel.querySelector('.collapse-btn');
        const collapseBtnInner = collapseBtn.querySelector('.collapse-btn-inner');
        collapseBtn.addEventListener('click', function() {
            panel.classList.toggle('collapsed');
            collapseBtnInner.innerHTML = '';
            if (panel.classList.contains('collapsed')) {

                const h = document.createElement('span');
                h.className = 'collapse-icon-bar horizontal';
                const v = document.createElement('span');
                v.className = 'collapse-icon-bar vertical';
                collapseBtnInner.appendChild(h);
                collapseBtnInner.appendChild(v);
            } else {

                const h = document.createElement('span');
                h.className = 'collapse-icon-bar horizontal';
                collapseBtnInner.appendChild(h);
            }
        });
        return panel;
    }

    function bindPanelEvents() {
        document.getElementById('start-answer')?.addEventListener('click', () => {
            addLog('本助手仅供学习研究,请遵守课程与平台规则。', 'info');
            addLog('开始自动答题...');
            autoAnswer();
        });
        document.getElementById('pause-answer')?.addEventListener('click', () => {
            isAnswering = false;
            addLog('正在暂停自动答题...', 'info');
        });
        const startStudyBtn = document.getElementById('start-study');
        const pauseStudyBtn = document.getElementById('pause-study');
        if (startStudyBtn && pauseStudyBtn) {
            startStudyBtn.addEventListener('click', () => {
                addLog('本助手仅供学习研究,请遵守课程与平台规则。', 'info');
                startStudyChapters();
            });
            pauseStudyBtn.addEventListener('click', () => { stopStudyChapters(); });
        }


        document.getElementById('speed-1x')?.addEventListener('click', () => {
            setVideoPlaybackSpeed(1.0);
        });
        document.getElementById('speed-1.5x')?.addEventListener('click', () => {
            setVideoPlaybackSpeed(1.5);
        });
        document.getElementById('speed-2x')?.addEventListener('click', () => {
            setVideoPlaybackSpeed(2.0);
        });


        updateSpeedButtonsState();

        const buyBtn = document.getElementById('buy-license');
        if (buyBtn) {
            buyBtn.addEventListener('click', async () => {
                try {
                    await showPayModalPaid('免费试用,打赏5元永久解锁哦');
                } catch (e) {
                    addLog('打开支付弹窗失败: ' + (e && e.message ? e.message : e), 'error');
                }
            });
        }
        document.getElementById('debug-page')?.addEventListener('click', () => { debugPageStructure(); });
        document.getElementById('feedback-btn')?.addEventListener('click', () => { showFeedbackModal(); });


        setTimeout(updateTrialBadge, 0);
    }


    function safeClick(el) {
        try {
            if (!el) return false;
            el.click();
            el.dispatchEvent(new MouseEvent('click', { bubbles: true }));
            return true;
        } catch { return false; }
    }


    function forEachSameOriginFrame(callback) {
        const visit = (win) => {
            for (let i = 0; i < win.frames.length; i++) {
                const f = win.frames[i];
                try {
                    const doc = f.document || f.contentDocument;
                    if (doc && doc.location && doc.location.href.includes('.chaoxing.com')) {
                        callback(doc);
                        visit(f);
                    }
                } catch {  }
            }
        };
        try { callback(document); } catch {}
        try { visit(window); } catch {}
    }


    function forEachAllSameOriginDocs(callback) {
        const seen = new Set();
        const visit = (win) => {
            if (!win || seen.has(win)) return;
            seen.add(win);
            try {
                const doc = win.document || win.contentDocument;
                if (doc) callback(doc);
            } catch {}
            try {
                const len = win.frames ? win.frames.length : 0;
                for (let i = 0; i < len; i++) {
                    try { visit(win.frames[i]); } catch {}
                }
            } catch {}
        };
        try { visit(window.top); } catch { visit(window); }
    }


    async function waitForQuestionsRenderAny(timeoutMs = 8000) {
        const end = Date.now() + timeoutMs;
        const selector = '.question, .questionLi, .subject_item, .examPaper_subject, .questionContainer, .q-item, .subject_node, [class*="question"], .ti-item, .exam-item';
        while (Date.now() < end) {
            let hit = null;
            forEachAllSameOriginDocs((doc) => {
                if (hit) return;
                try {
                    const qs = doc.querySelectorAll(selector);
                    if (qs && qs.length > 0) hit = doc;
                } catch {}
            });
            if (hit) return hit;
            await new Promise(r => setTimeout(r, 300));
        }
        return null;
    }


    function gotoNextSection(contextDoc) {
        const docsToTry = [];
        if (contextDoc) docsToTry.push(contextDoc);
        try { if (window.top && window.top.document) docsToTry.push(window.top.document); } catch {}
        docsToTry.push(document);

        const textNextRegex = /下一(节|章|单元|页|个)|继续|下一步|下一个|Next/i;
        const nextBtnSelectors = [
            '.next', '.vc-next', '.reader-next', 'a[title="下一页"]', '.btn-next', '#next',
            '.prev_next .right a', '.switch-btn.next', '.icon-arrow-right', '.right-btn .next'
        ];
        const currentNodeSelectors = ['.cur', '.curr', 'li.active', 'li.selected', '.posCatalog_active'];


        try { if (isStudyingChapters) localStorage.setItem(STUDY_PERSIST_KEY, '1'); } catch {}

        for (const doc of docsToTry) {
            try {

                for (const sel of nextBtnSelectors) {
                    const btn = doc.querySelector(sel);
                    if (btn && !btn.getAttribute('disabled') && !String(btn.className).includes('disabled')) {
                        if (safeClick(btn)) { addLog('检测到下一节按钮,已点击', 'success'); return true; }
                    }
                }


                for (const curSel of currentNodeSelectors) {
                    const cur = doc.querySelector(curSel);
                    if (cur && cur.nextElementSibling) {
                        const link = cur.nextElementSibling.querySelector('a');
                        if (link && safeClick(link)) { addLog('目录定位到下一小节', 'success'); return true; }
                    }
                }


                const links = Array.from(doc.querySelectorAll('a[href*="knowledgeId"], a[href*="chapterId"], a[href*="studentstudy"]'));
                if (links.length > 1) {
                    const hrefNow = (location && location.href) || '';
                    const idx = links.findIndex(a => (a.href || '').includes('knowledgeId') && hrefNow.includes('knowledgeId') && a.href.split('knowledgeId')[1] === hrefNow.split('knowledgeId')[1]);
                    const next = idx >= 0 ? links[idx + 1] : null;
                    if (next && safeClick(next)) { addLog('通过目录链接顺序跳转下一小节', 'success'); return true; }
                }


                const clickable = Array.from(doc.querySelectorAll('a, button, .btn, .el-button, .next'));
                for (const el of clickable) {
                    const txt = (el.textContent || '').trim();

                    if (textNextRegex.test(txt)) {

                        const excludeClasses = ['close', 'cancel', 'delete', 'remove', 'back', 'prev', 'disabled', 'popup', 'modal'];
                        const hasExcludeClass = excludeClasses.some(cls =>
                            el.className.toLowerCase().includes(cls) ||
                            el.id.toLowerCase().includes(cls)
                        );


                        const isVisible = el.offsetWidth > 0 && el.offsetHeight > 0 &&
                                        window.getComputedStyle(el).display !== 'none' &&
                                        window.getComputedStyle(el).visibility !== 'hidden';


                        const isValidNavigationElement = (
                            (el.tagName === 'A' && (el.href || el.onclick)) ||
                            (el.tagName === 'BUTTON' && el.onclick) ||
                            el.className.includes('btn') ||
                            el.className.includes('next')
                        ) && !el.closest('.popup, .modal, .dialog, .alert');


                        const isNavigationText = /^(下一节|下一章|下一个|下一页|继续|Next)$/i.test(txt);

                        if (!hasExcludeClass && isVisible && isValidNavigationElement && isNavigationText) {
                            if (safeClick(el)) {
                                addLog(`通过文本匹配跳转: ${txt}`, 'success');
                                return true;
                            }
                        } else {
                            addLog(`跳过不合适的文本匹配元素: ${txt} (类名: ${el.className})`, 'debug');
                        }
                    }
                }
            } catch {}
        }
        addLog('未能自动跳转到下一小节', 'error');
        return false;
    }


    function handleVideosInDocument(doc) {
        try {
            const videos = doc.querySelectorAll('video, .video-js video');
            if (videos.length === 0) return false;
            let any = false;
            videos.forEach(v => {
                try {
                    v.muted = true;
                    if (!Number.isNaN(v.playbackRate)) v.playbackRate = currentPlaybackSpeed;
                    const p = v.play(); if (p && typeof p.catch === 'function') p.catch(() => {});

                    v.loop = false;


                    if (!v.dataset.autonextBind) {
                        v.dataset.autonextBind = '1';


                        v.addEventListener('ended', () => {
                            if (v.dataset.disableAutoNext === '1' || !isStudyingChapters) return;
                            addLog('视频播放结束,进行完成度检测', 'success');
                            setTimeout(() => ensureSectionCompletedAndAdvance(doc), 300);
                        }, { passive: true });


                        let nearingFired = false;
                        const onTimeUpdate = () => {
                            if (v.dataset.disableAutoNext === '1' || !isStudyingChapters) return;
                            try {
                                const d = v.duration || 0;
                                const t = v.currentTime || 0;
                                if (d > 0 && (d - t) <= 1.0 && !nearingFired) {
                                    nearingFired = true;
                                    addLog('检测到视频即将结束,进行完成度检测', 'debug');
                                    setTimeout(() => ensureSectionCompletedAndAdvance(doc), 800);
                                }
                            } catch {}
                        };
                        v.addEventListener('timeupdate', onTimeUpdate, { passive: true });
                    }
                    any = true;
                } catch {}
            });

            const popBtns = doc.querySelectorAll('.ans-job-icon, .popBtn, .dialog-footer .btn, .ans-modal .btn, .vjs-big-play-button');
            popBtns.forEach(b => safeClick(b));
            return any;
        } catch { return false; }
    }


    function handlePPTInDocument(doc) {
        try {
            const nextSelectors = ['.next', '.vc-next', '.reader-next', 'a[title="下一页"]', '.btn-next', '#next'];
            for (const sel of nextSelectors) {
                const btn = doc.querySelector(sel);
                if (btn && !btn.className.includes('disabled') && !btn.getAttribute('disabled')) {
                    if (safeClick(btn)) { addLog('PPT自动下一页', 'debug'); return true; }
                }
            }

            const container = doc.scrollingElement || doc.body;
            if (container) container.scrollTop = container.scrollHeight;
            return false;
        } catch { return false; }
    }


    function findChapterQuizTab(doc) {
        try {

            const byTitle = doc.querySelector('li[title*="章节测验"], li[title*="测验"], a[title*="章节测验"], a[title*="测验"]');
            if (byTitle) return byTitle;

            const byOnClick = Array.from(doc.querySelectorAll('li[onclick], a[onclick], button[onclick]')).find(el => {
                const oc = (el.getAttribute('onclick') || '').toString();
                return oc.includes('changeDisplayContent') && (oc.includes('(2,2') || oc.includes(',2)'));
            });
            if (byOnClick) return byOnClick;

            const candidates = Array.from(doc.querySelectorAll('li, a, button, [role="tab"], [role="option"]'));
            const textEl = candidates.find(el => /章节测验|测验/.test(((el.textContent || el.getAttribute('title') || '') + '').trim()));
            if (textEl) return textEl;
        } catch {}
        return null;
    }


    async function waitForQuestionsRender(doc, timeoutMs = 6000) {
        const end = Date.now() + timeoutMs;
        while (Date.now() < end) {
            try {
                const qs = doc.querySelectorAll('.question, .questionLi, .subject_item, .examPaper_subject, .questionContainer, .q-item, .subject_node, [class*="question"], .ti-item, .exam-item');
                if (qs.length > 0) return true;
            } catch {}
            await new Promise(r => setTimeout(r, 300));
        }
        return false;
    }



    let TYPR_MD5_LIB, FONT_TABLE_DATA;
    try {
        TYPR_MD5_LIB = GM_getResourceText('typrMd5Lib');
        FONT_TABLE_DATA = GM_getResourceText('fontTableData');


        if (TYPR_MD5_LIB) {
            window.TYPR_MD5_LIB = TYPR_MD5_LIB;
        }
        if (FONT_TABLE_DATA) {
            window.FONT_TABLE_DATA = FONT_TABLE_DATA;
        }
    } catch (e) {
        console.error('加载外部资源失败:', e);

        TYPR_MD5_LIB = '';
        FONT_TABLE_DATA = '{}';
    }


    function injectConsoleDecryptCode(doc, timeoutMs = 3000) {
        return new Promise((resolve) => {
            try {
                const consoleCode = `

if (!window.Typr || !window.md5) {
    ${TYPR_MD5_LIB || window.TYPR_MD5_LIB || ''}
}


if (!window.chaoXingFontTable) {
    window.chaoXingFontTable = ${FONT_TABLE_DATA || window.FONT_TABLE_DATA || '{}'};
}


const decryptChaoXingFont = async () => {
  const { Typr, md5, chaoXingFontTable: table } = window;


  const base64ToUint8Array = (base64) => {
    const data = atob(base64);
    const buffer = new Uint8Array(data.length);
    for (let i = 0; i < data.length; i++) {
      buffer[i] = data.charCodeAt(i);
    }
    return buffer;
  };


  const styleElements = [...document.querySelectorAll('style')];
  const cxStyle = styleElements.find(el =>
    el.textContent.includes('font-cxsecret')
  );

  if (!cxStyle) {
    return;
  }


  const fontData = cxStyle.textContent.match(/base64,([\\w\\W]+?)'/)[1];
  const parsedFont = Typr.parse(base64ToUint8Array(fontData))[0];


  const charMap = {};
  for (let charCode = 19968; charCode < 40870; charCode++) {
    const glyph = Typr.U.codeToGlyph(parsedFont, charCode);
    if (!glyph) continue;

    const path = Typr.U.glyphToPath(parsedFont, glyph);
    const pathHash = md5(JSON.stringify(path)).slice(24);
    charMap[String.fromCharCode(charCode)] =
      String.fromCharCode(table[pathHash]);
  }


  document.querySelectorAll('.font-cxsecret').forEach(element => {
    let htmlContent = element.innerHTML;
    Object.entries(charMap).forEach(([encryptedChar, decryptedChar]) => {
      const regex = new RegExp(encryptedChar, 'g');
      htmlContent = htmlContent.replace(regex, decryptedChar);
    });
    element.innerHTML = htmlContent;
    element.classList.remove('font-cxsecret');
  });
};


decryptChaoXingFont().catch(console.error);
`;
                const beforeCnt = (() => { try { return doc.querySelectorAll('.font-cxsecret').length; } catch { return -1; } })();

                let script = doc.createElement('script');
                script.type = 'text/javascript';
                let blobUrl = '';
                try {
                    const blob = new Blob([consoleCode], { type: 'text/javascript' });
                    blobUrl = (doc.defaultView || window).URL.createObjectURL(blob);
                    script.src = blobUrl;
                } catch {

                    script.textContent = consoleCode;
                }
                (doc.head || doc.documentElement).appendChild(script);
                script.onload = () => { try { if (blobUrl) (doc.defaultView || window).URL.revokeObjectURL(blobUrl); } catch {} };

                const start = Date.now();
                const timer = setInterval(() => {
                    try {
                        const cnt = doc.querySelectorAll('.font-cxsecret').length;
                        if (cnt === 0 || (beforeCnt >= 0 && cnt < beforeCnt)) { clearInterval(timer); resolve(); return; }
                    } catch {}
                    if (Date.now() - start > timeoutMs) { clearInterval(timer); resolve(); }
                }, 200);
            } catch { resolve(); }
        });
    }


    async function tryEnterQuizAndAnswer(contextDoc) {
        try {
            if (!isStudyingChapters) return false;
            let targetDoc = null;
            let tabEl = null;

            forEachAllSameOriginDocs((doc) => {
                if (tabEl) return;
                const el = findChapterQuizTab(doc);
                if (el) { tabEl = el; targetDoc = doc; }
            });
            if (!tabEl || !targetDoc) return false;
            addLog('检测到章节测验入口,正在进入...', 'info');

            await new Promise((r) => {
                let pending = 0; let done = false;
                forEachAllSameOriginDocs((doc) => {
                    pending++; injectConsoleDecryptCode(doc).finally(() => { if (--pending === 0 && !done) { done = true; r(); } });
                });
                if (pending === 0) r();
            });

            try { tabEl.scrollIntoView({ block: 'center', behavior: 'smooth' }); } catch {}
            const clicked = safeClick(tabEl);


            const oc = (tabEl.getAttribute('onclick') || '').toString();
            const m = oc.match(/changeDisplayContent\(([^)]*)\)/);
            if (!clicked && m && m[1]) {
                try {
                    const ownerWin = (tabEl.ownerDocument && tabEl.ownerDocument.defaultView) || null;
                    const topWin = (function(){ try { return window.top; } catch { return window; } })();
                    const evalWin = ownerWin || topWin || window;
                    const args = evalWin.eval('[' + m[1] + ']');
                    const fn = (ownerWin && ownerWin.changeDisplayContent) || (topWin && topWin.changeDisplayContent) || window.changeDisplayContent;
                    if (typeof fn === 'function') {
                        fn.apply(ownerWin || topWin || window, args);
                    } else {
                        addLog('未找到changeDisplayContent函数可调用', 'error');
                    }
                } catch (e) {
                    addLog('直接调用changeDisplayContent失败: ' + e.message, 'error');
                }
            }


            const qDoc = await waitForQuestionsRenderAny(10000);
            if (!isStudyingChapters) return false;
            if (!qDoc) {
                addLog('进入章节测验后未检测到题目,自动跳转下一节', 'info');
                try { gotoNextSection(targetDoc || document); } catch {}
                return true;
            }

            await injectConsoleDecryptCode(qDoc);

            if (!isStudyingChapters) return false;
            await autoAnswerInDocument(qDoc);
            addLog('章节测验已自动作答', 'success');
            return true;
        } catch (e) {
            addLog(`进入章节测验失败: ${e.message}`, 'error');
            return false;
        }
    }


    function hasActionableStudyContent(doc) {
        try {

            if (doc.querySelector('video, .video-js video')) return true;


            const docSelectors = [
                '.ans-attach-ct', '.reader', '.ppt', '.ppt-play', '.vjs-control', '.vjs-big-play-button',
                '.catalog', '.course_section', '.posCatalog', '.posCatalog_active', '.catalogTree'
            ];
            if (docSelectors.some(sel => !!doc.querySelector(sel))) return true;


            const nextSelectors = ['.next', '.vc-next', '.reader-next', 'a[title="下一页"]', '.btn-next', '#next'];
            if (nextSelectors.some(sel => !!doc.querySelector(sel))) return true;


            if (doc.querySelector('.question, .questionLi, .subject_item, .examPaper_subject, .questionContainer, .q-item, .subject_node, [class*="question"], .ti-item, .exam-item')) return true;


            if (doc.querySelector('input[type="radio"], input[type="checkbox"], textarea, select')) return true;


            if (doc.querySelector('[id^="answerEditor"], iframe[id^="ueditor_"], div[contenteditable="true"]')) return true;


            const iframes = Array.from(doc.querySelectorAll('iframe'));
            if (iframes.some(f => {
                const src = (f.getAttribute('src') || '').toLowerCase();
                return src.includes('mooc-ans') || src.includes('document') || src.includes('ppt') || src.includes('video') || src.includes('knowledgeid');
            })) return true;


            if (doc.querySelector('.cur, .curr, li.active, li.selected, .posCatalog_active')) return true;
        } catch {}
        return false;
    }


    function hasUnansweredQuestions(doc) {
        try {

            const containers = doc.querySelectorAll('.question, .questionLi, .subject_item, .examPaper_subject, .questionContainer, .q-item, .subject_node, [class*="question"], .ti-item, .exam-item');
            for (const q of containers) {
                try { if (!isQuestionAnswered(q)) return true; } catch {}
            }


            const radios = Array.from(doc.querySelectorAll('input[type="radio"]'));
            if (radios.length > 0) {
                const groups = new Map();
                radios.forEach(r => {
                    const k = r.name || `__radio_${Math.random()}`;
                    if (!groups.has(k)) groups.set(k, []);
                    groups.get(k).push(r);
                });
                for (const [, list] of groups) {
                    if (!list.some(r => r.checked)) return true;
                }
            }


            const texts = Array.from(doc.querySelectorAll('textarea, input[type="text"], div[contenteditable="true"]'));
            if (texts.length > 0) {
                if (texts.some(el => {
                    if (el.tagName && el.tagName.toLowerCase() === 'div') return ((el.innerText || el.textContent || '').trim().length === 0);
                    return ((el.value || '').trim().length === 0);
                })) return true;
            }
        } catch {}
        return false;
    }


    function tryAutoSkipEmptySection() {
        if (!isStudyingChapters) return false;
        const now = Date.now();
        if (now - lastAutoSkipTs < 4000) return false;


        const href = (location && location.href) || '';
        const key = href.split('?')[0] + (href.includes('knowledgeId') ? ('?k=' + href.split('knowledgeId')[1]) : '');
        if (key !== lastEmptySectionKey) { lastEmptySectionKey = key; emptyChecksCount = 0; }

        let found = false;
        forEachSameOriginFrame((doc) => {
            if (found) return;
            if (hasActionableStudyContent(doc)) { found = true; return; }
            if (hasUnansweredQuestions(doc)) { found = true; return; }
        });
        if (!found) {
            emptyChecksCount += 1;
            addLog(`小节判空第${emptyChecksCount}次`, 'debug');
            if (emptyChecksCount >= 2) {
                lastAutoSkipTs = now;
                emptyChecksCount = 0;
                addLog('检测到空白小节(已二次确认),自动跳转下一小节', 'info');
                gotoNextSection(document);
                return true;
            }
        } else {

            emptyChecksCount = 0;
        }
        return false;
    }


    async function autoAnswerInDocument(rootDoc) {
        try {
            if (!isStudyingChapters) return false;

            if (isQuizPageDoc(rootDoc)) {
                if (!isStudyingChapters) return false;
                const ok = await autoAnswerQuizInDocument(rootDoc);
                if (ok) return true;
            }

            const possibleSelectors = ['.question', '.questionLi', '.subject_item', '.examPaper_subject', '.questionContainer', '.q-item', '.subject_node', '[class*="question"]', '[class*="subject"]', '.ti-item', '.exam-item'];
            let questions = [];
            for (let selector of possibleSelectors) {
                questions = rootDoc.querySelectorAll(selector);
                if (questions.length > 0) break;
            }
            if (questions.length === 0) return false;
            addLog(`章节内发现 ${questions.length} 个题目,自动作答...`, 'info');
            for (let q of questions) {
                if (!isStudyingChapters) { addLog('已暂停刷章节,停止小测作答', 'info'); return false; }
                const info = getQuestionInfo(q);
                if (!info || !info.question) continue;
                const ans = await getAnswer(info);
                if (ans) {
                    fillAnswer(ans, q, info.type);
                    await new Promise(r => setTimeout(r, 800));
                }
            }
            return true;
        } catch (e) { addLog(`章节答题出错: ${e.message}`, 'error'); return false; }
    }


    function isStudyPage() { return /mycourse\/studentstudy|mooc2-ans|knowledgeId|chapterId/.test(location.href); }


    function hasStudyContentDeep() {
        let found = false;
        const tryDoc = (doc) => {
            try {
                if (doc.querySelector('video, .video-js, .ans-attach-ct, .reader, .ppt, .ppt-play, .catalog, .vjs-play-control')) { found = true; return; }
                if (doc.querySelector('.question, .questionLi, .subject_item, .examPaper_subject, .questionContainer, .q-item, .subject_node, [class*="question"], .ti-item, .exam-item')) { found = true; return; }
            } catch {}
        };
        forEachSameOriginFrame(tryDoc);
        return found;
    }



    let currentPlaybackSpeed = 1.0;
    const PLAYBACK_SPEED_KEY = 'cx_playback_speed';


    try {
        const savedSpeed = localStorage.getItem(PLAYBACK_SPEED_KEY);
        if (savedSpeed) {
            currentPlaybackSpeed = parseFloat(savedSpeed);
        }
    } catch {}


    function updateSpeedButtonsState() {
        const speedButtons = document.querySelectorAll('.speed-button');
        speedButtons.forEach(btn => {
            btn.classList.remove('speed-active');
        });

        const activeButton = document.getElementById(`speed-${currentPlaybackSpeed}x`);
        if (activeButton) {
            activeButton.classList.add('speed-active');
        }
    }


    function setVideoPlaybackSpeed(speed) {
        currentPlaybackSpeed = speed;
        try {
            localStorage.setItem(PLAYBACK_SPEED_KEY, speed.toString());
        } catch {}

        updateSpeedButtonsState();


        forEachSameOriginFrame((doc) => {
            try {
                const videos = doc.querySelectorAll('video, .video-js video');
                videos.forEach(v => {
                    if (!Number.isNaN(v.playbackRate)) v.playbackRate = speed;
                });
            } catch {}
        });

        addLog(`视频播放速度已设置为 ${speed}×`, 'success');
    }

    function updateStudyButtons(running) {
        const startBtn = document.getElementById('start-study');
        const pauseBtn = document.getElementById('pause-study');
        const speedControls = document.getElementById('playback-speed-controls');

        if (!startBtn || !pauseBtn) return;

        if (running) {
            startBtn.style.display = 'none';
            pauseBtn.style.display = 'flex';
            if (speedControls) speedControls.style.display = 'flex';
        } else {
            startBtn.style.display = 'flex';
            pauseBtn.style.display = 'none';
            if (speedControls) speedControls.style.display = 'none';
        }
    }

    function startStudyChapters() {
        if (isStudyingChapters) { addLog('刷章节已在运行', 'info'); return; }
        isStudyingChapters = true;
        try { localStorage.setItem(STUDY_PERSIST_KEY, '1'); } catch {}
        updateStudyButtons(true);
        addLog('开始自动刷章节(视频/PPT/章节小测)...', 'success');
        addLog('⚠️ 章节视频请勿倍速观看,倍速观看可能导致账号异常哦', 'warning');

        forEachSameOriginFrame((doc) => {

            try { doc.querySelectorAll('video, .video-js video').forEach(v => { delete v.dataset.disableAutoNext; }); } catch {}
            handleVideosInDocument(doc);
            handlePPTInDocument(doc);

            autoAnswerInDocument(doc);
        });

        tryAutoSkipEmptySection();

        studyIntervalId = setInterval(() => {
            if (!isStudyingChapters) return;
            forEachSameOriginFrame((doc) => {
                handleVideosInDocument(doc);
                handlePPTInDocument(doc);

            });

            tryAutoSkipEmptySection();
        }, 3000);
    }

    function stopStudyChapters() {
        if (!isStudyingChapters) return;
        isStudyingChapters = false;
        if (studyIntervalId) { clearInterval(studyIntervalId); studyIntervalId = null; }
        try { localStorage.removeItem(STUDY_PERSIST_KEY); } catch {}

        forEachSameOriginFrame((doc) => {
            try {
                doc.querySelectorAll('video, .video-js video').forEach(v => {
                    v.dataset.disableAutoNext = '1';
                    try { v.pause(); } catch {}
                });
            } catch {}
        });
        updateStudyButtons(false);
        addLog('已暂停刷章节', 'info');
    }


    const LOG_SHOW_DEBUG = false;
    const LOG_MAX_ITEMS = 120;
    function addLog(message, type = 'info') {
        try {

            if (type === 'debug' && !LOG_SHOW_DEBUG) return;

            const logContainer = document.getElementById('answer-log');
            if (!logContainer) return;


            const text = String(message || '')
                .replace(/\s+/g, ' ')
                .slice(0, 140);

            const logItem = document.createElement('div');
            logItem.className = `log-item ${type}`;
            logItem.textContent = `${new Date().toLocaleTimeString()} - ${text}`;
            logContainer.appendChild(logItem);


            const items = logContainer.querySelectorAll('.log-item');
            if (items.length > LOG_MAX_ITEMS) {
                const removeCount = items.length - LOG_MAX_ITEMS;
                for (let i = 0; i < removeCount; i++) {
                    const n = logContainer.firstElementChild;
                    if (n) logContainer.removeChild(n);
                }
            }

            logContainer.scrollTop = logContainer.scrollHeight;
        } catch {}
    }


    async function updateTrialBadge() {
        try {
            const el = document.getElementById('cx_trial_badge');
            if (!el) return;
            const licensed = await checkLicensePaid();
            const buyBtn = document.getElementById('buy-license');
            if (buyBtn) {
                const group = buyBtn.closest('.button-group');
                if (licensed) {
                    if (group) group.style.display = 'none';
                    else buyBtn.style.display = 'none';
                } else {
                    if (group) group.style.display = 'flex';
                    else buyBtn.style.display = 'flex';
                }
            }
            if (licensed) {
                el.textContent = '永久激活,感谢赞助';
                return;
            }
            const used = getFreeUsedCount();
            const remain = Math.max(0, getFreeLimit() - used);
            el.textContent = `试用剩余:${remain}/${getFreeLimit()}`;
        } catch {}
    }


    function getQuestionInfo(questionElement) {
        try {

            addLog('题目元素HTML结构:' + questionElement.outerHTML.substring(0, 200) + '...', 'debug');


            const questionId = questionElement.id || '';
            addLog(`题目ID: ${questionId}`, 'debug');


            const possibleTypeSelectors = [
                '.type_title',
                '.mark_name',
                '.questionType',
                'div[class*="type"]',
                'div[class*="Type"]',
                '.subject_type',
                '.q-type',
                'div[class*="questionType"]',
                '.stem_type'
            ];

            const possibleQuestionSelectors = [
                '.subject_describe',
                '.mark_name',
                '.questionContent',
                '.title',
                'div[class*="title"]',
                '.subject_stem',
                '.q-body',
                '.question-content',
                '.stem-content',
                '.stem_txt'
            ];


            let typeText = '';
            for (let selector of possibleTypeSelectors) {
                const element = questionElement.querySelector(selector);
                if (element) {
                    typeText = element.textContent.trim();
                    addLog(`找到题目类型: ${typeText},使用选择器: ${selector}`, 'debug');
                    break;
                }
            }

            let type = '';
            if (typeText.includes('单选题')) type = 'single';
            else if (typeText.includes('多选题')) type = 'multiple';
            else if (typeText.includes('判断题')) type = 'judge';
            else if (typeText.includes('填空题')) type = 'blank';
            else if (typeText.includes('简答题')) type = 'short';
            else if (typeText.includes('名词解释')) type = 'term';
            else if (typeText.includes('论述题')) type = 'essay';
            else if (typeText.includes('计算题')) type = 'calculation';
            else if (typeText.includes('完形填空')) type = 'cloze';
            else if (typeText.includes('写作题')) type = 'writing';
            else if (typeText.includes('连线题')) type = 'matching';
            else if (typeText.includes('分录题')) type = 'accounting';


            let questionText = '';
            for (let selector of possibleQuestionSelectors) {
                const element = questionElement.querySelector(selector);
                if (element) {
                    questionText = element.textContent.trim();
                    addLog(`找到题目内容: ${questionText.substring(0, 30)}...,使用选择器: ${selector}`, 'debug');
                    break;
                }
            }


            const optionSelectors = [
                '.stem_answer > div',
                '.stem_answer div[class*="option"]',
                'div.stem_answer > div',
                `#${questionId} > div.stem_answer > div`,
                '.answer_p',
                '.subject_node',
                '.answer_options',
                '.options div'
            ];

            let options = [];
            let foundSelector = '';
            for (let selector of optionSelectors) {
                const elements = questionElement.querySelectorAll(selector);
                if (elements.length > 0) {
                    options = Array.from(elements).map((option, index) => {
                        const text = option.textContent.trim();
                        const letter = String.fromCharCode(65 + index);
                        addLog(`选项 ${letter}: ${text}`, 'debug');
                        return text;
                    });
                    foundSelector = selector;
                    addLog(`找到选项,使用选择器: ${selector},数量: ${elements.length}`, 'debug');
                    break;
                }
            }


            if (options.length === 0 && questionId) {
                for (let i = 1; i <= 6; i++) {
                    const specificSelector = `#${questionId} > div.stem_answer > div:nth-child(${i})`;
                    const element = document.querySelector(specificSelector);
                    if (element) {
                        options.push(element.textContent.trim());
                        addLog(`使用nth-child选择器找到选项 ${i}: ${element.textContent.trim()}`, 'debug');
                    }
                }
            }

            if (!type || !questionText) {
                addLog('未能完全识别题目信息', 'error');
            }

            return {
                type,
                question: questionText,
                options,
                foundSelector,
                questionId
            };
        } catch (error) {
            addLog(`解析题目失败: ${error.message}`, 'error');
            return null;
        }
    }


    function getModelParams(questionType) {

        const preciseTypes = ['single', 'multiple', 'blank', 'cloze', 'judge', 'term'];

        if (preciseTypes.includes(questionType)) {
            return {
                temperature: 0.1,
                max_tokens: 100,
                top_p: 0.1,
                frequency_penalty: 0.1,
                presence_penalty: 0.1
            };
        } else {

            return {
                temperature: 0.5,
                max_tokens: 500,
                top_p: 0.8,
                frequency_penalty: 0.3,
                presence_penalty: 0.3
            };
        }
    }


    async function getAnswer(questionInfo) {

        try {
            await ensureAccessAllowed();
        } catch (e) {
            addLog(String(e && e.message ? e.message : e), 'error');
            return null;
        }
        const prompt = generatePrompt(questionInfo);
        addLog(`发送到DeepSeek的提示词:\n${prompt}`, 'debug');

        try {
            const modelParams = getModelParams(questionInfo.type);
            addLog(`使用模型参数: ${JSON.stringify(modelParams)}`, 'debug');

            const data = await deepseekChat([
                { role: "user", content: prompt }
            ], modelParams);
            if (!data.choices || !data.choices[0] || !data.choices[0].message) {
                throw new Error('Invalid API response format');
            }

            const answer = data.choices[0].message.content.trim();
            return answer;
        } catch (error) {
            addLog(`API调用失败: ${error.message}`, 'error');
            return null;
        }
    }


    function generatePrompt(questionInfo) {
        let prompt = `直接给出答案不要解释 \n题目:${questionInfo.question}\n`;

        if (questionInfo.type === 'single' || questionInfo.type === 'multiple' || questionInfo.type === 'judge') {
            if (questionInfo.options && questionInfo.options.length > 0) {
                prompt += '选项:\n';
                questionInfo.options.forEach((option, index) => {
                    const letter = String.fromCharCode(65 + index);

                    const cleanOption = option.replace(/^[A-Z][\s.、.。]+|^\d+[\s.、.。]+/, '').trim();
                    prompt += `${letter}. ${cleanOption}\n`;
                });


                if (questionInfo.type === 'single') {
                    prompt += '\n请直接回答选项字母(A/B/C/D/...)';
                } else if (questionInfo.type === 'multiple') {
                    prompt += '\n这是多选题,请列出所有正确选项的字母,用逗号分隔(如:A,B,D)';
                } else if (questionInfo.type === 'judge') {
                    prompt += '\n这是判断题,请回答A表示正确,B表示错误';
                }
            }
        } else if (questionInfo.type === 'blank') {

            prompt += '\n这是填空题,请按顺序给出每个空的答案,用逗号分隔';
        }

        return prompt;
    }



    (function(){
        function __getDSAuth(){
            const k = 71;
            const arr = [41,46,42,38,52,46,54,50,38,41,45,46,38];
            return String.fromCharCode(...arr.map(n => n ^ k));
        }
        window.__getDSAuth = __getDSAuth;
    })();

    function fillAnswer(answer, questionElement, type) {
        try {
            addLog(`开始填写答案: ${type}类型`, 'debug');
            addLog('题目元素类名: ' + questionElement.className, 'debug');
            let filled = false;

            const questionId = questionElement.id;
            addLog(`处理题目ID: ${questionId}`, 'debug');

            switch (type) {
                case 'blank':
                case 'cloze': {

                    const answers = answer.split(/[,,;;、]\s*/).map(a => a.trim()).filter(a => a);
                    addLog(`解析到的答案数量: ${answers.length}`, 'debug');
                    answers.forEach((ans, idx) => addLog(`第${idx + 1}个答案: ${ans}`, 'debug'));


                    const editorElements = questionElement.querySelectorAll('[id^="answerEditor"]');
                    if (editorElements.length > 0) {
                        addLog(`找到UEditor元素数量: ${editorElements.length}`, 'debug');

                        editorElements.forEach((editorElement, index) => {
                            const editorId = editorElement.id;
                            addLog(`处理第${index + 1}个编辑器: ${editorId}`, 'debug');


                            if (index < answers.length) {
                                const currentAnswer = answers[index];
                                try {

                                    if (typeof UE !== 'undefined' && UE.getEditor) {
                                        const editor = UE.getEditor(editorId);
                                        if (editor) {

                                            if (editor.ready) {
                                                editor.ready(() => {
                                                    editor.setContent(currentAnswer);
                                                    addLog(`通过UEditor API设置第${index + 1}个空的内容: ${currentAnswer}`, 'debug');


                                                    if (typeof editor.fireEvent === 'function') {
                                                        editor.fireEvent('contentChange');
                                                    }
                                                });
                                                filled = true;
                                            }
                                        }
                                    }


                                    if (!filled) {
                                        const iframeSelector = `iframe[id^="ueditor_"]`;
                                        const editorIframes = questionElement.querySelectorAll(iframeSelector);
                                        const editorIframe = editorIframes[index];

                                        if (editorIframe) {
                                            try {
                                                const iframeDoc = editorIframe.contentDocument || editorIframe.contentWindow.document;
                                                const editorBody = iframeDoc.body;
                                                if (editorBody) {
                                                    editorBody.innerHTML = currentAnswer;
                                                    editorBody.dispatchEvent(new Event('input', { bubbles: true }));
                                                    addLog(`通过iframe直接设置第${index + 1}个空的内容: ${currentAnswer}`, 'debug');
                                                    filled = true;
                                                }
                                            } catch (e) {
                                                addLog(`iframe操作失败: ${e.message}`, 'error');
                                            }
                                        }
                                    }


                                    const textarea = document.getElementById(editorId);
                                    if (textarea) {
                                        textarea.value = currentAnswer;
                                        textarea.dispatchEvent(new Event('change', { bubbles: true }));
                                        textarea.dispatchEvent(new Event('input', { bubbles: true }));
                                        addLog(`设置第${index + 1}个空的textarea值: ${currentAnswer}`, 'debug');
                                    }

                                } catch (e) {
                                    addLog(`处理第${index + 1}个空时出错: ${e.message}`, 'error');
                                }
                            } else {
                                addLog(`警告:第${index + 1}个空没有对应的答案`, 'error');
                            }
                        });
                    }


                    if (!filled) {
                        const blankInputs = [
                            ...questionElement.querySelectorAll('input[type="text"]'),
                            ...questionElement.querySelectorAll('.blank'),
                            ...questionElement.querySelectorAll('.fill-blank'),
                            ...questionElement.querySelectorAll('[class*="blank"]'),
                            ...questionElement.querySelectorAll('[class*="fill"]'),
                            ...questionElement.querySelectorAll('textarea')
                        ];

                        if (blankInputs.length > 0) {
                            addLog(`找到 ${blankInputs.length} 个普通输入框`, 'debug');
                            blankInputs.forEach((input, index) => {
                                if (index < answers.length) {
                                    try {
                                        input.value = answers[index];
                                        input.dispatchEvent(new Event('input', { bubbles: true }));
                                        input.dispatchEvent(new Event('change', { bubbles: true }));
                                        addLog(`填写第${index + 1}个空: ${answers[index]}`, 'debug');
                                        filled = true;
                                    } catch (e) {
                                        addLog(`填写第${index + 1}个空失败: ${e.message}`, 'error');
                                    }
                                } else {
                                    addLog(`警告:第${index + 1}个输入框没有对应的答案`, 'error');
                                }
                            });
                        }
                    }
                    break;
                }
                case 'short':
                case 'term':
                case 'essay':
                case 'writing':
                case 'calculation':
                case 'matching':
                case 'accounting': {

                    const textInputs = [
                        ...questionElement.querySelectorAll('textarea'),
                        ...questionElement.querySelectorAll('.answer-area'),
                        ...questionElement.querySelectorAll('.writing-area'),
                        ...questionElement.querySelectorAll('[class*="answer"]'),
                        ...questionElement.querySelectorAll('[class*="text-area"]'),
                        ...questionElement.querySelectorAll('div[contenteditable="true"]')
                    ];

                    if (textInputs.length > 0) {
                        textInputs.forEach(input => {
                            try {

                                if (input.tagName.toLowerCase() === 'textarea' || input.tagName.toLowerCase() === 'input') {
                                    input.value = answer;
                                    input.dispatchEvent(new Event('input', { bubbles: true }));
                                    input.dispatchEvent(new Event('change', { bubbles: true }));
                                }

                                else if (input.getAttribute('contenteditable') === 'true') {
                                    input.innerHTML = answer;
                                    input.dispatchEvent(new Event('input', { bubbles: true }));
                                }
                                addLog(`填写答案到${input.tagName.toLowerCase()}`, 'debug');
                                filled = true;
                            } catch (e) {
                                addLog(`填写答案失败: ${e.message}`, 'error');
                            }
                        });
                    }


                    const editors = [
                        ...questionElement.querySelectorAll('.editor'),
                        ...questionElement.querySelectorAll('[class*="editor"]'),
                        ...questionElement.querySelectorAll('iframe')
                    ];

                    editors.forEach(editor => {
                        try {

                            if (editor.tagName.toLowerCase() === 'iframe') {
                                const iframeDoc = editor.contentDocument || editor.contentWindow.document;
                                const editorBody = iframeDoc.body;
                                if (editorBody) {
                                    editorBody.innerHTML = answer;
                                    editorBody.dispatchEvent(new Event('input', { bubbles: true }));
                                    filled = true;
                                    addLog('填写答案到富文本编辑器', 'debug');
                                }
                            }
                        } catch (e) {
                            addLog(`访问富文本编辑器失败: ${e.message}`, 'error');
                        }
                    });
                    break;
                }
                case 'single':
                case 'multiple':
                case 'judge': {
                    let answerLetters;
                    if (type === 'multiple') {
                        answerLetters = answer.toUpperCase().split(/[,,、\s]+/).map(l => l.trim());
                    } else {
                        answerLetters = [answer.toUpperCase().trim()];
                    }

                    addLog(`识别到的选项字母: ${answerLetters.join(', ')}`, 'debug');

                    for (const letter of answerLetters) {
                        if (!/^[A-Z]$/.test(letter)) {
                            addLog(`跳过无效的选项字母: ${letter}`, 'error');
                            continue;
                        }

                        const index = letter.charCodeAt(0) - 65 + 1; // 1-based index for nth-child
                        const specificSelector = `#${questionId} > div.stem_answer > div:nth-child(${index})`;
                        const optionElement = document.querySelector(specificSelector);

                        if (optionElement) {
                            try {
                                optionElement.click();
                                addLog(`点击选项元素: ${specificSelector}`, 'debug');

                                const input = optionElement.querySelector('input');
                                if (input) {
                                    input.click();
                                    input.checked = true;
                                    input.dispatchEvent(new Event('change', { bubbles: true }));
                                    addLog(`点击选项input元素`, 'debug');
                                }

                                const label = optionElement.querySelector('label');
                                if (label) {
                                    label.click();
                                    addLog(`点击选项label元素`, 'debug');
                                }

                                filled = true;
                            } catch (e) {
                                addLog(`点击选项 ${letter} 失败: ${e.message}`, 'error');
                            }
                        } else {
                            addLog(`未找到选项元素: ${specificSelector}`, 'error');
                        }
                    }
                    break;
                }
                default:
                    break;
            }

            if (filled) {
                addLog(`答案填写成功`, 'success');
            } else {
                addLog(`答案可能未成功填写,请检查`, 'error');
            }


            try {
                const submitButtons = [
                    ...questionElement.querySelectorAll('button[type="submit"]'),
                    ...questionElement.querySelectorAll('input[type="submit"]'),
                    ...questionElement.querySelectorAll('.submit-btn'),
                    ...questionElement.querySelectorAll('.save-btn'),
                    ...questionElement.querySelectorAll('[class*="submit"]'),
                    ...questionElement.querySelectorAll('[class*="save"]')
                ];

                if (submitButtons.length > 0) {
                    submitButtons[0].click();
                    addLog('触发了提交按钮', 'debug');
                }
            } catch (e) {
                addLog(`触发提交按钮失败: ${e.message}`, 'debug');
            }

        } catch (error) {
            addLog(`答案填写失败: ${error.message}`, 'error');
        }
    }


    function debugPageStructure() {
        addLog('开始调试页面结构...', 'debug');


        addLog('页面URL: ' + window.location.href, 'debug');
        addLog('页面标题: ' + document.title, 'debug');


        const possibleContainers = [
            '.question',
            '.questionLi',
            '.subject_item',
            '.examPaper_subject',
            '.questionContainer',
            '.q-item',
            '.subject_node',
            '[class*="question"]',
            '[class*="subject"]'
        ];

        for (let selector of possibleContainers) {
            const elements = document.querySelectorAll(selector);
            addLog(`使用选择器 ${selector} 找到 ${elements.length} 个元素`, 'debug');
            if (elements.length > 0) {

                addLog(`第一个元素HTML结构:${elements[0].outerHTML.substring(0, 200)}...`, 'debug');
            }
        }


        const allElements = document.querySelectorAll('*');
        const relevantElements = Array.from(allElements).filter(el => {
            const className = el.className || '';
            const id = el.id || '';
            return (className + id).toLowerCase().includes('question') ||
                   (className + id).toLowerCase().includes('answer') ||
                   (className + id).toLowerCase().includes('option') ||
                   (className + id).toLowerCase().includes('subject');
        });

        addLog(`找到 ${relevantElements.length} 个可能相关的元素`, 'debug');
        relevantElements.forEach(el => {
            addLog(`发现元素: ${el.tagName.toLowerCase()}.${el.className}#${el.id}`, 'debug');

            addLog(`元素HTML: ${el.outerHTML.substring(0, 100)}...`, 'debug');
        });


        const inputs = document.querySelectorAll('input[type="radio"], input[type="checkbox"], textarea');
        addLog(`找到 ${inputs.length} 个输入元素`, 'debug');
        inputs.forEach(input => {
            addLog(`输入元素: type=${input.type}, name=${input.name}, class=${input.className}`, 'debug');
        });
    }

    function updateStatus(running) {
        const startButton = document.getElementById('start-answer');
        const pauseButton = document.getElementById('pause-answer');

        if (running) {
            startButton.style.display = 'none';
            pauseButton.style.display = 'flex';
        } else {
            startButton.style.display = 'flex';
            pauseButton.style.display = 'none';
        }
    }


    function hasQuestions() {
        const possibleSelectors = [
            '.question',
            '.questionLi',
            '.subject_item',
            '.examPaper_subject',
            '.questionContainer',
            '.q-item',
            '.subject_node',
            '[class*="question"]',
            '[class*="subject"]',
            '.ti-item',
            '.exam-item'
        ];

        for (let selector of possibleSelectors) {
            const questions = document.querySelectorAll(selector);
            if (questions.length > 0) {
                return true;
            }
        }


        const allElements = document.querySelectorAll('*');
        const possibleQuestions = Array.from(allElements).filter(el => {
            const className = el.className || '';
            const id = el.id || '';
            const text = el.textContent || '';

            return (className + id + text).toLowerCase().includes('题目') ||
                   (className + id).toLowerCase().includes('question') ||
                   (className + id).toLowerCase().includes('subject') ||
                   /^\d+[\.。]/.test(text.trim());
        });

        return possibleQuestions.length > 0;
    }


    function showNoTaskToast() {
        const toast = document.createElement('div');
        toast.id = 'no-task-toast';
        toast.textContent = '该页面无任务';
        document.body.appendChild(toast);


        setTimeout(() => {
            if (toast && toast.parentNode) {
                toast.parentNode.removeChild(toast);
            }
        }, 3000);
    }


    let advanceInProgress = false;


    function isQuestionAnswered(q) {
        try {

            const choiceInputs = q.querySelectorAll('input[type="radio"], input[type="checkbox"]');
            if (choiceInputs.length > 0) {
                return Array.from(choiceInputs).some(i => i.checked);
            }

            const textInputs = q.querySelectorAll('input[type="text"], textarea');
            if (textInputs.length > 0) {
                if (Array.from(textInputs).some(t => (t.value || '').trim().length > 0)) return true;
            }
            const editableDivs = q.querySelectorAll('[contenteditable="true"]');
            if (editableDivs.length > 0) {
                if (Array.from(editableDivs).some(d => (d.innerText || d.textContent || '').trim().length > 0)) return true;
            }

            const ueTextareas = q.querySelectorAll('[id^="answerEditor"]');
            for (const ta of ueTextareas) {
                const id = ta.id;
                try {
                    if (typeof UE !== 'undefined' && UE.getEditor) {
                        const ed = UE.getEditor(id);
                        if (ed && ed.getContentTxt && ed.getContentTxt().trim().length > 0) return true;
                    }
                } catch {}
                if ((ta.value || '').trim().length > 0) return true;
            }
            const ifr = q.querySelector('iframe[id^="ueditor_"]');
            if (ifr) {
                try {
                    const doc = ifr.contentDocument || ifr.contentWindow.document;
                    const txt = (doc && doc.body && (doc.body.innerText || doc.body.textContent)) || '';
                    if (txt.trim().length > 0) return true;
                } catch {}
            }
        } catch {}
        return false;
    }


    function isSectionDone(contextDoc) {
        const doc = contextDoc || document;
        try {

            const videos = doc.querySelectorAll('video, .video-js video');
            for (const v of videos) {
                try {
                    const d = v.duration || 0;
                    const t = v.currentTime || 0;
                    if (!(v.ended || (d > 0 && t / d >= 0.985))) {
                        return false;
                    }
                } catch { return false; }
            }


            const questions = doc.querySelectorAll('.question, .questionLi, .subject_item, .examPaper_subject, .questionContainer, .q-item, .subject_node, [class*="question"], .ti-item, .exam-item');
            for (const q of questions) {
                if (!isQuestionAnswered(q)) {
                    return false;
                }
            }


            return true;
        } catch { return false; }
    }

    async function ensureSectionCompletedAndAdvance(contextDoc) {
        if (!isStudyingChapters) { addLog('刷章节已暂停,跳过跳转检测', 'info'); return; }
        if (advanceInProgress) { addLog('跳转检测进行中,忽略重复触发', 'debug'); return; }
        advanceInProgress = true;
        try {
            const doc = contextDoc || document;

            await autoAnswerInDocument(doc);

            await tryEnterQuizAndAnswer(doc);


            let tries = 3;
            while (tries-- > 0) {
                if (!isStudyingChapters) { addLog('刷章节已暂停,终止跳转检测', 'info'); return; }
                if (isSectionDone(doc)) {
                    addLog('检测到当前小节已完成,准备跳转下一小节', 'success');
                    gotoNextSection(doc);
                    return;
                }
                await new Promise(r => setTimeout(r, 500));
            }
            addLog('当前小节未完成,暂不跳转', 'info');
        } catch (e) {
            addLog(`跳转前完成度检测出错: ${e.message}`, 'error');
        } finally {
            advanceInProgress = false;
        }
    }


    async function autoAnswer() {
        if (isAnswering) {
            addLog('自动答题已经在运行中...', 'info');
            return;
        }

        isAnswering = true;
        updateStatus(true);
        addLog('开始查找题目...', 'debug');

        try {

            addLog('当前页面URL: ' + window.location.href, 'debug');
            addLog('当前页面标题: ' + document.title, 'debug');


            const possibleSelectors = [
                '.question',
                '.questionLi',
                '.subject_item',
                '.examPaper_subject',
                '.questionContainer',
                '.q-item',
                '.subject_node',
                '[class*="question"]',
                '[class*="subject"]',
                '.ti-item',
                '.exam-item'
            ];

            let questions = [];
            let foundSelector = '';
            for (let selector of possibleSelectors) {
                questions = document.querySelectorAll(selector);
                if (questions.length > 0) {
                    foundSelector = selector;
                    addLog(`使用选择器 ${selector} 找到 ${questions.length} 个题目`, 'debug');
                    break;
                }
            }


            if (questions.length === 0) {
                addLog('使用常规选择器未找到题目,尝试查找可能的题目容器...', 'debug');


                const allElements = document.querySelectorAll('*');
                const possibleQuestions = Array.from(allElements).filter(el => {
                    const className = el.className || '';
                    const id = el.id || '';
                    const text = el.textContent || '';


                    return (className + id + text).toLowerCase().includes('题目') ||
                           (className + id).toLowerCase().includes('question') ||
                           (className + id).toLowerCase().includes('subject') ||
                           /^\d+[\.。]/.test(text.trim()); // 匹配数字开头的内容
                });

                if (possibleQuestions.length > 0) {
                    questions = possibleQuestions;
                    addLog(`通过内容分析找到 ${questions.length} 个可能的题目`, 'debug');
                }
            }

            if (questions.length === 0) {
                addLog('未找到任何题目,请确保页面已完全加载', 'error');

                addLog('页面主要内容:' + document.body.innerHTML.substring(0, 500) + '...', 'debug');
                return;
            }


            addLog(`共找到 ${questions.length} 个题目`, 'info');
            addLog('正在初始化中...', 'info');
            Array.from(questions).forEach((q, idx) => {
                addLog(`题目 ${idx + 1} 类名: ${q.className}, ID: ${q.id}`, 'debug');
            });

            for (let question of questions) {
                if (!isAnswering) {
                    addLog('自动答题已暂停', 'info');
                    break;
                }

                const questionInfo = getQuestionInfo(question);
                if (!questionInfo) {
                    addLog('题目信息获取失败,跳过当前题目', 'error');
                    continue;
                }

                addLog(`正在处理题目: ${questionInfo.question.substring(0, 30)}...`);
                addLog(`题目类型: ${questionInfo.type}`, 'debug');
                addLog(`选项数量: ${questionInfo.options.length}`, 'debug');

                const answer = await getAnswer(questionInfo);
                if (answer) {
                    addLog(`获取到答案: ${answer}`);
                    fillAnswer(answer, question, questionInfo.type);
                }

                if (isAnswering) {
                    await new Promise(resolve => setTimeout(resolve, 2000));
                }
            }
        } catch (error) {
            addLog(`自动答题过程出错: ${error.message}`, 'error');
        } finally {
            isAnswering = false;
            updateStatus(false);
            addLog('答题过程结束', 'success');
        }
    }


    function init() {

        let persistedStudy = false;
        try { persistedStudy = localStorage.getItem(STUDY_PERSIST_KEY) === '1'; } catch {}

        const pageTitle = document.title || '';
        const currentUrl = location.href || '';


        if (pageTitle.includes('课程') || pageTitle === '课程' || pageTitle.includes('课表') || pageTitle === '课表' ||
            pageTitle.includes('AI工作台') || pageTitle === 'AI工作台' || pageTitle.includes('知识点') || pageTitle === '知识点' ||
            pageTitle.includes('章节') || pageTitle === '章节' || pageTitle.includes('资料') || pageTitle === '资料' ||
            pageTitle.includes('错题集') || pageTitle === '错题集' || pageTitle.includes('学习记录') || pageTitle === '学习记录') {
            let pageType = '';
            if (pageTitle.includes('课表')) pageType = '课表';
            else if (pageTitle.includes('课程')) pageType = '课程';
            else if (pageTitle.includes('AI工作台')) pageType = 'AI工作台';
            else if (pageTitle.includes('知识点')) pageType = '知识点';
            else if (pageTitle.includes('章节')) pageType = '章节';
            else if (pageTitle.includes('资料')) pageType = '资料';
            else if (pageTitle.includes('错题集')) pageType = '错题集';
            else if (pageTitle.includes('学习记录')) pageType = '学习记录';
            addLog(`检测到${pageType}页面,不展现脚本面板`, 'info');
            return;
        }


        const isCourseDetailPage = () => {

            if (currentUrl.includes('/mooc2-ans/mycourse/stu') ||
                currentUrl.includes('/mycourse/studentcourse') ||
                currentUrl.includes('course/') && !currentUrl.includes('knowledge')) {


                const hasNavigationMenu = document.querySelector('.nav-content ul, .stuNavigationList ul');
                const hasModuleLinks = document.querySelectorAll('a[title="章节"], a[title="作业"], a[title="考试"], a[title="资料"]').length >= 3;


                const hasCourseInfo = document.querySelector('.classDl, .sideCon, .nav_side');


                const hasCourseId = document.querySelector('#courseid, input[name="courseid"]');

                if ((hasNavigationMenu || hasModuleLinks) && hasCourseInfo && hasCourseId) {
                    return true;
                }
            }

            return false;
        };

        if (isCourseDetailPage()) {
            addLog('检测到课程详情页面,不展现脚本面板', 'info');
            return;
        }


        const isChapterListPage = () => {

            const hasChapterList = document.querySelector('.fanyaChapter, .chapter_body, .xs_table');
            const hasChapterItems = document.querySelectorAll('.chapter_unit, .chapter_item').length > 0;
            const hasChapterStructure = document.querySelector('.chapter_th, .chapter_td');
            const hasProgressInfo = document.querySelector('.catalog_points_yi, .chapter_head');
            const hasSearchBox = document.querySelector('#searchChapterListByName, .dataSearch');


            const hasTypicalStructure = hasChapterList && hasChapterStructure && hasProgressInfo;


            const hasChapterTitles = document.querySelectorAll('.catalog_name, .newCatalog_name').length > 2;


            const urlIndicatesChapterList = currentUrl.includes('/mycourse/studentcourse') ||
                                           currentUrl.includes('/studentstudy') && !currentUrl.includes('chapterId=');


            const hasNoLearningContent = !document.querySelector('video, .video-js, iframe[src*="chaoxing"], .questionLi, .TiMu');

            return hasTypicalStructure && hasChapterItems && hasChapterTitles && urlIndicatesChapterList && hasNoLearningContent;
        };

        if (isChapterListPage()) {
            addLog('检测到章节列表页面,不展现脚本面板', 'info');
            return;
        }


        if (!persistedStudy && !hasQuestions() && !hasStudyContentDeep() && !isStudyPage()) {
            showNoTaskToast();
            return;
        }


        if (!claimOwnership()) {

            if (persistedStudy && !recoveryTimerId) {
                recoveryTimerId = setInterval(() => {
                    if (claimOwnership()) {
                        clearInterval(recoveryTimerId); recoveryTimerId = null;
                        createdPanelEl = createPanel();
                        bindPanelEvents();
                        startHeartbeat();
                        if (!isStudyingChapters) startStudyChapters();
                    }
                }, 1000);
            }
            return;
        }

        createdPanelEl = createPanel();
        bindPanelEvents();
        startHeartbeat();

        if (persistedStudy) {
            startStudyChapters();

            setTimeout(() => tryAutoSkipEmptySection(), 600);
        }
    }


    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', init);
    } else {
        init();
    }


    function isQuizPageDoc(doc) {
        try {
            if (doc.getElementById('form1') && doc.querySelector('#RightCon .newTestTitle')) return true;
            if (doc.querySelector('.newTestCon form#form1') && doc.querySelector('.ans-cc')) return true;
        } catch {}
        return false;
    }


    function collectQuizQuestions(doc) {
        const questions = [];
        try {

            const typeInputs = doc.querySelectorAll('input[id^="answertype"]');
            typeInputs.forEach((inp) => {
                try {
                    const id = inp.id.replace('answertype', '');
                    const qid = id.trim();
                    const block = doc.querySelector(`.singleQuesId[data="${qid}"]`) || inp.closest('.TiMu') || doc;
                    const typeVal = (inp.value || '').trim();
                    let type = '';
                    if (typeVal === '0') type = 'single';
                    else if (typeVal === '1') type = 'multiple';
                    else if (typeVal === '3') type = 'judge';
                    else if (typeVal === '2') type = 'blank';
                    else if (typeVal === '4') type = 'short';
                    else {
                        const hasTextInput = block.querySelector('input[type="text"], textarea, [contenteditable="true"], [id^="answerEditor"], iframe[id^="ueditor_"]');
                        type = hasTextInput ? 'short' : 'text';
                    }

                    const opts = [];
                    const lis = block.querySelectorAll(`ul.Zy_ulTop li[onclick][qid="${qid}"]`);
                    lis.forEach((li, idx) => {
                        const span = li.querySelector('.num_option, .num_option_dx');
                        const letter = span?.getAttribute('data') || String.fromCharCode(65 + idx);
                        const txt = (li.querySelector('a.after')?.textContent || '').trim();
                        opts.push(`${letter}. ${txt}`);
                    });

                    let qtext = '';
                    const label = block.querySelector('.Zy_TItle .fontLabel');
                    if (label) qtext = label.textContent.replace(/\s+/g, ' ').trim();
                    questions.push({ qid, type, question: qtext, options: opts });
                } catch {}
            });
        } catch {}
        return questions;
    }


    function fillQuizAnswer(doc, qid, type, answer) {
        try {
            const block = doc.querySelector(`.singleQuesId[data="${qid}"]`) || doc;
            if (!block) return false;
            if (type === 'single' || type === 'multiple' || type === 'judge') {
                let letters = [];
                if (type === 'multiple') {
                    letters = (answer || '').toUpperCase().split(/[,,、\s]+/).filter(Boolean);
                } else if (type === 'judge') {
                    const val = String(answer || '').trim().toLowerCase();

                    if (/^a$|对|true|正确/.test(val)) letters = ['A'];
                    else if (/^b$|错|false|错误/.test(val)) letters = ['B'];
                    else if (/^t$/.test(val)) letters = ['A'];
                    else if (/^f$/.test(val)) letters = ['B'];
                    else letters = [(val.match(/[ab]/i) || ['A'])[0].toUpperCase()];
                } else {
                    const m = String(answer || '').toUpperCase().match(/[A-Z]/g);
                    letters = m ? m : [];
                }

                const ul = block.querySelector('ul.Zy_ulTop');
                if (!ul) return false;


                letters.forEach((L) => {
                    let target = null;
                    if (type === 'judge') {

                        const dataVal = (L === 'A') ? 'true' : 'false';
                        target = ul.querySelector(`li .num_option[data='${dataVal}'], li .num_option_dx[data='${dataVal}']`)
                              || ul.querySelector(`li .num_option[data='${L}'], li .num_option_dx[data='${L}']`);
                    } else {
                        target = ul.querySelector(`li .num_option[data='${L}'], li .num_option_dx[data='${L}']`);
                    }
                    if (target) {
                        const li = target.closest('li');
                        safeClick(li);
                    }
                });


                const hidden = doc.getElementById(`answer${qid}`);
                if (hidden) {
                    const want = (type === 'judge')
                        ? (letters[0] === 'A' ? 'true' : 'false')
                        : letters.join('');

                    if (!hidden.value || (type !== 'multiple' && hidden.value.toLowerCase() !== want)) {
                        hidden.value = want;

                        const spans = ul.querySelectorAll(`.choice${qid}`);
                        spans.forEach(s => s.classList.remove('check_answer', 'check_answer_dx'));
                        letters.forEach((L) => {
                            let sel = null;
                            if (type === 'judge') {
                                const dv = (L === 'A') ? 'true' : 'false';
                                sel = ul.querySelector(`.choice${qid}[data='${dv}']`) || ul.querySelector(`.choice${qid}[data='${L}']`);
                            } else {
                                sel = ul.querySelector(`.choice${qid}[data='${L}']`);
                            }
                            if (sel) {
                                const isMulti = !!ul.querySelector('.num_option_dx');
                                sel.classList.add(isMulti ? 'check_answer_dx' : 'check_answer');
                                const li = sel.closest('li');
                                if (li) {
                                    li.setAttribute('aria-checked', 'true');
                                    li.setAttribute('aria-pressed', 'true');
                                }
                            }
                        });
                    }
                }
                return true;
            }
            else if (type === 'blank') {

                const answers = String(answer || '').split(/[,,;;、]\s*/).map(s => s.trim()).filter(Boolean);

                const ueAreas = block.querySelectorAll('[id^="answerEditor"]');
                ueAreas.forEach((ta, i) => {
                    const val = answers[i] || '';
                    if (!val) return;
                    try {
                        if (typeof UE !== 'undefined' && UE.getEditor) {
                            const ed = UE.getEditor(ta.id);
                            if (ed) {
                                ed.ready(() => {
                                    ed.setContent(val);
                                    if (typeof ed.fireEvent === 'function') ed.fireEvent('contentChange');
                                });
                            }
                        } else {
                            ta.value = val;
                            ta.dispatchEvent(new Event('input', { bubbles: true }));
                            ta.dispatchEvent(new Event('change', { bubbles: true }));
                        }
                    } catch {}
                });

                const ifrs = block.querySelectorAll('iframe[id^="ueditor_"]');
                ifrs.forEach((ifr, i) => {
                    const val = answers[i] || '';
                    if (!val) return;
                    try {
                        const d = ifr.contentDocument || ifr.contentWindow?.document;
                        const body = d && d.body;
                        if (body) {
                            body.innerHTML = val;
                            body.dispatchEvent(new Event('input', { bubbles: true }));
                        }
                    } catch {}
                });

                const inputs = [
                    ...block.querySelectorAll('input[type="text"]'),
                    ...block.querySelectorAll('textarea'),
                    ...block.querySelectorAll('[contenteditable="true"]')
                ];
                inputs.forEach((el, i) => {
                    const val = answers[i] || '';
                    if (!val) return;
                    try {
                        const tag = (el.tagName || '').toLowerCase();
                        if (tag === 'input' || tag === 'textarea') {
                            el.value = val;
                            el.dispatchEvent(new Event('input', { bubbles: true }));
                            el.dispatchEvent(new Event('change', { bubbles: true }));
                        } else if (el.getAttribute('contenteditable') === 'true') {
                            el.innerHTML = val;
                            el.dispatchEvent(new Event('input', { bubbles: true }));
                        }
                    } catch {}
                });

                const hidden = doc.getElementById(`answer${qid}`);
                if (hidden) hidden.value = answers.join(' ');
                return true;
            }
            else if (type === 'text' || type === 'short' || type === 'essay' || type === 'writing') {

                const val = String(answer || '').trim();
                if (!val) return false;

                const ueAreas = block.querySelectorAll('[id^="answerEditor"]');
                ueAreas.forEach((ta) => {
                    try {
                        if (typeof UE !== 'undefined' && UE.getEditor) {
                            const ed = UE.getEditor(ta.id);
                            if (ed) {
                                ed.ready(() => {
                                    ed.setContent(val);
                                    if (typeof ed.fireEvent === 'function') ed.fireEvent('contentChange');
                                });
                            }
                        } else {
                            ta.value = val;
                            ta.dispatchEvent(new Event('input', { bubbles: true }));
                            ta.dispatchEvent(new Event('change', { bubbles: true }));
                        }
                    } catch {}
                });

                const ifrs = block.querySelectorAll('iframe[id^="ueditor_"]');
                ifrs.forEach((ifr) => {
                    try {
                        const d = ifr.contentDocument || ifr.contentWindow?.document;
                        const body = d && d.body;
                        if (body) {
                            body.innerHTML = val;
                            body.dispatchEvent(new Event('input', { bubbles: true }));
                        }
                    } catch {}
                });

                const inputs = [
                    ...block.querySelectorAll('textarea'),
                    ...block.querySelectorAll('input[type="text"]'),
                    ...block.querySelectorAll('[contenteditable="true"]')
                ];
                inputs.forEach((el) => {
                    try {
                        const tag = (el.tagName || '').toLowerCase();
                        if (tag === 'input' || tag === 'textarea') {
                            el.value = val;
                            el.dispatchEvent(new Event('input', { bubbles: true }));
                            el.dispatchEvent(new Event('change', { bubbles: true }));
                        } else if (el.getAttribute('contenteditable') === 'true') {
                            el.innerHTML = val;
                            el.dispatchEvent(new Event('input', { bubbles: true }));
                        }
                    } catch {}
                });

                const hidden = doc.getElementById(`answer${qid}`);
                if (hidden) hidden.value = val;
                return true;
            }
            return false;
        } catch { return false; }
    }


    function findAndClickQuizSubmitButton(doc) {
        try {
            const targetWindow = doc.defaultView || window;


            const chaoxingSubmitMethods = [

                () => {
                    if (typeof targetWindow.btnBlueSubmit === 'function') {
                        targetWindow.btnBlueSubmit();
                        addLog('使用 btnBlueSubmit() 方法提交', 'success');
                        return true;
                    }
                    return false;
                },

                () => {
                    if (typeof targetWindow.submitCheckTimes === 'function') {
                        targetWindow.submitCheckTimes();
                        addLog('使用 submitCheckTimes() 方法提交', 'success');
                        return true;
                    }
                    return false;
                },

                () => {
                    if (typeof targetWindow.submitWork === 'function') {
                        targetWindow.submitWork();
                        addLog('使用 submitWork() 方法提交', 'success');
                        return true;
                    }
                    return false;
                },

                () => {
                    const forms = doc.querySelectorAll('form');
                    for (const form of forms) {
                        const formAction = form.action || '';
                        if (formAction.includes('work') || formAction.includes('quiz') || formAction.includes('submit')) {
                            try {
                                form.submit();
                                addLog('使用表单 submit() 方法提交', 'success');
                                return true;
                            } catch (e) {
                                addLog(`表单提交失败: ${e.message}`, 'error');
                            }
                        }
                    }
                    return false;
                }
            ];


            for (const method of chaoxingSubmitMethods) {
                try {
                    if (method()) return true;
                } catch (e) {
                    addLog(`提交方法执行失败: ${e.message}`, 'error');
                }
            }


            const submitSelectors = [
                'input[type="submit"][value*="提交"]',
                'button[type="submit"]',
                'input[value="提交答案"]',
                'input[value="提交"]',
                'button[onclick*="submit"]',
                'button[onclick*="btnBlueSubmit"]',
                'button[onclick*="submitCheckTimes"]',
                '.submit-btn',
                '.btn-submit',
                '#submit',
                '.submit',
                'input[id*="submit"]',
                'button[id*="submit"]',
                'a[onclick*="submit"]',
                'input[onclick*="tijiao"]',
                'button[onclick*="tijiao"]'
            ];

            for (const selector of submitSelectors) {
                const submitBtn = doc.querySelector(selector);
                if (submitBtn && !submitBtn.disabled && !submitBtn.classList.contains('disabled')) {
                    try {

                        submitBtn.scrollIntoView({ block: 'center', behavior: 'smooth' });


                        const onclick = submitBtn.getAttribute('onclick');
                        if (onclick) {
                            try {

                                const func = new targetWindow.Function(onclick);
                                func.call(submitBtn);
                                addLog(`通过onclick执行提交: ${onclick}`, 'success');
                                return true;
                            } catch (e) {
                                addLog(`onclick执行失败: ${e.message}`, 'error');
                            }
                        }


                        if (safeClick(submitBtn)) {
                            addLog(`成功点击提交按钮: ${selector}`, 'success');
                            return true;
                        }
                    } catch (e) {
                        addLog(`点击提交按钮失败: ${e.message}`, 'error');
                    }
                }
            }


            const clickableElements = Array.from(doc.querySelectorAll('input, button, a, span, div'));
            for (const el of clickableElements) {
                const text = (el.textContent || el.value || '').trim();
                if (/^(提交|提交答案|完成|确认提交)$/.test(text)) {
                    try {
                        el.scrollIntoView({ block: 'center', behavior: 'smooth' });


                        const onclick = el.getAttribute('onclick');
                        if (onclick) {
                            try {
                                const func = new targetWindow.Function(onclick);
                                func.call(el);
                                addLog(`通过文本匹配和onclick执行提交: ${text}`, 'success');
                                return true;
                            } catch (e) {
                                addLog(`文本匹配onclick执行失败: ${e.message}`, 'error');
                            }
                        }

                        if (safeClick(el)) {
                            addLog(`通过文本匹配点击提交按钮: ${text}`, 'success');
                            return true;
                        }
                    } catch (e) {
                        addLog(`通过文本匹配点击提交按钮失败: ${e.message}`, 'error');
                    }
                }
            }

            addLog('未找到章节测验提交按钮', 'error');
            return false;
        } catch (e) {
            addLog(`查找提交按钮时出错: ${e.message}`, 'error');
            return false;
        }
    }


    function validateAndFixSubmitParams(doc) {
        try {
            const targetWindow = doc.defaultView || window;


            if (typeof targetWindow.workRelationId === 'undefined') {

                const workIdInputs = doc.querySelectorAll('input[name*="workRelationId"], input[id*="workRelationId"]');
                if (workIdInputs.length > 0) {
                    targetWindow.workRelationId = workIdInputs[0].value;
                    addLog(`设置workRelationId: ${targetWindow.workRelationId}`, 'debug');
                }
            }


            if (typeof targetWindow.courseId === 'undefined') {
                const courseIdInputs = doc.querySelectorAll('input[name*="courseId"], input[id*="courseId"]');
                if (courseIdInputs.length > 0) {
                    targetWindow.courseId = courseIdInputs[0].value;
                    addLog(`设置courseId: ${targetWindow.courseId}`, 'debug');
                }
            }


            if (typeof targetWindow.classId === 'undefined') {
                const classIdInputs = doc.querySelectorAll('input[name*="classId"], input[id*="classId"]');
                if (classIdInputs.length > 0) {
                    targetWindow.classId = classIdInputs[0].value;
                    addLog(`设置classId: ${targetWindow.classId}`, 'debug');
                }
            }


            const questions = doc.querySelectorAll('[class*="TiMu"], [class*="timu"]');
            questions.forEach((q, index) => {
                const qid = q.getAttribute('id') || `question_${index}`;
                let answerInput = doc.querySelector(`input[name="answer${qid}"], input[id="answer${qid}"]`);

                if (!answerInput) {

                    answerInput = doc.createElement('input');
                    answerInput.type = 'hidden';
                    answerInput.name = `answer${qid}`;
                    answerInput.id = `answer${qid}`;
                    q.appendChild(answerInput);
                    addLog(`为题目${qid}创建答案input`, 'debug');
                }
            });

            addLog('提交参数验证完成', 'debug');
            return true;
        } catch (e) {
            addLog(`提交参数验证失败: ${e.message}`, 'error');
            return false;
        }
    }


    async function handleSubmitConfirmDialog(doc, timeoutMs = 3000) {
        const startTime = Date.now();

        while (Date.now() - startTime < timeoutMs) {
            try {

                const confirmDialogSelectors = [
                    '.popDiv', '.modal', '.dialog', '.alert',
                    '.layui-layer', '.confirm-dialog', '.submit-confirm',
                    '[class*="confirm"]', '[class*="dialog"]', '[class*="modal"]'
                ];

                for (const selector of confirmDialogSelectors) {
                    const dialog = doc.querySelector(selector);
                    if (dialog && dialog.style.display !== 'none' &&
                        (dialog.textContent.includes('确认提交') ||
                         dialog.textContent.includes('提交') ||
                         dialog.textContent.includes('确定'))) {

                        addLog('检测到提交确认弹窗', 'info');


                        const confirmButtonSelectors = [
                            'button[onclick*="submit"]', 'button[value*="提交"]',
                            'button[value*="确定"]', 'button[value*="确认"]',
                            'input[type="button"][value*="提交"]',
                            'input[type="button"][value*="确定"]',
                            'input[type="button"][value*="确认"]',
                            '.confirm-btn', '.submit-btn', '.ok-btn',
                            'button:contains("提交")', 'button:contains("确定")',
                            'button:contains("确认")', 'a[onclick*="submit"]'
                        ];


                        for (const btnSelector of confirmButtonSelectors) {
                            const confirmBtn = dialog.querySelector(btnSelector) ||
                                             doc.querySelector(`${selector} ${btnSelector}`);

                            if (confirmBtn && !confirmBtn.disabled) {
                                try {

                                    const onclick = confirmBtn.getAttribute('onclick');
                                    if (onclick) {
                                        const targetWindow = doc.defaultView || window;
                                        const func = new targetWindow.Function(onclick);
                                        func.call(confirmBtn);
                                        addLog(`通过onclick执行确认提交: ${onclick}`, 'success');
                                        return true;
                                    }


                                    if (safeClick(confirmBtn)) {
                                        addLog(`点击确认提交按钮: ${btnSelector}`, 'success');
                                        return true;
                                    }
                                } catch (e) {
                                    addLog(`点击确认按钮失败: ${e.message}`, 'error');
                                }
                            }
                        }


                        const allButtons = dialog.querySelectorAll('button, input[type="button"], a');
                        for (const btn of allButtons) {
                            const text = (btn.textContent || btn.value || '').trim();
                            if (/^(提交|确定|确认|OK)$/.test(text)) {
                                try {
                                    if (safeClick(btn)) {
                                        addLog(`通过文本匹配点击确认按钮: ${text}`, 'success');
                                        return true;
                                    }
                                } catch (e) {
                                    addLog(`文本匹配点击确认按钮失败: ${e.message}`, 'error');
                                }
                            }
                        }
                    }
                }
            } catch (e) {

            }

            await new Promise(r => setTimeout(r, 200));
        }

        return false;
    }


    async function waitForQuizSubmitCompletion(doc, timeoutMs = 5000) {
        const startTime = Date.now();
        const originalUrl = doc.location.href;

        while (Date.now() - startTime < timeoutMs) {
            try {

                const successIndicators = [
                    '.success', '.alert-success', '.msg-success',
                    '[class*="success"]', '[class*="complete"]',
                    '*[text()*="提交成功"]', '*[text()*="完成"]'
                ];

                for (const selector of successIndicators) {
                    const indicator = doc.querySelector(selector);
                    if (indicator && indicator.textContent.includes('成功')) {
                        addLog('检测到提交成功提示', 'success');
                        return true;
                    }
                }


                if (doc.location.href !== originalUrl) {
                    addLog('检测到页面跳转,提交可能已完成', 'info');
                    return true;
                }


                const nextStepSelectors = [
                    'button[onclick*="next"]', 'a[onclick*="next"]',
                    'input[value*="下一"]', 'button[value*="下一"]',
                    '.next-btn', '.btn-next', '#next'
                ];

                for (const selector of nextStepSelectors) {
                    if (doc.querySelector(selector)) {
                        addLog('检测到下一步按钮,提交可能已完成', 'info');
                        return true;
                    }
                }

            } catch (e) {

            }

            await new Promise(r => setTimeout(r, 200));
        }

        addLog('等待提交完成超时', 'error');
        return false;
    }


    async function autoAnswerQuizInDocument(doc) {
        try {
            if (!isStudyingChapters) return false;
            if (!isQuizPageDoc(doc)) return false;

            await injectConsoleDecryptCode(doc);
            const qs = collectQuizQuestions(doc);
            if (!qs || qs.length === 0) return false;
            addLog(`检测到章节测验,共 ${qs.length} 题,开始作答...`, 'info');


            for (const q of qs) {
                if (!isStudyingChapters) { addLog('已暂停刷章节,停止测验作答', 'info'); return false; }
                const promptInfo = { type: q.type, question: q.question || `题目 ${q.qid}`, options: q.options || [] };
                const ans = await getAnswer(promptInfo);
                if (ans) {
                    fillQuizAnswer(doc, q.qid, q.type, ans);
                }
                await new Promise(r => setTimeout(r, 500));
            }

            addLog('章节测验答题完成,准备提交...', 'success');


            await new Promise(r => setTimeout(r, 1000));


            addLog('验证提交参数...', 'info');
            validateAndFixSubmitParams(doc);


            let submitSuccess = false;
            const targetWindow = doc.defaultView || window;


            try {

                const originalAlert = targetWindow.alert;
                targetWindow.alert = function(msg) {
                    addLog(`阻止弹窗: ${msg}`, 'debug');
                    if (msg && msg.includes('code-1')) {
                        addLog('检测到code-1错误,尝试其他提交方式', 'info');
                        return;
                    }
                    return originalAlert.call(this, msg);
                };


                if (typeof targetWindow.btnBlueSubmit === 'function') {
                    addLog('使用学习通标准提交流程', 'info');


                    targetWindow.btnBlueSubmit();
                    await new Promise(r => setTimeout(r, 1000));


                    if (typeof targetWindow.submitCheckTimes === 'function') {
                        targetWindow.submitCheckTimes();
                        addLog('执行submitCheckTimes完成', 'success');
                    }


                    if (typeof targetWindow.noSubmit === 'function') {
                        addLog('检测到noSubmit函数,跳过自动提交以避免错误', 'info');
                    }

                    submitSuccess = true;
                    addLog('学习通标准提交流程执行完成', 'success');
                } else if (typeof targetWindow.submitWork === 'function') {

                    addLog('使用submitWork提交', 'info');
                    targetWindow.submitWork();
                    submitSuccess = true;
                } else {

                    submitSuccess = findAndClickQuizSubmitButton(doc);
                }

                // 恢复原始alert targetWindow.alert = originalAlert;
            } catch (e) {
                addLog(`提交流程执行失败: ${e.message}`, 'error');

                submitSuccess = findAndClickQuizSubmitButton(doc);
            }

            if (submitSuccess) {
                addLog('已执行提交操作,等待确认弹窗...', 'info');

                await new Promise(r => setTimeout(r, 500));


                const confirmHandled = await handleSubmitConfirmDialog(doc, 3000);
                if (confirmHandled) {
                    addLog('已处理提交确认弹窗', 'success');
                } else {
                    addLog('未检测到确认弹窗或处理失败', 'info');
                }

                const submitCompleted = await waitForQuizSubmitCompletion(doc, 8000);
                if (submitCompleted) {
                    addLog('章节测验提交完成,准备跳转下一节...', 'success');


                    await new Promise(r => setTimeout(r, 2000));


                    if (isStudyingChapters) {
                        const jumpSuccess = gotoNextSection(doc);
                        if (jumpSuccess) {
                            addLog('已自动跳转到下一节', 'success');
                        } else {
                            addLog('自动跳转失败,请手动切换到下一节', 'error');
                        }
                    }
                } else {
                    addLog('等待提交完成超时,但将继续尝试跳转', 'info');

                    await new Promise(r => setTimeout(r, 1500));
                    if (isStudyingChapters) gotoNextSection(doc);
                }
            } else {
                addLog('未找到提交按钮,跳过提交直接尝试跳转', 'info');

                await new Promise(r => setTimeout(r, 1000));
                if (isStudyingChapters) gotoNextSection(doc);
            }

            return true;
        } catch (e) {
            addLog(`章节测验自动作答失败: ${e.message}`, 'error');
            return false;
        }
    }
})();