Greasy Fork

四川电子科大函授大专刷课脚本

四川电子科大函授大专刷课简易脚本,两个平台均支持,可能存在部分问题,请关注控制台输出进行处理

当前为 2022-05-09 提交的版本,查看 最新版本

// ==UserScript==
// @name         四川电子科大函授大专刷课脚本
// @namespace    http://tampermonkey.net/
// @version      0.6
// @description  四川电子科大函授大专刷课简易脚本,两个平台均支持,可能存在部分问题,请关注控制台输出进行处理
// @author       Chen
// @license      MIT
// @match        https://uestcedu.yuketang.cn/pro/lms/*
// @match        http://learning.uestcedu.com/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // Your code here...
//     var js = 0
//     var elevideo = document.getElementsByClassName("xt_video_player")[0];

//     function videoEvent(){
//         //暂停视频,显示
//         elevideo.pause()
//         //静音
//         document.getElementsByClassName("xt_video_player_common_icon")[0].click();
//         //2X播放
//         var playSpeedDiv = document.getElementsByClassName("xt_video_player_common_list_wrap")[1];
//         playSpeedDiv.style.cssText = "display:block;opacity:1;";
//         setTimeout(function(){
//             console.log(playSpeedDiv.getElementsByTagName("li")[0])
//             playSpeedDiv.getElementsByTagName("li")[0].click();

//             elevideo.removeEventListener('play',videoEvent)
//         },1000)
//     }
//     var zt = setInterval(function(){
//         elevideo = document.getElementsByClassName("xt_video_player")[0];
//         if(elevideo && js<20){
//             elevideo.addEventListener('play',videoEvent)
//             clearInterval(zt)
//         }
//         js++
//         console.log(js)
//     },500)

    function xty(){
        //获取video元素、video外层的div、作业页面的元素,用于判断当前处于哪个页面
        var elevideo = document.getElementsByClassName("xt_video_player")[0];
        var idVideo = document.getElementById("video-box");
        var zy = document.getElementsByClassName("container-body")[0];
        var url = window.location.href;
        //判断当前页面状态
        if(elevideo){
            console.log("当前为学堂云平台,脚本运行中...")
            console.log("请注意,该脚本在跨章切换时可能会出现问题,需要手动介入")
            console.log(`当前时间:${new Date().getHours()}:${new Date().getMinutes()}:${new Date().getSeconds()}`);
            //处理地址
            var urlSplit = url.split('video/');
            var newUrl = urlSplit[0] + "video/" + (Number(urlSplit[1])+1);
            //监听视频是否播放完毕
            elevideo.addEventListener('ended',function(){
                console.log("视频已播放完毕,即将切换到下一课件...")
                setTimeout(function(){window.location.href = newUrl},3000)
            })
        }else if(idVideo){
            console.log("脚本已跳转到不正确的地址,请手动介入:点击右上角目录,手动切换到未学习的课节,脚本将自动运行");
            console.log(`脚本已暂停,当前时间:${new Date().getHours()}:${new Date().getMinutes()}:${new Date().getSeconds()}`);
        }else if(zy){
            console.log("当前为学堂云平台作业页面,自动答题中...")
            console.log("目前仅支持单选题")
            //答题序号列表的li
            var numberList = document.getElementsByClassName("exam-aside--close")[0].getElementsByTagName("li");
            //提交答案按钮
            var btn = document.getElementsByClassName("text-center")[0].getElementsByTagName("button")[0];
            var i = 0;
            //答题逻辑(代码有点烂,层层套娃,技术有限)
            function answer(){
                if(i < numberList.length){
                    numberList[i].getElementsByTagName("div")[0].click();
                    setTimeout(function(){
                        //题目答案列表
                        var daan = document.getElementsByClassName("list-unstyled")[0].getElementsByTagName("li");
                        var z = 0;
                        function answer2(){
                            if(numberList[i].getElementsByTagName("svg").length){
                                console.log(`第${i+1}题已回答正确,进入下一题`);
                                i++;
                                z = 0;
                                answer();
                            }else{
                                setTimeout(function(){
                                    daan[z].getElementsByTagName("label")[0].click();
                                    z++;
                                },1000)
                                setTimeout(function(){btn.click()},1500)
                                setTimeout(function(){answer2()},4000)
                            }
                        }
                        answer2();
                    },1000)
                }else{
                    console.log("所有题目回答完毕")
                }
            }
            answer();
        }else{
            console.log("当前为学堂云平台,未进入学习或作业页面,等待中...")
        }
        //监听地址栏变化
        var dsq = setInterval(function(){
            var nUrl = window.location.href;
            if(nUrl != url){
                console.log("用户已手动切换课件,脚本即将重新启动...")
                clearInterval(dsq)
                setTimeout(xty,10000)
            }
        },3000)
    }

    function wj(){
        var btn = document.getElementsByName("w_main")[0].contentWindow.document.getElementById("w_code");
        if(btn){
            console.log("当前为网教平台,脚本运行中...")
            var btn2 = btn.contentWindow.document.getElementById("tdPlayerControl").childNodes;
            var btnPrev = btn2[1];
            var btnNext = btn2[3];
            var wjdsq = null;
            var vChange = NaN;
            function fn(speed){
                var v = vChange;
                wjdsq = setInterval(function(){
                    //看看这一长串,真的是比俄罗斯套娃还能套
                    var isxx = document.getElementsByName("w_main")[0].contentWindow.document.getElementById("w_lms_content").contentWindow.document.getElementsByTagName("tr")[1].getElementsByTagName("td")[0].innerHTML.indexOf("已经学习完毕");
                    if(isxx > 0){
                        btnNext.click();
                        console.log(`已自动切换下一课件,当前时间:${new Date().getHours()}:${new Date().getMinutes()}:${new Date().getSeconds()}`);
                        if(v == vChange && document.visibilityState == "visible"){
                            console.log("页面已重回前台台,恢复正常模式")
                            clearInterval(wjdsq)
                            fn(180)
                        }
                    }else{
                        console.log(`当前课件计时疑似出错,将进行重试,当前时间:${new Date().getHours()}:${new Date().getMinutes()}:${new Date().getSeconds()}`);
                        btnNext.click();
                        setTimeout(function(){btnPrev.click()},500)
                        if(v == vChange && document.visibilityState == "hidden"){
                            console.log("页面已置于后台,启用激活模式")
                            clearInterval(wjdsq)
                            fn(30)
                        }
                    }
                },1000*speed)
            };
            fn(180);
            document.addEventListener('visibilitychange',function(){
                if(document.visibilityState == "visible"){
                    vChange = "v"
                }else if(document.visibilityState == "hidden"){
                    vChange = "h"
                }
            })
        }else{
            console.log("当前为网教平台,未进入学习界面,等待中...")
        }
    }
    //根据协议名判断是哪个平台,设置延时器是防止页面未加载完成导致脚本出错
    setTimeout(document.location.protocol == "https:" ? xty:wj,10000)
})();