EchoCow

念念不忘,必有回响。

目录
超星尔雅刷课脚本 —— js 版
/    

超星尔雅刷课脚本 —— js 版 有更新!

最近选修课很多啊,我们学习的是智慧树的,智慧树的刷课脚本我朋友已经写好了,自己就不想写了,见智慧树刷课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');
        // 获取进度条
        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) {
            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...");
念念不忘,必有回响。
评论