Greasy Fork

Greasy Fork is available in English.

智慧树自动播放-TTaket

❤❤仅用于学习使用 我爱你哦小朱

目前为 2024-09-04 提交的版本,查看 最新版本

// ==UserScript==
// @name         智慧树自动播放-TTaket
// @version      1.5.5
// @description  ❤❤仅用于学习使用 我爱你哦小朱
// @author       TTaket
// @match        *://*.zhihuishu.com/*
// @match        *://*.zhihuishu.com/videoStudy*
// @match        *://*.zhihuishu.com/portals_h5*
// @match        *://*.zhihuishu.com/live*
// @match        *://*.zhihuishu.com/examh5*
// @match        *://*.zhihuishu.com/live/vod_room*
// @match        *://*.zhihuishu.com/stuExamWeb*
// @run-at       document-start
// @license      MIT
// @namespace http://greasyfork.icu/users/1362827
// ==/UserScript==



(function() {
    'use strict';
    //pause
    function pause(minMs, maxMs) {
        console.log("pause");
        var delay = Math.floor(Math.random() * (maxMs - minMs + 1)) + minMs;
        setTimeout(() => console.log("pause ",delay), delay)
    }

    //获取随机值
    function getRandomDelay(minMs, maxMs) {
        console.log("getRandomDelay");
        return Math.floor(Math.random() * (maxMs - minMs + 1)) + minMs;
    }

    //关闭弹窗 - 有点不好用
    function clickCloseButton() {
        var closeButton = document.querySelector('span.dialog-footer .btn');
        if (closeButton) {
            console.log('发现关闭按钮,执行点击');
            closeButton.click();
        }
    }

     //选择svg - 有点不好用
    function clickSvgIcon() {
        var svgIcons = document.querySelectorAll('svg.icon.topic-option');
        if (svgIcons.length > 0) {
            console.log('发现 SVG 图标,点击第一个...');
            svgIcons[0].dispatchEvent(new MouseEvent('click', {
                bubbles: true,
                cancelable: true,
            }))

            // 随机等待 1 到 5 秒
            pause(1000, 5000);
            console.log('等待结束,点击关闭按钮');
            clickCloseButton(); // 点击关闭按钮
        }
    }

    function processVideos() {
        // 随机等待 1 到 2 秒
        pause(1000,2000);
        console.log("processVideos");
        for (var i = 0; i < document.getElementsByTagName('video').length; i++) {
            var current_video = document.getElementsByTagName('video')[i];

            // 设置视频音量为 10%
            current_video.volume = 0.1;

            // 设置播放速度为正常速度(1.0 倍速)
            current_video.playbackRate = 1.0;

            // 如果视频播放完毕
            if (current_video.ended) {
                console.log("视频播放完毕");

                var chapterNodeList = document.querySelectorAll('span.catalogue_title');
                var j = 0;

                for (; j < chapterNodeList.length; j++) {
                    //console.log("working.. 1");
                    //if (j == 0) continue;
                    var parentDiv = chapterNodeList[j].parentNode;

                    // 检查 parentNode 是否合法 合法拥有b.fl.time_ico_half
                    var iVaild = parentDiv.querySelector('b.fl.time_ico_half');
                    console.log(parentDiv , "Check iVaild : ", iVaild);
                    if (!iVaild) {
                        console.log('not vaild continue ', chapterNodeList[j].innerText);
                        continue;
                    }

                    // 检查是否未完成的课程b.fl.time_icofinish
                    var isFinish = parentDiv.querySelector('b.fl.time_icofinish');
                    console.log(parentDiv , "Check isFinish : ", isFinish);
                    if (isFinish) {
                        console.log('已完成视频,跳过', chapterNodeList[j].innerText);
                        continue;
                    }

                    console.log('未完成视频,马上播放视频', chapterNodeList[j].innerText);
                    break;
                }

                if (j < chapterNodeList.length) {
                    console.log("未完成视频 : " , j , chapterNodeList[j]);
                    //阻塞等待10 - 20s
                    pause(10000,20000);
                    console.log('CLICK',chapterNodeList[j]);
                    chapterNodeList[j].dispatchEvent(new MouseEvent('click', {
                        bubbles: true,
                        cancelable: true,
                    }))
                } else {
                    console.log('没有找到未完成的课程');
                }
            }

            // 如果视频被暂停,重新播放
            if (current_video.paused) {
                current_video.play();
            }
        }
    }

    function startProcessing() {
        console.log("startProcessing");
        setTimeout(function() {
            clickSvgIcon(); // 先处理 SVG 图标
            processVideos(); // 处理自动播放
            startProcessing(); // 递归调用以继续执行
        }, getRandomDelay(1000, 3000)); // 随机时间间隔 1 到 3 秒
    }

    startProcessing(); // 启动脚本
})();