好医生刷课脚本

该油猴脚本用于 好医生 的辅助看课,脚本功能如下:视频自动播放自动切换、自动考试

// ==UserScript==
// @name         好医生刷课脚本
// @namespace    https://jiaobenmiao.com/
// @version      1.0
// @description  该油猴脚本用于 好医生 的辅助看课,脚本功能如下:视频自动播放自动切换、自动考试
// @author       脚本喵
// @match        https://www.cmechina.net/cme/*
// @match        https://www.cmechina.net/cme/exam.jsp*
// @match        https://www.cmechina.net/cme/examQuizFail*
// @match        https://www.cmechina.net/cme/examQuizPass*
// @match        https://www.cmechina.net/cme/course.jsp?course_id*
// @match        https://www.cmechina.net/pub/tongzhi.jsp*
// @match        https://www.cmechina.net/webcam/ewmface2.jsp*
// @icon         https://jiaobenmiao.com/img/logo2.jpg
// @grant        GM_setValue
// @grant        GM_getValue
// @run-at       document-idle
// @grant        unsafeWindow
// @license      MIT
// ==/UserScript==


(function () {

    var url = window.location.href;
    advis();//广告和操作平台
    if (url.indexOf("https://www.cmechina.net/cme/polyv") != -1 || url.indexOf("https://www.cmechina.net/cme/study2.jsp") != -1) {
        console.log("进入好医生课程");

        window.onload = function () {
            // 移除右键菜单禁用
            document.oncontextmenu = null;

            // 移除F12禁用
            document.onkeydown = null;
            document.onkeyup = null;
            document.onkeypress = null;
            var infoold = console.info;//保存以前的console.info以防万一
            console.info = function () { };//禁止提示错误信息
            console.clear = function () { };//禁止清空控制台


            try {
                var kecheng = document.querySelectorAll("ul[id='s_r_ml']")[0].querySelectorAll("li");
            } catch (e) {
                var kecheng = document.querySelectorAll("ul[id='s_r_ml']")[0].querySelectorAll("li");
            };

            let i = 0;
            while (i < kecheng.length) {
                if (kecheng[i].outerText.includes("未学习") == true && kecheng[i].className != "active") {
                    console.log(kecheng[i].outerText.replace("未学习", ""));
                    window.s2j_onPlayerInitOver = function () {//PV视频加载完毕
                        setTimeout(function () {
                            try {
                                //document.querySelector("video").muted = true;
                                cc_js_Player.play();
                                cc_js_Player.setVolume(0);
                                console.log("运行了这个事件");
                            } catch (error) {
                                document.querySelector("video").play();//传统意义找播放器播放视频
                                document.querySelector("video").muted = true;
                            };
                        }, 1000);//延迟1秒操作,为网页留点时间
                    };

                    setTimeout(function () {
                        setInterval(function () {
                            counttime();
                        }, 10000);
                        kecheng[i].querySelector("a").click();//点击第一个没有播放的视频
                    }, 4000);//延迟4秒,避免网页还没打开
                    break;
                } else if (kecheng[i].outerText.includes("未学习") == true && kecheng[i].className == "active") {
                    console.log(kecheng[i].outerText.replace("未学习", ""));
                    //document.querySelector("video[class='pv-video']").play();//播放视频
                    //document.querySelector("video").play();//播放视频
                    cc_js_Player.play();
                    setTimeout(function () {
                        cc_js_Player.setVolume(0);
                        // document.querySelector("video").muted = true;
                        // document.querySelector("video").volume = 0;
                    }, 300);
                    setInterval(function () {
                        counttime();
                    }, 10000);
                    break;
                };
                //clearInterval(intervalid);
                if (i == kecheng.length - 1) {

                    if (localStorage.getItem("mode") == "2") {
                        setTimeout(function () {
                            document.querySelector("a[class='cur']").click();
                        }, 2000);
                    } else {
                        alert("已经完成全部学习,请自行考试");
                    };

                };
                i++;
            };

            function counttime() {
                clearInterval(intervalPause);//第一招:去掉签到定时器
                pauseSecond = -1;//第二招:去掉签到定时器
                function openPause() { };//第三招:清空弹出签到的功能
                var currenttime = parseInt(cc_js_Player.getPosition());
                var duration = parseInt(cc_js_Player.getDuration());
                var percent = ((currenttime / duration) * 100).toFixed(2) + "%";
                if (currenttime == duration) {
                    console.log("已播放" + percent);
                    location.reload();
                } else {
                    console.log("已播放" + percent);
                    cc_js_Player.play();
                    cc_js_Player.setVolume(0);
                    document.title = "【" + percent + "】" + $("a[class='active']").text();
                    // document.querySelector("video").play();//播放视频
                    // document.querySelector("video").muted = true;
                    // document.querySelector("video").volume = 0;
                };
            };
        };
    } else if (url.indexOf("https://www.cmechina.net/cme/exam.jsp不允许考试") != -1) {
        //这里是考试页面
        let timu = document.querySelectorAll("li");//获取全部考题和选项
        var cishu = localStorage.getItem("cishu");
        var answer = localStorage.getItem("Answer");
        console.log("提取的答案" + answer);
        console.log("次数:" + cishu)

        var i = 0;//用于遍历题号
        var j = 0;//用于遍历选项

        while (i < timu.length) {
            if (answer === null) {
                if (document.querySelectorAll("li")[i].innerText.indexOf("多选") != -1) {//如果是多选题,则全选(虽然不完美)
                    document.querySelectorAll("li")[i].querySelectorAll("input[type='checkbox']").forEach(function (checkbox) { checkbox.checked = true; });
                } else {
                    document.querySelectorAll("li")[i].querySelectorAll("input[type='radio']")[0].click();//如果是空的,那么全部选A
                    localStorage.setItem("cishu", 1);//恢复第一次作答
                };
            } else {
                answer = answer.toString().split(",");
                if (document.querySelectorAll("li")[i].innerText.indexOf("多选") != -1) {//如果是多选题,则全选(虽然不完美)
                    document.querySelectorAll("li")[i].querySelectorAll("input[type='checkbox']").forEach(function (checkbox) { checkbox.checked = true; });
                } else {
                    try {
                        document.querySelectorAll("li")[i].querySelectorAll("input[type='radio']")[thxx(answer[j])].click();//如果不是多选
                    } catch (error) {
                        document.querySelectorAll("li")[i].querySelectorAll("input[type='radio']")[0].click();//如果答案没有E,会出现错误,错误的话重新选A
                    };
                };
                localStorage.setItem("cishu", parseInt(cishu) + 1);//恢复第一次作答
            };
            i++;
            j++;
            if (cishu > 5) {
                cleanKeyStorage();//次数大于说明题目乱了,要重新从A开始选择
                localStorage.setItem("cishu", 1);//恢复第一次作答
            };
        };

        setTimeout(function () {
            document.querySelector("a[id='tjkj']").click();//提交答案按钮
        }, 500);


    } else if (url.indexOf("https://www.cmechina.net/cme/examQuizFail不允许考试") != -1) {
        //答题失败了

        const extractedList = url.match(/error_order=([0-9,]+)/)[1].split(",");//错题列表
        console.log("错题题号" + extractedList); // 输出: ["1", "2", "4", "5"]
        const ansList = url.match(/ansList=([^&]+)/)[1].split(",");//答案列表
        console.log("原本的答案" + ansList)//输出["A","B","C","D","E"]全部题目答案
        var i = 0;
        while (i < extractedList.length) {
            ansList[parseInt(extractedList[i]) - 1] = fthxx(parseInt(thxx(ansList[parseInt(extractedList[i]) - 1])) + 1);//将错题A转换为数字1,代表待会儿选B
            i++;
        };
        localStorage.setItem("Answer", ansList);//存储答案
        console.log("存储的答案" + ansList);

        setTimeout(function () {
            document.querySelector("a[id='cxdt']").click();//重新答题
        }, 500);

    } else if (url.indexOf("https://www.cmechina.net/cme/examQuizPass") != -1) {
        //答题成功
        cleanKeyStorage();
        setTimeout(function () {
            document.querySelector("div[class='show_exam_btns']").querySelector("a").click();//调到下一个章节的考试
        }, 2000);
    } else if (url.indexOf("https://www.cmechina.net/cme/course.jsp?course_id") != -1) {

        try {
            document.querySelector("i[class='fa fa-circle-o']").click()//课程页面点击未学习的进入
        } catch (error) {
            if (localStorage.getItem("mode") == "2") {
                document.querySelector("i[class='fa fa-adjust']").click();//课程页面点击要考试的进入
            };

        };

    } else if (url.indexOf("https://www.cmechina.net/pub/tongzhi.jsp") != -1) {
        //网站的广告通知,直接给他点掉。
        setTimeout(function () {
            try {
                document.querySelector("a[class='newBtn']").click();
            } catch (error) {
                console.log("没有找到推广通知");
            };
        }, 1000);
    } else if (url.indexOf("https://www.cmechina.net/cme/index.jsp") != -1) {
        setTimeout(function () {
            try {
                document.querySelector("div[class='close2']").click();
            } catch (error) {
                console.log("没有找到首页广告");
            };
        }, 1000);
    } else if (url.indexOf("https://www.cmechina.net/webcam/ewmface2.jsp") != -1) {
        console.log("二维码页面");
        var code = setInterval(function () {
            document.querySelector("div[id='wx_pay_ewm']").querySelector("canvas").style = "position:relative;left:-60px;top:-100px;height:300px;width:300px";
            if (document.querySelector("div[id='wx_pay_ewm']").querySelector("canvas").style["height"] == "300px") {
                clearInterval(code);
            };
        }, 100);
        setTimeout(function () {
            let nihao = document.createElement("div");
            nihao.innerText = "二维码已失效,点此刷新";
            nihao.style = "position:relative;top:-270px;left:-35px;width:250px;font-size:22px;text-align:left;color: #ff0000;font-weight: bold;background-color: #FFFFFF"
            document.querySelector("div[id='wx_pay_ewm']").querySelector("canvas").parentNode.append(nihao);
            nihao.onclick = function () {
                location.reload();
            };
        }, 60000);
    };

    //---------------------------------全局函数区------------------------------//

    function thxx(xx) {
        switch (xx) {
            case "A":
                xx = 0;
                break;
            case "B":
                xx = 1;
                break;
            case "C":
                xx = 2;
                break;
            case "D":
                xx = 3;
                break;
            case "E":
                xx = 4;
                break;
        };
        return xx;
    };

    function fthxx(xx) {
        switch (xx) {
            case 0:
                xx = "A";
                break;
            case 1:
                xx = "B";
                break;
            case 2:
                xx = "C";
                break;
            case 3:
                xx = "D";
                break;
            case 4:
                xx = "E";
                break;
        };
        return xx;
    };

    function cleanKeyStorage() {//缓存清理
        localStorage.removeItem("cishu");
        localStorage.removeItem("Answer");
    };

    function advis() {
        let div1 = document.createElement("div");
        let div2 = document.createElement("div");
        div1.innerHTML = `
    <div id='Div1' style="max-width:220px;text-align:left;padding: 10px 10px;font-size: 20px;float: left;position:fixed;top:180px;left: 10px;z-index: 99999; background-color: rgba(184, 247, 255, 0.7); overflow-x: auto;">
    <span id='clo' style="float: right;position: absolute;top:14px;right:5px;cursor:pointer;font-size:16px">❎</span>
    <div style="font-size:22px;font-weight:bold;color:red;">好医生刷课脚本</div>
    <hr style="margin-top: 10px;margin-bottom: 10px;">
    <a id='Autocourse' class="btn btn-default">★只看不考</a><br>
    <a id='Joincourse' class="btn btn-default">★全看遂考</a><br><br>

    
    </div> `;

        div2.innerHTML = `
    <div id='Div2' style = "padding: 10px 10px;font-size: 20px;float: left;position:fixed;top:180px;left: 240px;z-index: 99999; background-color: rgba(184, 247, 255, 0.7); overflow-x: auto;" >

    </div> `;
        document.body.append(div1, div2);
        //document.getElementById("Pic").style.height = document.querySelector("div[id='Div1']").offsetHeight - 20 + "px";//因为虚化上下各10px
        let mode1 = document.querySelector("a[id='Autocourse']");
        let mode2 = document.querySelector("a[id='Joincourse']");
        if (localStorage.getItem("mode") == "" || localStorage.getItem("mode") == "1") {
            mode1.innerHTML = "★只看不考 ✅";

        } else {
            mode2.innerHTML = "★全看遂考 ✅";

        };
        mode1.onclick = function () {
            if (mode1.innerHTML === "★只看不考") {
                mode1.innerHTML = "★只看不考 ✅";
                mode2.innerHTML = "★全看遂考";
                localStorage.setItem("mode", "1");
            };
        };
        mode2.onclick = function () {
            if (mode2.innerHTML === "★全看遂考") {
                mode1.innerHTML = "★只看不考";
                mode2.innerHTML = "★全看遂考 ✅";
                localStorage.setItem("mode", "2");
            };
        };
        clo.onclick = function () {
            document.querySelector("div[id='Div1']").style.display = "none";
            document.querySelector("div[id='Div2']").style.display = "none";
        };


    };
    //---------------------------------全局函数区end------------------------------//

})();