重庆继续教育自动学习

点击科目的【进入学习】按钮,自动依次完成科目内的视频播放,直到科目进度100%停止,无需要用户操作

// ==UserScript==
// @name         重庆继续教育自动学习
// @namespace    http://tampermonkey.net/
// @version      2025-05-09-1340
// @description  点击科目的【进入学习】按钮,自动依次完成科目内的视频播放,直到科目进度100%停止,无需要用户操作
// @author       lqqgis,Dream
// @license MIT
// @match        http*://cqrl.21tb.com/*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none
// ==/UserScript==

(async function () {
    var href = window.location.href;
    console.log(document.readyState, href);
    // 课程详情页面
    if (href.includes("courseDetail")) {
        for (let i = 0; i < localStorage.length; i++) {
            const key = localStorage.key(i)
            localStorage.removeItem(key)
        }
        localStorage.setItem("isPlay", 0);
        console.log("####### 课程详情页面 #########");
        let params = href.split("&");
        let projectId = params.filter((p) => p.includes("projectId="))[0];
        let sessionId = sessionStorage.getItem("eln_session_id");
        let corpCode = sessionStorage.getItem("corp_code");
        // 获取stageId
        async function getRmProjectDetail() {
            const url = `https://cqrl.21tb.com/nms/html/courseStudy/getRmProjectDetail.do?${projectId}&eln_session_id=${sessionId}&corp_code=${corpCode}`;
            let data = await fetch(url).then((res) => res.json());

            return { stageId: data.currentStageId, percentStr: data.percentStr };
        }

        let project = await getRmProjectDetail();
        if (project.percentStr !== "100") {
            var isClick = false;
            const observer = new MutationObserver(function (mutationsList, observer) {
                for (let mutation of mutationsList) {
                    if (isClick) return;
                    if (mutation.removedNodes.length === 0) return;
                    if (!mutation.removedNodes[0].classList.contains("el-loading-mask"))
                        return;
                    const btnItems = document.getElementsByClassName("btn-item");
                    if (btnItems.length === 0) return;
                    const uncompeleted = [...btnItems].filter(
                        (p) => p.innerText === "未完成"
                    )[0];
                    if (!uncompeleted.classList.contains("btn-item-active")) {
                        console.log("点击 未完成");
                        uncompeleted.click();
                        return;
                    }
                    setTimeout(function () {
                        const textItems = document.getElementsByClassName("text-item");
                        const tabMust = document.getElementById("tab-MUST");
                        if (tabMust.classList.contains("is-active")) {
                            if (textItems.length === 0) {
                                const tabSelect = document.getElementById("tab-SELECTIVE");
                                console.log("必修课无课程, 点击【选修课】");
                                tabSelect.click();
                                return;
                            }
                        }
                        const filterTextItems = [...textItems].filter(
                            (p) => !p.innerText.includes("测试课程,勿学")
                        );
                        if (filterTextItems.length > 0) {
                            if (!isClick) {
                                console.log("🚀 ~ 全部课程: ", filterTextItems);
                                isClick = true;
                                filterTextItems[0].click();
                                return;
                            }
                        }
                    }, 4000);
                }
            });
            observer.observe(document.body, { childList: true, subtree: false });

            // 监听是不是学完课程,学完则刷新页面
            window.addEventListener("storage", function (e) {
                if (e.key === "isPlay") {
                    console.log("🚀 ~ storage.isPlay:", e);
                    if (e.oldValue === "1" && e.newValue === "0") {
                        console.log("监听到 学完课程", e);
                        window.location.reload();
                    }
                }
            });
        }
    }

    function triggerMouseEvent(node, eventType) {
        var clickEvent = document.createEvent('MouseEvents');
        clickEvent.initEvent(eventType, true, true);
        node.dispatchEvent(clickEvent);
    }

    // 课程学习页面
    if (href.includes("coursePlay")) {
        localStorage.setItem("isPlay", 1);
        let sectionItems = document.querySelectorAll('.chapter-section-box .section-item');


        setInterval(function () {
            let playBtn = document.getElementsByClassName("prism-big-play-btn")[0];
            console.log("小节--检查到大播放按钮需要点击 " + !playBtn.classList.contains('playing'));
            let sectionItemsNeed = document.querySelectorAll('.chapter-section-box .section-item:not(.finish)');

            let firstItemWithStatus = null;

            var item = sectionItemsNeed[0];
            if (item.textContent.includes('学习中')) {
                firstItemWithStatus = item;
            }


            if (firstItemWithStatus) {
                console.log('第一个节点包含“学习中”');
            } else {
                console.log('第一个节点不包含“学习中”');
            }
            if (!firstItemWithStatus) {
                console.log('第一个节点不包含“学习中” 可模拟点击');
                triggerMouseEvent(item, 'click');
            }

        }, 30000)

        setInterval(function () {

            let playBtn = document.getElementsByClassName("prism-big-play-btn")[0];
            console.log("检查到大播放按钮需要点击 " + !playBtn.classList.contains('playing'));

            if (!playBtn.classList.contains('playing')) {
                playBtn.click()
                console.log("大按钮点击完成")
                return

            }

            var sectionItemsNeed = document.querySelectorAll('.chapter-section-box .section-item:not(.finish)');
            if (sectionItemsNeed.length == 0) {
                console.log("检查到 已是最后一节");
                localStorage.setItem("isPlay", 0);
                window.top.close();
                return;
            }
        }, 10000);
    }
})();

QingJ © 2025

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