Greasy Fork

河北教师继续教育2024

自动过验证码、自动展开未学的内容无人值守学习。

目前为 2025-01-19 提交的版本。查看 最新版本

// ==UserScript==
// @name         河北教师继续教育2024
// @namespace    http://tampermonkey.net/
// @version      2.0.5
// @description  自动过验证码、自动展开未学的内容无人值守学习。
// @author       yanguichao
// @match        *://*.stu.teacher.com.cn/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=bing.com
// @grant        none
// @license      MIT
// @require      https://code.jquery.com/jquery-3.6.0.min.js
// ==/UserScript==

/* global $ */ // 告诉 ESLint,$ 是全局变量

(function () {
    'use strict';

    // 通用工具函数:检查并点击按钮
    function checkAndClickButton(selector, buttonText, callback) {
        const buttons = document.querySelectorAll(selector);
        buttons.forEach(button => {
            if (button.innerText.trim() === buttonText) {
                console.log(`找到按钮 "${buttonText}",正在点击...`);
                button.click();
                if (callback) callback();
            }
        });
    }

    // 通用工具函数:检查并点击包含特定文本的元素
    function checkAndClickElement(selector, text) {
        const elements = document.querySelectorAll(selector);
        elements.forEach(element => {
            if (element.textContent.trim() === text) {
                console.log(`找到元素 "${text}",正在点击...`);
                element.click();
            }
        });
    }

    // 第一个脚本:验证信息提交和自动播放
    (function () {
        function checkAndSubmit() {
            try {
                if ($("div:contains('验证信息')").length > 1) {
                    console.log("检测到学习验证");
                    $("#code").attr("value", $("#codespan").text());
                    $("a:contains('提交')")[0].click();
                }

                checkAndClickButton('a', 'Ok,我知道了!', () => {
                    const playButton = document.querySelector(".ccH5TogglePlay");
                    if (playButton) playButton.click();
                });
            } catch (error) {
                console.error('检查验证信息时出错:', error);
            }
        }

        setInterval(checkAndSubmit, 6000);
    })();

    // 第二个脚本:自动进入课程学习
    (function () {
        function enterCourse() {
            try {
                const href = location.href;
                if (href.includes("/course/showCourse/")) {
                    checkAndClickButton('.button-hui', '进入课程学习');
                } else if (href.includes("/course/learn/")) {
                    if (window.TimeNum >= 1200) {
                        alert("可以提交了");
                    }
                }
            } catch (error) {
                console.error('进入课程学习时出错:', error);
            }
        }

        setInterval(enterCourse, 10000);
    })();

    // 第三个脚本:自动点击“学习计划”链接
    (function () {
        function checkAndClickStudyPlan() {
            try {
                const targetContent = '<span id="bestMinutesTips" style="" class="noteRrror">(已达到累计上限,不再累计)</span>';
                if (document.documentElement.innerHTML.includes(targetContent)) {
                    checkAndClickButton('a', '学习计划', () => {
                        setTimeout(() => location.reload(), 5000);
                    });
                }
            } catch (error) {
                console.error('检查学习计划时出错:', error);
            }
        }

        setInterval(checkAndClickStudyPlan, 6000);
    })();

    // 第四个脚本:自动点击“展开”按钮
    (function () {
        function checkAndClickExpand() {
            try {
                checkAndClickElement('span.step', '展开');
            } catch (error) {
                console.error('检查展开按钮时出错:', error);
            }
        }

        setInterval(checkAndClickExpand, 5000);
    })();

    // 第五个脚本:自动点击“学习中”或“未学习”按钮
    (function () {
        function clickLearnButton(iconClass, sessionKey) {
            try {
                const targetElement = document.querySelector(`li i.${iconClass}`);
                if (targetElement && targetElement.textContent === (iconClass === 'icon_2' ? '学习中' : '未学习')) {
                    const parentLi = targetElement.closest('li');
                    const targetButton = parentLi.querySelector('a[onclick*="countLearn"]');
                    if (targetButton && !sessionStorage.getItem(sessionKey)) {
                        const delay = Math.floor(Math.random() * 5000) + 5000;
                        setTimeout(() => {
                            targetButton.click();
                            sessionStorage.setItem(sessionKey, 'true');
                            const courseLink = parentLi.querySelector('a.list-title');
                            if (courseLink && courseLink.href) {
                                window.location.href = courseLink.href;
                            }
                        }, delay);
                    }
                }
            } catch (error) {
                console.error('点击学习按钮时出错:', error);
            }
        }

        setInterval(() => {
            clickLearnButton('icon_2', 'countLearnTriggered');
            clickLearnButton('icon_0', 'countLearnTriggered2');
        }, 10000);
    })();

    // 第六个脚本:自动点击视频项
    (function () {
        function autoClickVideoItem() {
            try {
                const videoItems = document.querySelectorAll('li[data-type="视频"], li[data-type="1"]');
                videoItems.forEach(item => {
                    if (item.onclick || item.getAttribute('onclick')) {
                        item.click();
                        console.log('已点击视频项:', item);
                    }
                });
            } catch (error) {
                console.error('点击视频项时出错:', error);
            }
        }

        setTimeout(() => {
            autoClickVideoItem();
            setInterval(autoClickVideoItem, 1200000);
        }, 20000);
    })();

    // 第七个脚本:自动刷新学习时间
    (function () {
        function refreshStudyTime() {
            try {
                const button = document.querySelector('div.fr button.btn.studyCourseTimeRefresh');
                if (button && !document.body.innerText.includes('最长可累计时间:')) {
                    button.click();
                    console.log('已刷新学习时间');
                }
            } catch (error) {
                console.error('刷新学习时间时出错:', error);
            }
        }

        setInterval(refreshStudyTime, 600000);
    })();
})();