智慧树自动播放-TTaket

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

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         智慧树自动播放-TTaket
// @version      1.6.4
// @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 https://greasyfork.org/users/1362827
// ==/UserScript==

(function() {
    'use strict';

    function pause_in(delay) {
        console.log("pause_in");
        return new Promise(resolve => setTimeout(() => {
            console.log("pause_in for  ", delay);
            resolve();
        }, delay));
    }

    async function pause(minMs, maxMs) {
        console.log("pause begin");
        var delay = Math.floor(Math.random() * (maxMs - minMs + 1)) + minMs;
        await pause_in(delay);
        console.log("pause end");
    }

    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();
        }
    }

    async 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 秒
            await pause(1000, 5000);
            console.log('等待结束,点击关闭按钮');
            clickCloseButton(); // 点击关闭按钮
        }
    }

    async function processVideos() {
        // 随机等待 1 到 2 秒
        await 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++) {
                    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
                    await pause(10000, 20000);
                    console.log('CLICK', chapterNodeList[j]);
                    chapterNodeList[j].dispatchEvent(new MouseEvent('click', {
                        bubbles: true,
                        cancelable: true,
                    }));
                    // 设置当前视频进度初始化
                    await pause(1000, 2000);
                    for (var ivideoid = 0; ivideoid < document.getElementsByTagName('video').length; ivideoid++) {
                        console.log("Set Init Video : ",document.getElementsByTagName('video')[ivideoid]);
                        document.getElementsByTagName('video')[ivideoid].currentTime = 0;
                    }
                    console.log("set end _ start new");
                } else {
                    console.log('没有找到未完成的课程');
                }
            }

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

    async function startProcessing() {
        console.log("startProcessing");
        while (true) {
            await clickSvgIcon(); // 先处理 SVG 图标
            await processVideos(); // 处理自动播放
            await pause(1000, 3000); // 随机时间间隔 1 到 3 秒
        }
    }

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