Greasy Fork

东营继续教育

from ai build

目前为 2024-11-16 提交的版本。查看 最新版本

// ==UserScript==
// @name         东营继续教育
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  from ai build
// @author       xuefeng
// @match        *://*.yxlearning.com/*
// @grant        none
// @license  MIT
// ==/UserScript==

(function () {
    'use strict';

    // 确保页面完全加载后再执行脚本
    window.onload = function () {
        setTimeout(function () {
            // 重新写————————————————————————————————————————————————————————————————————————
            // 获取当前页所有章节的元素的ID
            function getAllUnitID() {
                // 声明一个存储当前课程的每章节id的数组
                var allUnitID = [];
                // 获取所有 class 为 "pt5" 的 ul 元素
                var ulElements = document.querySelectorAll('ul.pt5');

                // 遍历每个 ul 元素
                ulElements.forEach(function (ul) {
                    // 获取 ul 元素下的所有 li 元素
                    var liElements = ul.querySelectorAll('li');

                    // 遍历每个 li 元素并获取其 id
                    liElements.forEach(function (li) {
                        allUnitID.push(li.id);
                    });
                });

                return allUnitID;
            }

            // 获取本课程所有的章节ID(也即allUnitID)
            const allUnitID = getAllUnitID();
            console.log("已经获取所有的章节ID", allUnitID);

            // 找到当前章节的管视频播放的那个video标签,也即当前页面真实的视频标签
            function nowUnitTrueVideo() {
                // 获取当前页(或是理解为当前ID下)所有的视频元素
                var nowUnitTrueVideoElement = document.querySelectorAll("video");
                for (var i = 0; i < nowUnitTrueVideoElement.length; i++) {
                    if (nowUnitTrueVideoElement[i].duration) {
                        return nowUnitTrueVideoElement[i];
                    }
                }
            }

            // 播放当前页面的视频

            // 检测每一个章节是否已经全部完成,如果达到100%的播放率就找到该章节的视频点击播放
            allUnitID.forEach((videoID) => {
                // 如果这个视频播放没有达到100%
                if (document.querySelector('#' + videoID + '-badge').textContent != '100%') {
                    console.log("当前章节未完成,自动点击该章节进入该页:" + videoID);
                    // 就点击这个视频所在的章节(即点击这个对应标题进入视频播放页)
                    document.querySelectorAll('li[id="' + videoID + '"]')[0].click();
                    // 然后点击该视频播放
                    if (nowUnitTrueVideo().paused) { // 如果视频暂停
                        nowUnitTrueVideo().play();   // 就点击播放
                        console.log("自动点击本页视频播放");
                    }
                }
            });

            // 每5秒检查一次视频是否仍在播放,确保不暂停
            // setInterval(videoPlay(nowUnitTrueVideo()), 5000);

            // 视频播放特殊处理,检测弹出的答题框
            function autoClickSkipButton() {
                // 选择需要观察变动的节点
                var targetNode = document.body;
                // 配置观察选项
                var config = { childList: true, subtree: true };

                const changecallback = function (mutations) {
                    mutations.forEach(function (mutation) {
                        if (document.querySelector('div.ccQuestion')) {
                            // 找到并点击 "跳过" 按钮
                            var skipButton = document.querySelector('input[value="跳过"]');
                            if (skipButton) {
                                skipButton.click();
                                // 重新启动观察者,以便处理后续的变化
                                observer.disconnect();
                                observer.observe(document.body, config);
                            }
                        }
                    });
                };

                // 创建一个观察者实例
                var observer = new MutationObserver(changecallback);

                // 开始观察
                observer.observe(targetNode, config);
            }

            // 调用观察者确保跳过答题框
            autoClickSkipButton();  // 不需要传入参数
            console.log("已开启自动跳过答题框");
        }, 10000); // 延迟10秒执行
    };
})();