超星尔雅js自动刷课脚本

Readme

之前找了很多js刷课脚本,要么不能自动播放下一课,要么不能快进自动答题,结合了几个脚本,自己修改了一下,可以实现自动下一课,自动答题,倍速播放,后台播放。
因尚无法得知尔雅检测刷课的原理,本脚本不能保证百分百安全。不过如果不在短时间内快速刷完大量的课应该没问题,请控制一下刷课的速度。

/**
 * author:Vhagar
 * 修改自https://hacpai.com/article/1556454946935的脚本 增加了自动答题和播放速率控制,修复了未播放完提前进入下一节课的错误
 * description: 自动播放,加速播放,下一集,自动答题,刷超星尔雅的课程
 * use-method: 打开超星尔雅播放课程界面 按F12 -> Console -> 粘贴本代码 ->按回车键
 * use-method: 视频目录上方出现 Welcome to use ANTI-erya! 以及 status,点击 start 按钮开启脚本。
 */

 function start(){
    playing_flag = !playing_flag;
    if (playing_flag) {
        button_tip.text("stop");
        status_tip.text("Status: Anti-erya main funciton start...");
        Anti_erya();
        // 1分钟检测一次,1 min = 60000 ms
        status_log = setInterval(Anti_erya, 2000);
        console.log("Anti-erya main funciton start...");
    } else {
        button_tip.text("start");
        status_tip.text("Status: Anti-erya main funciton stop...");
        window.clearInterval(status_log);
        console.log("Anti-erya main funciton stop...");
    }
}

function Anti_erya() {
    console.log((++times_log) + " times run...");
    if (times_log % 200 == 0) {
        console.clear();
    }
    // 获取播放器
    var video_frame = $('#iframe').contents().find('iframe').contents();
    //获取video.js控件
    var video = video_frame.find("#video_html5_api")[0];
    //设置播放速率=6
    video.playbackRate = 6;
    //静音
    video.muted = true;
    //检测是否有题目出现,并答题
    var ul = video_frame.find(".ans-videoquiz-opts:visible");
    if (ul) {
        video_frame.find(".ans-videoquiz-opts input[value='true']").attr("checked", true);
        video_frame.find(".ans-videoquiz-submit").trigger("click");//ext-gen1045
    }
    // 获取当前播放的课程
    var lesson_now = $('.ncells h4.currents');
    // 获取当前播放的父节点以方便获取下一个视频
    var lesson_now_parent = lesson_now.parent().parent().next().length === 0 ? lesson_now.parents(".cells") : lesson_now.parents(".ncells");
    // 获取下一个视频链接
    var lesson_next = lesson_now_parent.next().find('h4 a span');
    // 获取视频播放完成状态
    var lesson_finished = video.ended
    // 获取总控制器
    var video_control = video_frame.find('.vjs-play-control');

    // 完成
    if (lesson_finished) {
        console.log("start to next");
        if (lesson_next.length === 0) {
            lesson_next = lesson_now_parent.parent().next().children('.ncells').first().find('h4 > a > span')
        }
        console.log("Now class is finished:" + lesson_now.text().replace(/\s+/g, ""));
        console.log("Next class is:" + lesson_next.text().replace(/\s+/g, ""));
        // 点击下一个
        lesson_next.click();
        // 给他三秒的加载时间再点击。
        setTimeout(function () {
            $("span[title='视频']").click()
            $('html iframe').contents().find('iframe').contents().find('.vjs-big-play-button').click();
        }, 6000);
    } else {
        // 未完成,检测播放状态,如果暂停,就让他播放
        if (video_control.hasClass('vjs-paused') || !lesson_finished) {
            $('html iframe').contents().find('iframe').contents().find('.vjs-big-play-button').click();
        }
    }
}

var echo_box = $("<div style='background: wheat;padding: 20px;'><h4 style='margin: 0;'>Welcome to use ANTI-erya! By: <u><i>Vhagar</i></u></h4><h4 id='echo_status' style='margin: 0;'>Status:The Anti—erya nuclear weapon is stop...</h4><h4 style='margin: 0;'>Now, you can choose <button id='echo_tip' οnclick='start()'>start</button></h4></div>");
$('.right').prepend(echo_box);
var playing_flag = false;
var status_log;
var times_log = 0;
var button_tip = $('#echo_tip');
var status_tip = $('#echo_status');
console.clear();
console.log("The Anti-erya nuclear is ready to release! Please click start...");







发布了7 篇原创文章 · 获赞 3 · 访问量 198

猜你喜欢

转载自blog.csdn.net/k851819815/article/details/104794424