广东省国家工作人员学法考试系统自动刷课&&自动考试

广东省专用

当前为 2023-09-30 提交的版本,查看 最新版本

// ==UserScript==
// @name         广东省国家工作人员学法考试系统自动刷课&&自动考试
// @namespace    http://tampermonkey.net/
// @version      2023.9.30
// @description  广东省专用
// @author       yygdz1921
// @match        http*://xfks-study.gdsf.gov.cn/study/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=gdsf.gov.cn
// @require      https://cdn.jsdelivr.net/npm/[email protected]/dist/sweetalert2.all.min.js
// @grant        GM_addStyle
// @license      MIT
// ==/UserScript==

(function () {
    'use strict';

    // Your code here...
    GM_addStyle("https://cdn.jsdelivr.net/npm/[email protected]/dist/sweetalert2.min.css");
    var log = console.log;
    log("start...");
    function main() {
        log("main...");
        study();
    }
    // 考试
    function exam() {
        log("exam...");
        // 2023年广东省学法考试年度考试考场一
        var answers = [
            {"q": "教师在教育教学中应当平等对待学生,关注学生的(),因材施教,促进学生的充分发展。", "a": "c"},
            {"q": "习近平总书记在中央全面依法治国工作会议上指出,要坚持中国特色社会主义法治道路。", "a": "d"},
            {"q": "根据《中华人民共和国国徽法》第九条,中国人民银行发行的法定货币()使用国徽图案。", "a": "b"},
            {"q": "国家依法保护正常的宗教活动,", "a": "c"},
            {"q": "中华人民共和国法律援助法》所称法律援助,", "a": "b"},
            {"q": "习近平总书记在中央全面依法治国工作会议上强调,", "a": "b"},
            {"q": "根据《中国共产党党徽党旗条例》第六条,", "a": "c"},
            {"q": "限制人身自由的行政处罚,", "a": "a"},
            {"q": "根据《中国共产党章程》总纲的规定,", "a": "d"},
            {"q": "各级党委和政府应当以依规依法及时就地解决信访问题为导向,", "a": "a"},
            {"q": "根据《中华人民共和国宪法》序言,", "a": "b"},
            {"q": "在勘查、开发、保护端砚石资源和进行科学技术研究等方面成绩显著的单位和个人,", "a": "b"},
            {"q": "提倡和鼓励居(村)民委员会组织居(村)民制定维护市容和环境卫生的()。", "a": "d"},
            {"q": "八五普法工作要以使法治成为()为目标,", "a": "b"},
            {"q": "根据《中华人民共和国反有组织犯罪法》第十一条,", "a": "a"},
            {"q": "现役军人入伍前已被普通高等学校录取或者是正在普通高等学校就学的学生,", "a": "a"},
            {"q": "被羁押的犯罪嫌疑人、被告人、服刑人员,", "a": "a"},
            {"q": "对生活长期不能自理、经济困难的老年人,", "a": "a"},
            {"q": "肇庆古城墙保护范围和建设控制地带按照()划定或者批准并公布的范围执行。", "a": "b"},
            {"q": "网购商品使用快递送达的,商品在快递途中、签收前损毁的风险由()承担。", "a": "b"},
            {"q": "中央全面依法治国工作会议强调,", "a": "ab"},
            {"q": "下列财产为夫妻一方的个人财产:()。", "a": "cd"},
            {"q": "根据《广东省平安建设条例》第三条,", "a": "abcd"},
            {"q": "《中国共产党章程》明确规定,", "a": "abd"},
            {"q": "端砚石资源保护工作应当遵循()的原则。", "a": "abcd"},
            {"q": "根据《中华人民共和国宪法》第三条,", "a": "abcd"},
            {"q": "《中国共产党章程》中指出,", "a": "acd"},
            {"q": "国家建立国家安全审查和监管的制度和机制,", "a": "abcd"},
            {"q": "根据《中华人民共和国未成年人保护法》第三条,", "a": "abcd"},
            {"q": "肇庆古城墙保护工作遵循()的方针。", "a": "abcd"},
            {"q": "扬尘污染重点防治区域内应当采取限时施工、", "a": "a"},
            {"q": "根据《中华人民共和国国徽法》第十五条,", "a": "a"},
            {"q": "公民可以实名或者匿名进行举报。", "a": "b"},
            {"q": "机关基层党组织应当对党员、干部平时多过问、多提醒,", "a": "a"},
            {"q": "七星岩景区内不得进行经营性养殖水生动物。", "a": "a"},
            {"q": "根据《广东省平安建设条例》第十四条第三款,", "a": "a"},
            {"q": "要积极回应人民群众新要求新期待,", "a": "a"},
            {"q": "利用未成年人、在校学生、老年人、残疾人实施电信网络诈骗的,", "a": "a"},
            {"q": "施工作业可能造成供电设施损害的,", "a": "a"},
            {"q": "坚持以事实为根据、以法律为准绳,", "a": "a"},
        ];
        var items = document.getElementsByClassName("item");
        if (answers.length < items.length) {
            Swal.fire("脚本内置答案数量小于当前试题数量,无法答题!!!");
            return;
        }
        function abcd_to_index(s) {
            var l = [];
            for(let i = 0; i < s.length; i++){
                let char = s[i];
                if(char === "a" || char === "A"){ l.push(0);}
                else if(char === "b" || char === "B"){ l.push(1);}
                else if(char === "c" || char === "C"){ l.push(2);}
                else if(char === "d" || char === "D"){ l.push(3);}
            }
            return l;
        }
        let count = 0;
        for (let index = 0; index < items.length; index++){
            let item = items[index];
            let question = item.getElementsByClassName("question-title")[0].innerText
            let answer = null;
            for(let i = 0; i < answers.length; i++){
                if(question.includes( answers[i].q)){
                    answer = answers[i];
                    break;
                }
            }
            if(!answer){
                count = count + 1;
                let msg = `【${question}】\n\n此题没有配置答案,已经自动跳过,请自行谷歌!!!`;
                log(msg);
                alert(msg);
                continue;
            }
            let options = item.getElementsByClassName("question-option");
            let a_list = abcd_to_index(answer.a);
            for(let i = 0; i < a_list.length; i++){
                let a = a_list[i];
                options[a].getElementsByTagName("label")[0].click();
            }
        }
        let txt = "【2023年广东省学法考试年度考试考场一】已经自动作答完毕,请认真核对,手动交卷!";
        if(count > 0){
            txt = `【2023年广东省学法考试年度考试考场一】已经自动作答完毕,因题库不足已跳过【${count}】题,请自行作答。最后,请认真核对,手动交卷!`;
        }
        Swal.fire(txt);
    }
    // 刷分
    function study() {
        log("study")
        var pathname = window.location.pathname;
        if (pathname.includes("index")) {
            log("index...");
            var cols = document.getElementsByClassName("column");
            for (let index = 0; index < cols.length; index++) {
                var col = cols[index];
                var catalogdesc = col.getAttribute("catalogdesc");
                var course = col.querySelector(".card.current").innerText.replace(/\s+/g, "");
                if (catalogdesc.includes("庭审") || catalogdesc.includes("题库")) {
                    continue;
                }
                // 判断是否完成
                var btn = col.getElementsByClassName("btn")[0];
                if (btn) {
                    log("未完成", col);
                    btn.click();
                    break;
                } else {
                    log(catalogdesc, course);
                }
            }
        } else if (pathname.includes("chapter")) {
            log("chapter...");
            var ms = 3000 + Math.floor(Math.random() * 1000);
            submitLearn();
            Swal.fire({
                title: "学习强国",
                text: `自动学习中,【${ms}】【毫秒】后自动跳转!`,
                timer: ms,
                timerProgressBar: true
            });
            setTimeout(() => {
                var next_chapter = document.querySelector(".next_chapter")
                if (next_chapter) {
                    next_chapter.click();
                } else {
                    window.location.pathname = "study/index";
                }
            }, ms);

        } else if (pathname.includes("course")) {
            log("course...");
            var finish = true;
            var lis = document.getElementsByClassName("chapter")[0].getElementsByTagName("li");
            for (let index = 0; index < lis.length; index++) {
                var li = lis[index];
                var sub_title = li.getElementsByClassName("sub_title")[0].innerText;
                if (sub_title.includes("获得") || sub_title.includes("未开放")) {
                    continue;
                }
                finish = false;
                li.querySelector(".title a").click();
                break;
            }
            if (finish) {
                document.querySelector(".menu-ic-note").click();
            }
        } else if (pathname.includes("login")) {
            log("login...")
        } else if (pathname.includes("exam")) {
            log("exam...")
        } else {
            log("未知页面", pathname);
        }
    }

    if (document.readyState === 'complete') {
        // DOM 已经加载完成
        main();
    } else {
        // DOM 还未加载完成
        // document.addEventListener("DOMContentLoaded", main);
        window.onload = main;
    }

    document.addEventListener('keydown', function (event) {
        log("keydown", event.code);
        if (event.code === 'KeyG') {
            exam();
        } else if (event.code === "KeyT"){
            let ms = 3000;
            Swal.fire({
                title: "学习强国",
                text: `自动学习中,【${ms}】【毫秒】后自动跳转!`,
                timer: ms,
                timerProgressBar: true
            });
        }
    });
})();