Greasy Fork

Greasy Fork is available in English.

智慧树自动播放-TTaket

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

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

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

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

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴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 http://greasyfork.icu/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(); // 启动脚本
})();