NeumoocStar,neumooc,东软慕课,东软学院,自动完成视频+课后作业

东软慕课+课后作业,借鉴了NeumoocBBQ,答案理论上都有。用谷歌浏览器!用谷歌浏览器!用谷歌浏览器!其他浏览器会有bug,不保证能正确运行。

// ==UserScript==
// @name         NeumoocStar,neumooc,东软慕课,东软学院,自动完成视频+课后作业
// @namespace    http://tampermonkey.net/
// @version      1.3
// @description  东软慕课+课后作业,借鉴了NeumoocBBQ,答案理论上都有。用谷歌浏览器!用谷歌浏览器!用谷歌浏览器!其他浏览器会有bug,不保证能正确运行。
// @author       Aisen
// @match        http://mooc.neumooc.com/course/play/*
// @run-at       document-end
// @grant        unsafeWindow
// @grant        GM_xmlhttpRequest
// @grant        GM_addStyle
// @grant        GM_download
// @connect      neu.aisencode.cn
// @requier      https://code.jquery.com/jquery-3.1.1.min.js
// @license      MIT
// ==/UserScript==


var window = unsafeWindow;
var $ = unsafeWindow.jQuery;
var setting = {
    time: 3000, // 默认响应速度为3秒,不建议小于3秒
    answers: [],
    doTest: true, //做题,默认开启true,关闭为false
    doVideo: true, //看视频,默认开启true,关闭为false
    pass:80 //测试通过得分,如果小于80则会重做

};

$(function() {
    try{
        main();
    }catch (err){
        window.location.reload();
    }
})

function main(){
    logger('info', 'Init: Neumooc injected.');
    pannel();
    setNotice();
    if (isVideo() && setting.doVideo) {
        var tryInitTime = 0;
        var initInterval = setInterval(function() {
            is_500();
            if (isPlayerReady()) {
                clearInterval(initInterval);
                logger('info', 'Init: Success find video player.');
                disableBlurPause();
                waitVideo();
            } else {
                tryInitTime++;
                logger('info', 'Init: Waiting video player.');
                if ($(".fp-ui")) $(".fp-ui").click();
                if (tryInitTime >= 6) {
                    clearInterval(initInterval);
                    logger('warn', 'Init: Can not find player, next outline.');
                }
            }
        }, 1000);

    }else {
        checkTest();
    }



}

function checkTest() {
    var seq = $(".seq_html");
    if (setting.doTest && seq.length > 0) {
        logger('info', 'Init: doTest is true, will get getAnswers in nextTime')
        getAnswers();
    }else {
        logger('info', 'doTest: dotest is closed or not a test, will go next Outline in ' + setting.time + 'ms');
        //等待后点击下一节
        setTimeout(function() { nextOutline() }, setting.time);
    }
}

// 获取答案
function getAnswers() {
    var courseId = $("#courseId").val();
    var outlineId = $("#outlineId").val();
    var testId = $('.seq_html:first').prop("id").substr(4);
    $.ajax({
        type : "POST",
        url : getContextPath() + "/course/play/getOutlineResInfo",
        data : {
            resId : testId,
            resType : 2,
            outlineId : outlineId,
            courseId : courseId,
        },
        async : false,
        error : function(request) {
        },
        success : function(data) {
            if (data.resInfo && data.resInfo.testStatus == '1') { // 有测试数据返回
                let testQuesList = data.resInfo.testQuesList
                let reg = /<a>([A-Z])/g;
                setting.answers = [];
                testQuesList.forEach(item=>{
                    let answer = [];
                    while (true) {
                        let arr = reg.exec(item.quesAnswer);
                        if (arr === null){
                            break;
                        }else{
                            answer.push(arr[1])
                        }
                    }
                    setting.answers.push(answer);

                });
                $(".answers").html("该课程有答案。<a href=\"http://www.aisencode.cn\" target=\"_blank\">Aisen的博客(゜-゜)つロ 干杯~</a>");
                logger('info', 'getAnswer: Success find answers form the server.');
                doTest();
            } else if (data.resInfo && data.resInfo.testStatus == '0') { // 测试不符合题目
                showAlert("该测试暂无试题");
            } else {
                showAlert("初始化测试出现错误");
            }
        }
    });
}

function setNotice() {

    GM_xmlhttpRequest({
            method: "GET",
            url: "http://neu.aisencode.cn/notice.php",
            headers: {
                "Content-Type": "application/json"
            },
            onload: function(res) {
                if (res.status == 200) {
                    var data = JSON.parse(res.responseText)}
                 $(".askMe").first().html(data.data)
            }
    })
}


function is_500() {
    //<div class="error-text-2 bounceInDown animated">
    //				<img src="/resources/img/500_bg.png">
    //			</div>
    var err = $('.error-text-2');
    if (err.length != 0) {
        logger('warn', 'is_500: the web is 500.');
        window.location.reload();

    }
}

// Logger
function logger(type, msg) {
    $(".info").text(msg);
    msg = "[NsumoocStar] " + msg;
    switch (type) {
        case 'warn':
            console.warn(msg);
            break;
        case 'log':
            console.log(msg);
            break;
        case 'info':
            console.info(msg);
            break;
    }
}

