最近选修课很多啊,我们学习的是智慧树的,智慧树的刷课脚本我朋友已经写好了,自己就不想写了,见智慧树刷课 js 脚本。不过其他学校的有的就是超星尔雅的了,我同学一口气选了四门选修=-=,但是没时间刷,所以我给他弄了个 teamviewer ,可以在外面的时候手机远程连接点下一个,但是感觉效率很慢而且老是忘记,所以自己也想写一个刷课脚本,于是才有了这篇博客。
刷课有风险,由于是纯 js 代码,所以我个人觉得我的这个是风险最低的,但是却不敢保证完全没有风险。
免责申明:本脚本仅供技术交流,请勿用于商业及非法用途,如产生法律纠纷与本人无关!使用后产生的一切后果由使用者自行承担,本人概不负责。
分析
首先当然是分析他的网页元素,发现它使用的是 html5 的 video 标签,其中的暂停按钮这些都是有对应的元素的。并且他默认引入力 jquery,所以自己就果断用了 jq。下面是本人测试的一些事件使用。
- 播放按钮点击
$('.vjs-big-play-button').click()
- 进度条 class:
vjs-play-progress
- 子页面获取 iframe 里的播放按钮
$('html iframe').contents().find('iframe').contents().find('.vjs-big-play-button').click()
- 当前课程 class:
ncells h4.currents
- 切换时初始播放
$('html iframe').contents().find('iframe').contents().find('.vjs-poster').click()
- 总控制器
$('html iframe').contents().find('iframe').contents().find('.vjs-play-control')
- 播放时,总控制器拥有
vjs-playing
类,暂停时,总控制器有vjs-paused
类
成品代码
/**
* author: EchoCow
* website: https://www.echocow.cn
* description: 自动播放,下一集,无视答题窗口,刷超星尔雅的课程
* use-method: 打开超星尔雅播放课程界面 按F12 -> Console -> 粘贴本代码 ->按回车键
* use-method: 视频目录上方出现 Welcome to use EchoGet! 以及 status,点击 start 按钮开启脚本。
*/
function start() {
echo_flag = !echo_flag;
if (echo_flag) {
echo_tip.text("stop");
echo_status.text("Status: EchoGet start...");
echo_get();
// 1分钟检测一次,1 min = 60000 ms
echo_id = setInterval(echo_get,2000);
console.log("EchoGet start...");
} else {
echo_tip.text("start");
echo_status.text("Status: EchoGet stop...");
window.clearInterval(echo_id);
console.log("EchoGet stop...");
}
}
function echo_get() {
console.log((++echo_times) + " times run...");
if (echo_times % 200 == 0) {
console.clear();
}
// 获取播放器
var echo_video = $('html iframe').contents().find('iframe').contents();
// 获取当前播放的
var echo_now = $('.ncells h4.currents');
// 获取当前播放的父节点以方便获取下一个视频
var echo_now_parent = echo_now.parent().parent().next().length === 0 ? echo_now.parents(".cells") : echo_now.parents(".ncells");
// 获取下一个视频链接
var echo_next = echo_now_parent.next().find('h4 a span');
// 获取进度条
var echo_progress = echo_video.find(".vjs-play-progress").width() / echo_video.find(".vjs-play-progress").parent().width();
// 获取总控制器
var echo_control = echo_video.find('.vjs-play-control');
// 是否完成
var echo_start_flag = !echo_control.hasClass('vjs-playing') && !echo_control.hasClass('vjs-paused') && echo_progress == 0;
// 进度大于 95% 为完成
if (echo_progress > 0.95) {
if (echo_next.length === 0) {
echo_next = echo_now_parent.parent().next().children('.ncells').first().find('h4 > a > span')
}
console.log("Now class is finished:" + echo_now.text().replace(/\s+/g, ""));
console.log("Next class is:" + echo_next.text().replace(/\s+/g, ""));
// 点击下一个
echo_next.click();
// 给他三秒的加载时间再点击。
setTimeout(function () {
$("span[title='视频']").click()
$('html iframe').contents().find('iframe').contents().find('.vjs-big-play-button').click();
}, 3000);
} else {
// 未完成,检测播放状态,如果暂停,就让他播放
if (echo_control.hasClass('vjs-paused') || echo_start_flag) {
$('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 EchoGet! By: <u><i><a style='color: coral' href='https://www.echocow.cn' target='_blank'>EchoCow</a></i></u></h4><h4 id='echo_status' style='margin: 0;'>Status: EchoGet stop...</h4><h4 style='margin: 0;'>Now, you can choose <button id='echo_tip' onclick='start()'>start</button></h4></div>");
$('.right').prepend(echo_box);
var echo_flag = false;
var echo_id;
var echo_times = 0;
var echo_tip = $('#echo_tip');
var echo_status = $('#echo_status');
console.clear();
console.log("The EchoGet is OK!Please click start...");
自动阅读
var echo_height = $(document).height() ;
var echo_scroll = 0;
var echo_index = 0;
function echo_play(){
$('iframe').each(function(e){
$(this).contents().find('.vjs-big-play-button').click();
})
}
var echo_time = setInterval(function() {
console.log((echo_index++) + " times use...Now is " + echo_scroll);
echo_scroll += Math.random()*30;
$(window).scrollTop(echo_scroll);
if(echo_scroll >= echo_height ){
echo_play();
console.log("Loading more...");
$("#loadbutton").click();
echo_height = $(document).height() ;
console.log("New height is echo_height");
setTimeout(function(){
if($("#loadbutton").size() == 0){
console.log("Get Successed! Use " + echo_index + " times!");
clearInterval(echo_time);
}
},5000);
}
}, 1000);
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于