广东继续教育(含公需课)自动刷课

广东公需课和继教刷课,章节完成自动进入下章

当前为 2025-09-18 提交的版本,查看 最新版本

// ==UserScript==
// @name         广东继续教育(含公需课)自动刷课
// @namespace    https://gf.qytechs.cn/
// @version      1.1
// @description  广东公需课和继教刷课,章节完成自动进入下章
// @author       lzhzssy
// @icon         https://ggfw.gdhrss.gov.cn/favicon.ico
// @match        http*://ggfw.hrss.gd.gov.cn/zxpx/auc/play/player*
// @license      GPLv3
// ==/UserScript==


setTimeout(function () {
    //静音
    p.tag.muted = true;
    var errChecking = setInterval(function () {
        //if($(".prism-ErrorMessage").css("display")!='none'){
        //  location.reload();
        //}
        if ($('.learnpercent').text().indexOf('已完成') != -1) {
            var learnlist = $("a:contains('未完成')").length != 0 ? $("a:contains('未完成')") : $("a:contains('未开始')");
            if (learnlist.length == 0) {
                if (confirm('本课程全部学习完成!即将关闭页面!')) {
                    window.close();
                }
            } else {
                learnlist.each(function () {
                    this.click();
                })
            }
        }
        //暂停时自动开始播放
        if (p.paused()) {
            p.play()
        }
    }, 500)//错误自动刷新
}, 1000);//延时1秒进行


// ====== 自动答题功能(更新版:支持正确/错误弹窗) ======
(function () {
    const TRY_INTERVAL = 800; // 重试间隔(ms)
    let answeredThisQuestion = false;

    function clickEl(el) {
        if (!el) return false;
        try {
            el.click();
            return true;
        } catch (e) {
            try {
                el.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true }));
                return true;
            } catch (err) {
                console.warn('click failed', err);
                return false;
            }
        }
    }

    function setInputChecked(input) {
        if (!input) return;
        input.checked = true;
        input.dispatchEvent(new Event('change', { bubbles: true }));
        input.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true }));
    }

    function submitAnswer() {
        const submitBtn = document.querySelector('.reply-sub');
        if (submitBtn) {
            clickEl(submitBtn);
            return true;
        }
        if (typeof window.subAnswer === 'function') {
            try { window.subAnswer(); return true; } catch (e) {}
        }
        return false;
    }

    function findVisibleMessager() {
        const nodes = document.querySelectorAll('.messager-window');
        for (let n of nodes) {
            const style = window.getComputedStyle(n);
            if (style.display !== 'none' && n.offsetParent !== null) return n;
            const inline = n.getAttribute('style') || '';
            if (inline.indexOf('display: block') !== -1) return n;
        }
        return null;
    }

    function tryAutoAnswerOnce() {
        const form = document.querySelector('#from_ejectque');
        if (!form) return false;
        if (answeredThisQuestion) return false;

        // 默认先选 value='0'(“错误”)
        let opt = form.querySelector("input[name='panduan'][value='0']");
        if (!opt) opt = form.querySelector("input[name='panduan']");
        if (!opt) return false;

        setInputChecked(opt);
        setTimeout(() => {
            if (submitAnswer()) {
                answeredThisQuestion = true;
            }
        }, 200);
        return true;
    }

    const mainInterval = setInterval(() => {
        tryAutoAnswerOnce();

        const dialog = findVisibleMessager();
        if (dialog && dialog.innerText) {
            if (dialog.innerText.includes('答案错误')) {
                console.log('[AutoAnswer] 检测到 "答案错误" 弹窗,切换答案重试');

                let okBtn = Array.from(dialog.querySelectorAll('a.l-btn')).find(a => (a.textContent || '').trim().includes('确定'));
                if (!okBtn) {
                    const span = dialog.querySelector('.l-btn-text');
                    if (span) okBtn = span.closest('a') || span;
                }
                if (okBtn) clickEl(okBtn);

                setTimeout(() => {
                    const form = document.querySelector('#from_ejectque');
                    if (!form) return;

                    const alt = form.querySelector("input[name='panduan'][value='1']");
                    if (alt) {
                        answeredThisQuestion = false;
                        setInputChecked(alt);
                        setTimeout(() => submitAnswer(), 200);
                    } else {
                        const anyOpt = form.querySelectorAll("input[name='panduan']");
                        for (let o of anyOpt) {
                            if (!o.checked) {
                                answeredThisQuestion = false;
                                setInputChecked(o);
                                setTimeout(() => submitAnswer(), 200);
                                break;
                            }
                        }
                    }
                }, 300);
            } else if (dialog.innerText.includes('答案正确')) {
                console.log('[AutoAnswer] 检测到 "答案正确" 弹窗,点击确定继续');

                let okBtn = Array.from(dialog.querySelectorAll('a.l-btn')).find(a => (a.textContent || '').trim().includes('确定'));
                if (!okBtn) {
                    const span = dialog.querySelector('.l-btn-text');
                    if (span) okBtn = span.closest('a') || span;
                }
                if (okBtn) clickEl(okBtn);

                // 正确答案不需要切换,流程就此结束
            }
        }
    }, TRY_INTERVAL);

    const formObserver = new MutationObserver(() => {
        answeredThisQuestion = false;
    });
    const formElem = document.querySelector('#from_ejectque');
    if (formElem) formObserver.observe(formElem, { childList: true, subtree: true });
})();

QingJ © 2025

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