学习通浏览器刷课脚本

 学习通刷课太痛苦?试试这个Js脚本

/**
 * 本脚本用于学习通自动刷课,仅做学习用途
 * 转发请注明作者以及来源
 */
/**定义全局变量 */
var array_echelon;//顺序执行梯队
/**定义事件 */
let dealEvent = new Event("redeal", { bubbles: false, cancelable: false });
/**监听事件 */
document.addEventListener("redeal", function () {
    dealAnsEchelon(array_echelon);
});
/**初始化 */
function initAll() {
    console.log("获取当前页面任务中···");
    var ansiframe = window.frames["iframe"].contentWindow.document;//获取任务iframe
    var array_ans = ansiframe.querySelectorAll(".ans-attach-ct");//获取任务数组
    var array_type = getiframesType(array_ans);//获取任务属性
    var array_document = getAlliframesdocument(array_ans);//获取任务数组的document
    array_echelon = distributeAns(array_type, array_document);//获取顺序执行的任务的梯队
    console.log("当前页面任务数量为:" + array_echelon.length);
    /**释放内存 */
    ansiframe = null;
    array_ans = null;
    array_type = null;
    array_document = null;
}
/**工具函数 */
//获取任务属性
function getiframesType(array_ans) {
    var array_iframe_type = new Array();
    for (let ans of array_ans) {
        var jsonstr = ans.querySelector("iframe").getAttribute("data");
        var json = JSON.parse(jsonstr);
        array_iframe_type.push(json.type);
    }
    return array_iframe_type;
}
//获取任务document
function getAlliframesdocument(array_ans) {
    var array_ans_iframe_document = new Array();
    for (let ans of array_ans) {
        array_ans_iframe_document.push(ans.querySelector("iframe").contentWindow.document);
    }
    return array_ans_iframe_document;
}
//搭配document以及相应的执行函数
function joinAns(idocument, handler) {
    var array_temp = new Array();
    array_temp.push(idocument, handler);
    return array_temp;
}
//按任务属性分配执行函数
function distributeAns(array_type, array_document) {
    var array_iframe_echelon = new Array();
    array_type.forEach((type, index) => {
        switch (type) {
            case ".mp4": { array_iframe_echelon.push(joinAns(array_document[index], videoHandler)); break; }
            case ".wmv": { array_iframe_echelon.push(joinAns(array_document[index], videoHandler)); break; }
            case ".avi": { array_iframe_echelon.push(joinAns(array_document[index], videoHandler)); break; }
            case ".mkv": { array_iframe_echelon.push(joinAns(array_document[index], videoHandler)); break; }
            case ".pptx": { array_iframe_echelon.push(joinAns(array_document[index], pptxHandler)); break; }
            case ".pdf": { array_iframe_echelon.push(joinAns(array_document[index], pptxHandler)); break; }
            case ".ppt": { array_iframe_echelon.push(joinAns(array_document[index], pptxHandler)); break; }
            case ".mp3": { array_iframe_echelon.push(joinAns(array_document[index], audioHandler)); break; }
            case ".wav": { array_iframe_echelon.push(joinAns(array_document[index], audioHandler)); break; }
            default: { array_iframe_echelon.push(joinAns(array_document[index], ignoreAns)); break; }
        }
    });
    return array_iframe_echelon;
}
//处理单个任务
function dealSingleAns(singleans) {
    singleans[1](singleans[0]);
}
/**执行函数 */
//直接跳过
function skipChapter() {
    console.log("跳过章节");
    var chapter_next = document.querySelector("#prevNextFocusNext");
    chapter_next.click();
    setTimeout(function () {
        var tip = document.querySelector(".maskDiv.jobFinishTip.maskFadeOut");
        if (tip != null) {
            var tip_nextChapter = document.querySelector(".jb_btn.jb_btn_92.fr.fs14.nextChapter");
            tip_nextChapter.click();
        }
        setTimeout(() => {
            initAll();
            dealAnsEchelon(array_echelon);
        }, 5000);
    }, 2000);
}
//忽略任务
function ignoreAns() {
    console.log("无法处理,忽略任务");
    setTimeout(() => {
        document.dispatchEvent(dealEvent);
    }, 1500);
}
//处理视频
function videoHandler(idocument) {
    console.log("处理视频任务中···");
    var video = idocument.querySelector("video");
    var video_play = idocument.querySelector(".vjs-big-play-button");
    var video_doublespeed = idocument.querySelector(".vjs-menu-item");
    video_play.click();
    video_doublespeed.click();
    video.addEventListener("ended", function () {
        document.dispatchEvent(dealEvent);
    }, { once: true });
}
//处理ppt&pdf
function pptxHandler(idocument) {
    console.log("处理PPT任务中···");
    var sdocument = idocument.querySelector("iframe").contentWindow.document;
    var currentHeight = 0;
    var finalHeight = sdocument.documentElement.scrollHeight;
    var timer = setInterval(function () {
        if (currentHeight >= finalHeight) {
            clearInterval(timer);
            document.dispatchEvent(dealEvent);
            return;
        }
        currentHeight += 400;
        sdocument.defaultView.scrollTo(0, currentHeight);
    }, 1000);
}
//处理音频
function audioHandler(idocument) {
    console.log("处理音频任务中···");
    var audio = idocument.querySelector("audio");
    var audio_play = idocument.querySelector(".vjs-play-control.vjs-control.vjs-button");
    audio_play.click();
    audio.addEventListener("ended", function () {
        document.dispatchEvent(dealEvent);
    }, { once: true });
}
/**任务梯队顺序处理 */
function dealAnsEchelon(array_echelon) {
    console.log("待处理任务数量为:" + array_echelon.length);
    if (array_echelon.length != 0) {
        dealSingleAns(array_echelon[0]);
        array_echelon.shift();
        return;
    }
    skipChapter();
}
/**执行代码 */
initAll();
dealAnsEchelon(array_echelon);

代码基本都给了注释,目前没发现Bug

猜你喜欢

转载自blog.csdn.net/qq_67328471/article/details/137555334