//面板
function pannel() {
    GM_addStyle('.mypanel {position: fixed;overflow: hidden;top: 100px;right: 10px; width: 300px;height: 200px;background-color: rgba(251,114,153, 0.8);z-index: 999999;border-radius: 5%;}');
    GM_addStyle('.answers, .askMe, .info {height: 70px;line-height: 70px;flote:left;padding-left: 10px;;border-bottom: rgba(0, 0, 0, .2) dashed 2px;font-size: 13px;color:#fff}');
    GM_addStyle('.askMe {}');
    GM_addStyle('.askMe a {color:#5DADE2 !important;font-size: 17px}');
    var html = '<div class="mypanel">'
    html += '<div class="answers"><a href=\"http://www.aisencode.cn" target=\"_blank\">Aisen的博客(゜-゜)つロ 干杯~</a></div>'
    html += '<div class="askMe">'
    html += '<a href="http://wpa.qq.com/msgrd?v=3&uin=201826658&site=qq&menu=yes" target="_blank">脚本反馈、脚本定制</a>'
    html += '</div>'
    html += '<div class="info">info</div>'
    html += '</div>'
    $("body").append(html);



}

//测试是否通过
function testHasPassed() {
    var maxCorrectRate = Number($('#maxCorrectRate').text().slice(0, -1));
    if (maxCorrectRate >= setting.pass) {
        return true;
    } else {
        return false;
    }



}
//测试
function doTest() {
    var seq = $(".seq_html");
    seq.click();
    setTimeout(function() {
        if (!testHasPassed()) {
            var answers = setting.answers;
            $(".answers").html("该课程有答案。<a href=\"http://www.aisencode.cn\" target=\"_blank\">Aisen的博客(゜-゜)つロ 干杯~</a>");
            logger('info', 'doTest: will do test in ' + setting.time + 'ms');
            setTimeout(function() {
                logger('info', 'doTest: test is doing.');
                var btn = $(".btn-primary")[0];
                btn.click();
                var num = 0;
                $(".answers").text('本题答案为:' + answers[num]);
                var timer = setInterval(function() {
                    is_500();
                    chooseAnswer(answers[num]);
                    num++;
                    var btnNext = $('.btn-primary:last');
                    btnNext.click()
                    if (num == answers.length) {
                        clearInterval(timer);
                        var btnOk = $('.ui-dialog_art-autofocus');
                        var btnClose = $('.ui-dialog_art-button').children('button');
                        setTimeout(function() { btnOk.click(); }, setting.time);
                        setTimeout(function() {
                            btnClose.click();
                            logger('info', 'doTest: Finished, will go next Outline in ' + setting.time + 'ms');
                            //5s后点击下一节
                            setTimeout(function() { nextOutline() }, setting.time);
                        }, setting.time + 1000);

                    } else {
                        $(".answers").text('本题答案为:' + answers[num]);

                    }
                }, setting.time);
            }, setting.time);



        } else {

            logger('info', 'doTest: the test already passed, will go next Outline in ' + setting.time + 'ms');
            //等待后点击下一节
            setTimeout(function() { nextOutline() }, setting.time);

        }
    }, 2000);

}

//选择
function chooseAnswer(answers) {
    var btns = $("input[name='optionSelect']");
    var btn;
    for (var i = 0; i < answers.length; i++) {
        try {
            switch (answers[i]) {
                case 'A':
                    btn = btns[0];
                    break;
                case 'B':
                    btn = btns[1];
                    break;
                case 'C':
                    btn = btns[2];
                    break;
                case 'D':
                    btn = btns[3];
                    break;
                case 'E':
                    btn = btns[4];
                    break;
                case 'F':
                    btn = btns[5];
                    break;
                case 'G':
                    btn = btns[6];
                    break;
                case 'H':
                    btn = btns[7];
                    break;
            }
        } catch (err) {
            btn = btns[0];
        }
        btn.click();
    }
}

//是否为视频
function isVideo() {
    if ($('.fp-player').length >= 1) {
        return true;
    } else {
        return false;

    }

}

// 视频是否加载完成
function isPlayerReady() {

    if (window.flowPlayerObj) {
        //console.log(window.flowPlayerObj);
        return window.flowPlayerObj
    } else {
        return false;
    }
}

//解锁暂停
function disableBlurPause() {
    logger('info', 'disableBlurPause: disableBlurPause service started.');
    var disableBlurPauseTimer = setInterval(function() {
        try {
            window.flowPlayerObj.play();
        } catch (e) {
            clearInterval(disableBlurPauseTimer);
            logger('warn', 'Can not find player.');
        }
    }, 500)
}
//等待视频完成
function waitVideo() {
    logger('info', 'waitVideo: waitVideo service started.');
    var nextInterval = setInterval(function() {
        //如果播放完成
        if (isFinished()) {
            clearInterval(nextInterval);
            checkTest();

        } else {
            logger('info', 'waitVideo: Waiting video finish.');
        }
    }, 1000)
}

// 跟进播放进度
function isFinished() {
    return window.flowPlayerObj.finished;
}

// 跳转到下节课
function nextOutline() {
    var outlineId = $("input#outlineId").val();
    var currentOutline = $('ul li.outl_' + outlineId); // 当前课程li
    var nextOutline;
    var next = currentOutline.nextAll();
    if (next.length != 0) {
        nextOutline = $(next[0]);

    } else {
        var nextAll = currentOutline.parents('li.parent_li').nextAll();
        if (nextAll.length != 0) {
            nextOutline = $($(nextAll[0]).children("ul").children('li')[0]);
        }

    }
    //var text = nextOutline.find('font').text();
    var nextOutlineUrl = nextOutline.find("a:first").attr('href');
    nextOutlineUrl ? window.location.href = nextOutlineUrl : logger('warn', 'Can not find next Outline or had finished.');
}