Greasy Fork

🥇【华医网助手】添加自动播放下一个功能

huayiwang, 华医网,自动播放,自动静音,屏蔽答题,调整视频质量为最低,当前视频播放结束自动进入下一个视频,播放结束清理无用定时器

// ==UserScript==
// @name         🥇【华医网助手】添加自动播放下一个功能
// @namespace    http://tampermonkey.net/
// @version      1.6.6
// @description  huayiwang, 华医网,自动播放,自动静音,屏蔽答题,调整视频质量为最低,当前视频播放结束自动进入下一个视频,播放结束清理无用定时器
// @author       华医网助手
// @license      AGPL License
// @match        *://*.91huayi.com/course_ware/course_ware_polyv.aspx?*
// @match        *://*.91huayi.com/pages/exam.aspx?*
// @match        *://*.91huayi.com/pages/exam_result.aspx?*
// @match        *//*.wsglw.net/train/courseware/cc?*
// @match        *://*.91huayi.com/*
// @grant        none
// ==/UserScript==

(() => {
    // 非播放界面直接返回
    var urlInfos = window.location.href.split("/");
    var urlTip = urlInfos[urlInfos.length - 1].split("?")[0];
    if (urlTip != "course_ware_polyv.aspx") {
        return
    }
    addInfo();
    killQuestion();
    examherftest();
    let video = document.querySelector('video');
    window.examInterval = setInterval(() => {
        examherftest()
    }, 1000);
    window.playInterval = setInterval(() => {
        if (video.paused && !video.ended) {
            video.play();
        }
        if (window.player && window.player.getCurrentLevel() != 1) {
            window.player.changeLevel(1)
        }
        video.volume = 0;
        video.muted = true;

        // 添加视频结束检测
        if (video.ended) {
            examherftest();
        }
    }, 1000);

    function examherftest() {  //考试按钮激活状态检测
        var hreftest = document.getElementById("jrks").attributes["href"].value;
        if (hreftest != "#") { //考试按钮已激活
            // 优化自动播放下一个视频的逻辑
            const currentVideo = document.querySelector("li.lis-inside-content.active");
            if (currentVideo) {
                const nextVideo = currentVideo.nextElementSibling;
                if (nextVideo) {
                    const playButton = nextVideo.querySelector("h2");
                    if (playButton) {
                        playButton.click();
                        setTimeout(function () {
                            const confirmButton = document.evaluate("//button[contains(., '知道了')]", document, null, XPathResult.ANY_TYPE).iterateNext();
                            if (confirmButton) {
                                confirmButton.click();
                            }
                        }, 2000);
                        return;
                    }
                }
            }

            // 原有逻辑作为后备方案
            if ($('button:contains("未学习")').length > 0) {
                $('button:contains("未学习")').siblings().eq(0).click();
            } else if ($('button:contains("学习中")').length > 0) {
                $('button:contains("学习中")').siblings().eq(0).click();
            } else if ($('button:contains("待考试")').length > 0 && document.querySelector("a[id='mode']").innerText.indexOf("视频+考试") != -1) {
                $('button:contains("待考试")').siblings().eq(0).click();
            } else {
                console.log('没有找到任何按钮');
                clearInterval(examInterval);
            }
        }
    }

    function killQuestion() {
        (async function () {
            while (!window.player || !window.player.sendQuestion) {
                await sleep(20);
            };
            window.player.sendQuestion = function () {
            };
        })();
        window.killQuestionInterval = setInterval(async function () {
            try {
                if ($('.pv-ask-head').length && $('.pv-ask-head').length > 0) {
                    console.log("检测到问题对话框,尝试跳过");
                    $(".pv-ask-skip").click();
                };
            } catch (err) {
                console.log(err);
            };
            try {
                if ($('.signBtn').length && $('.signBtn').length > 0) {
                    console.log("检测到签到对话框,尝试跳过");
                    $(".signBtn").click();
                };
            } catch (err) {
                console.log(err);
            };
            try {
                if ($("button[onclick='closeProcessbarTip()']").length && $("button[onclick='closeProcessbarTip()']").length > 0 && $("div[id='div_processbar_tip']").css("display") == "block") {
                    console.log("检测到温馨提示对话框(不能拖拽),尝试跳过");
                    $("button[onclick='closeProcessbarTip()']").click();
                };
            } catch (err) {
                console.log(err);
            };
            try {
                if ($("button[class='btn_sign']").length && $("button[class='btn_sign']").length > 0) {
                    console.log("检测到温馨提示对话框(疲劳提醒),尝试跳过");
                    $("button[class='btn_sign']").click();
                };
            } catch (err) {
                console.log(err);
            };
            try {
                if ($("#floatTips") && $("#floatTips").is(":visible")) {
                    console.log("检测到二维码,尝试跳过");
                    window.closeFloatTips();
                };
            } catch (err) {
                console.log(err);
            };
            try {
                var state = document.querySelectorAll("i[id='top_play']")[0].parentNode.nextElementSibling.nextElementSibling.nextElementSibling.innerText;
                if ($('video').prop('paused') == true && state != "已完成") {
                    console.log("视频意外暂停,恢复播放");
                    $('video').get(0).play();
                    $('video').prop('volumed') = 0;
                    $('video').prop('muted') = true;
                } else if (state == "已完成") {
                    document.querySelector("video").pause();
                };
            } catch (err) {
            };
        }, 2000);
    };
// ... existing code ...

// 视频播放完毕时触发的事件
window.s2j_onPlayOver = function () {
    clearInterval(timerPlayMax);
    clearInterval(timerPlayingFace);
    clearInterval(timerSign);

    if (0 == 1) {
        $('#div_preview1').show();
        if (ifFullScreen == 1) {
            player.toggleFullscreen();
        }
        return;
    }

    addCourseWarePlayRecord();
    updateCourseWareProcess(2);
    delCookie("playState");
    $("#jrks").removeAttr("disabled");
    $("#jrks").removeClass("inputstyle2_2").addClass("inputstyle2");

    // 获取当前视频的索引
    var currentVideoIndex = getCurrentVideoIndex();
    if (currentVideoIndex !== -1) {
        // 获取下一个视频的链接
        var nextVideoLink = getNextVideoLink(currentVideoIndex);
        if (nextVideoLink) {
            // 跳转到下一个视频
            window.location.href = nextVideoLink;
        }
    }
}

// 获取当前视频的索引
function getCurrentVideoIndex() {
    var videoLinks = document.querySelectorAll('.lis-inside-content h2[onclick]');
    for (var i = 0; i < videoLinks.length; i++) {
        if (videoLinks[i].getAttribute('onclick').includes(cwrid)) {
            return i;
        }
    }
    return -1;
}

// 获取下一个视频的链接
function getNextVideoLink(currentIndex) {
    var videoLinks = document.querySelectorAll('.lis-inside-content h2[onclick]');
    if (currentIndex + 1 < videoLinks.length) {
        var nextVideoOnClick = videoLinks[currentIndex + 1].getAttribute('onclick');
        var nextVideoLink = nextVideoOnClick.match(/'(.*?)'/)[1];
        return nextVideoLink;
    }
    return null;
}
    function addInfo() {
        let tip = document.createElement('p');
        tip.style.fontSize = '50px';
        tip.style.color = 'red';
        tip.style.textAlign = 'center';
        tip.textContent = '添加了一个自动播放下一个视频的功能';
        document.body.appendChild(tip);
    };
})()