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...");