Greasy Fork

广东省教师继续教育公需课(2025)

广东省专用

// ==UserScript==
// @name         广东省教师继续教育公需课(2025)
// @namespace    http://tampermonkey.net/
// @version      2025.05.30
// @description  广东省专用
// @match        https://jsxx.gdedu.gov.cn/*
// @grant        none
// @license      MIT
// ==/UserScript==
//修改:30秒提交一次,自动暂停提交
(function () {
    'use strict';

    var interval = 30500;
    var choice = 0;
    var event = new MouseEvent("mousemove", {
        "view": window,
        "bubbles": true,
        "cancelable": true
    });
    // 显示弹出信息
    function showPopupMessage(message, duration) {
        var popup = document.createElement('div');
        popup.innerText = message;
        popup.style.display = 'block';
        popup.style.position = 'fixed';
        popup.style.top = '50%';
        popup.style.left = '50%';
        popup.style.transform = 'translate(-50%, -50%)';
        popup.style.backgroundColor = '#f9f9f9';
        popup.style.padding = '20px'; // 增加内边距,防止字体超出边界
        popup.style.border = '1px solid #ccc';
        popup.style.color = 'red';
        popup.style.fontSize = '50px'; // 设置字体大小为50像素
        popup.style.maxWidth = '80%'; // 设置最大宽度,防止过长的文本导致元素过宽
        popup.style.textAlign = 'center'; // 文本居中显示
        document.body.appendChild(popup);

        // 删除弹出信息
        setTimeout(function () {
            popup.parentNode.removeChild(popup);
        }, duration);
    }
    // 考核
    function exam() {
        console.log("开始答题...")
        var grade = document.getElementsByClassName("m-studyTest-grade");
        if (grade.length > 0) {
            grade = parseInt(grade[0].getElementsByTagName("strong")[0].innerText);
            if (grade >= 100) {
                var msg = `你当前已经是${grade}分!!!`;
                console.log(msg);
                showPopupMessage(msg, 3000);
                return 'over';
            }
        }
        // 新质生产力与现代化产业体系
        var answer1 = ["B", "D", "A", "D", "A", "B", "B", "A", "B", "A", "ABC", "ABCD", "ABCDE", "ABC", "ACD", "ABC", "ABC", "ABC", "ABD", "ABDE", "A", "A", "A", "A", "B", "B", "B", "A", "A", "B"];
        // 人工智能赋能制造业高质量发展课程导论
        var answer2 = ["C", "D", "B", "B", "B", "B", "C", "B", "C", "B", "ABC", "ABCD", "ABD", "ABC", "ABCD", "ABC", "AB", "ACD", "ABC", "ABCD", "A", "A", "B", "B", "B", "B", "A", "A", "A", "A"];
        // 将答案ABCD转换成数组
        var map = { "a": 0, "A": 0, "b": 1, "B": 1, "c": 2, "C": 2, "d": 3, "D": 3, "e": 4, "E": 4 };
        function abcd_to_index(answer_in) {
            var answer_out = [];
            for (var i = 0; i < answer_in.length; i++) {
                answer_out[i] = []
                var s = answer_in[i];
                for (var j = 0; j < s.length; j++) {
                    answer_out[i].push(map[s[j]]);
                }
            }
            return answer_out;
        }
        // 判断启用哪套答案
        var answer = null;
        var course = document.getElementById("courseCatalog");
        if (course.textContent.includes("人工智能")) {
            answer = abcd_to_index(answer2);
        } else {
            answer = abcd_to_index(answer1);
        }
        var btn = document.getElementsByClassName("btn u-main-btn");
        if (btn[0].innerText == "重新测验") {
            btn[0].click();
        } else {
            var ql = document.getElementsByClassName("m-topic-item");
            for (var i = 0; i < ql.length; i++) {
                var q = ql[i]
                var c = q.getElementsByClassName("m-radio-tick");
                if (c.length <= 0) {
                    c = q.getElementsByClassName("m-checkbox-tick");
                }
                // 选答案
                var a = answer[i]
                for (var j = 0; j < a.length; j++) {
                    c[a[j]].click();
                }
            }
            // 交卷
            btn[0].click();
            finishTest();
        }
    }
    function main() {
        // 当前播放
        console.log('脚本开始。。。')
        var current_index = 0;
        var txt = document.getElementsByClassName("txt");
        for (let i = 0; i < txt.length; i++) {
            if (txt[txt.length - 1].innerText.includes(txt[i].innerText)) {

                current_index = i;
                console.log(txt[i].innerText, txt[txt.length - 1].innerText, txt.length, current_index);
                break;
            }
        }
        // 需要观看时长
        var s = document.getElementsByClassName("g-study-prompt");
        var need_time = -1;
        if (s && s[0] && s[0].firstElementChild && s[0].firstElementChild.firstElementChild) {
            need_time = s[0].firstElementChild.firstElementChild.textContent;
        }
        need_time = parseInt(need_time);
        // 每秒检测
        var v = document.getElementsByTagName("video")[0];
        if (v) {
            v.play();
            setTimeout(function () {
                v.pause();
            }, 2000);
        }

        var timer =setInterval(function () {
            if (current_index == (txt.length - 2)) {
                exam();
                clearInterval(timer);
                return;
            }
            v.pause();
            var vt = document.getElementById("viewTimeTxt");
            var now = new Date();
            var hours = now.getHours().toString().padStart(2, '0');
            var minutes = now.getMinutes().toString().padStart(2, '0');
            var seconds = now.getSeconds().toString().padStart(2, '0');
            var formattedTime = `${hours}时${minutes}分${seconds}秒`;
            console.log(formattedTime, vt);

            if (vt === null || (vt >= need_time)) {
                console.log("视频已经看完,切换下一个...");
                txt[current_index + 1].click();
                current_index++;
                return
            }
            updateLastViewTime(true);
            if (vt) {
                vt = parseInt(vt.textContent);
                if (vt >= need_time) {
                    console.log("视频已经看完,切换下一个...");
                    txt[current_index + 1].click();
                    current_index++;
                    return
                }
            }
            var msg = `挂机中!已观看时长: ${vt}/${need_time}`;
        }, interval);
    }
    document.addEventListener('keydown', function (event) {
        console.log("keydown", event.code);
        if (event.code === 'KeyV') {
            console.log("视频可拖动...");
            player.changeConfig('config', 'timeScheduleAdjust', 1); // 视频可拖动
        } else if (event.code === "KeyM") {
            main();
        } else if (event.code === "KeyE") {
            exam();
        }
    });
    if (document.readyState === "complete") {
        // DOM 已经加载完成
        main();
    } else {
        // DOM 还未加载完成
        window.addEventListener("load", main, { once: true });
    }
})();