自考脚本1.0|自动播放|跳过答题|自动写作业

含自动课程播放|跳过课程答题|自动填写作业请咨询

在您安装前,Greasy Fork 希望您知道此脚本声明其包含了一些负面功能。这些功能也许会使脚本作者获利,而不能给您带来任何直接的金钱收益。

此脚本会在您访问的网站中插入广告

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         自考脚本1.0|自动播放|跳过答题|自动写作业
// @version      1.0
// @author       Y鱼鱼鱼
// @match        https://*.whxunw.com/student-web/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=microsoft.com
// @grant GM_xmlhttpRequest
// @antifeature:fr ads
// @license MIT
// @description  含自动课程播放|跳过课程答题|自动填写作业请咨询
// @namespace https://greasyfork.org/users/1342436
// ==/UserScript==
// @run-at document-start


(function () {
    'use strict';


    function clear_background_detection() {

        // let ele = document.querySelector("head script[src^='js/chunk-vendors'][src$='.js']");
        // todo 立即执行一个异步函数,并确保如果该函数抛出错误或返回的 Promise 被拒绝,整个表达式的结果将是 true
        // !(async function () {
        //     let code = await (await fetch(ele.src)).text();
        //     code = code.replace(`document.addEventListener("visibilitychange",this.visibilityChangeHandler),window.addEventListener("blur",this.windowBlurHandler),window.addEventListener("focus",this.windowFocusHandler),`,``);
        //     console.log(code)
        //     eval(code);
        //     ele.dispatchEvent(new Event("load", {
        //         bubbles: true,
        //     }));
        //     // 如果第二次执行onload则是undefined,则不执行 ,第一次则触发load事件加载修改后的js
        //     ele.onload && ele.onload();

        // })();
    }


    function sleep(sleepTime) {
        return new Promise(resolve => setTimeout(resolve, sleepTime));
    }


    function get_current_number() {
        for (let index = 0; index < play_list.length; index++) {
            if (play_list[index].className === "pointer play") {
                return index
            }
        }
        return 0
    }


    //播放检测并自动点击
    async function play_check(play_interval) {
        // 判断是否需要答题 估计有逻辑bug,需要用节点监视器
        answer_check()
        await sleep(1000)
        // 'Pause' 播放中
        // document.querySelector("#valveVideogj > div.vjs-control-bar > button.vjs-play-control.vjs-control.vjs-button.vjs-playing > span.vjs-control-text").innerText

        // 'Play' 需要点击播放
        // document.querySelector("#valveVideogj > div.vjs-control-bar > button.vjs-play-control.vjs-control.vjs-button.vjs-paused > span.vjs-control-text").innerText


        // 'Replay' 重新播放,表示已经看完
        // document.querySelector("#valveVideogj > div.vjs-control-bar > button.vjs-play-control.vjs-control.vjs-button.vjs-paused.vjs-ended > span.vjs-control-text").innerText


        // 判断是否播放暂停
        try {
            let play_status = document.querySelector("#valveVideogj > div.vjs-control-bar > button.vjs-play-control.vjs-control.vjs-button.vjs-paused > span.vjs-control-text")
            let replay_status = document.querySelector("#valveVideogj > div.vjs-control-bar > button.vjs-play-control.vjs-control.vjs-button.vjs-paused.vjs-ended > span.vjs-control-text")
            if (play_status != null && play_status.innerText === "Play") {
                // 暂停继续播放
                console.log("继续播放")
                document.querySelector("#valveVideogj > div.vjs-control-bar > button.vjs-play-control.vjs-control.vjs-button.vjs-paused > span.vjs-icon-placeholder").click()
            } else if (replay_status != null && replay_status.innerText === "Replay") {
                console.log(get_current_number() + 1 + 'xxxxxxx' + play_list.length)
                if (get_current_number() + 1 === play_list.length) {
                    clearInterval(play_interval)
                    alert("播放完毕")
                }
                play_list[get_current_number() + 1].click()
                console.log("播放下一集")
                await sleep(1000)
            }
        } catch (error) {

        }

    }



    //答题检测
    async function answer_check() {
        if (document.querySelector("#app > div.layout > div.layout-body > div.layout-main > div.p-12.flex > div.dilog") != null) {
            //随机选择单选题
            var randomNumber = Math.floor(Math.random() * 4) + 1;
            document.querySelector("#app > div.layout > div.layout-body > div.layout-main > div.p-12.flex > div.dilog > div > div.context > div > div > div.list > div:nth-child(" + randomNumber + ") > div.txt").click()
            //确定
            document.querySelector("#app > div.layout > div.layout-body > div.layout-main > div.p-12.flex > div.dilog > div > div.bottoms > button > span").click()
            //关闭
            document.querySelector("#app > div.layout > div.layout-body > div.layout-main > div.p-12.flex > div.dilog > div > div.bottoms > button > span").click()
            console.log("完成答题")
        }
    }

    function get_play_list() {
        let num_list = []
        let series_list = document.querySelectorAll("#pane-0 > ul > li")
        for (let i = 0; i < series_list.length; i++) {
            let series_child = series_list[i].querySelectorAll("ul > li")
            if (series_child.length === 1) {
                num_list.push(series_child[0])
            } else {
                for (let j = 0; j < series_child.length; j++) {
                    num_list.push(series_child[j])
                }
            }
        }
        return num_list
    }

    let play_list = []

    function clear_foreground_detection(){
        let oldadd = EventTarget.prototype.addEventListener
        EventTarget.prototype.addEventListener = function (...args) {
            if (unsafeWindow.onblur !== null) {
                unsafeWindow.onblur = null;
            }
            if (args.length !== 0 && args[0] === 'visibilitychange') {
                return;
            }
            if (unsafeWindow.onfous !== null) {
                unsafeWindow.onfous = null;
            }
            return oldadd.call(this, ...args)
        }
    }
    window.addEventListener('load', async function () {
                document.querySelector('#app').__vue__.$router.afterHooks.push(async()=>{
            console.log('路由发生改变')
            if (location.href.includes("study-detail")) {
                clear_foreground_detection()
                await sleep(2000)
                document.querySelector("body > div.el-message-box__wrapper > div > div.el-message-box__btns > button.el-button.el-button--default.el-button--small.el-button--primary > span").click()
                await sleep(2000)
                play_list = get_play_list()
                console.log(play_list)
                var play_interval = setInterval(() => {
                    play_check(play_interval)
                }, 5000);
            }
        })

        alert("当前页面啥也不用点,谢谢合作")
        if (location.href.includes("study-detail")) {
            clear_foreground_detection()
            await sleep(2000)
            document.querySelector("body > div.el-message-box__wrapper > div > div.el-message-box__btns > button.el-button.el-button--default.el-button--small.el-button--primary > span").click()
            await sleep(2000)
            play_list = get_play_list()
            console.log(play_list)
            var play_interval = setInterval(() => {
                play_check(play_interval)
            }, 5000);
        }
    });



})();