Greasy Fork

Greasy Fork is available in English.

职培云刷课-学习中心的未完成课程

可以将学习中心中的所有未完成课程的课时刷满(个人仅有此需求,如有其他需求者可自行修改代码)

当前为 2022-06-13 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         职培云刷课-学习中心的未完成课程
// @namespace    http://tampermonkey.net/
// @version      1.1.2
// @description  可以将学习中心中的所有未完成课程的课时刷满(个人仅有此需求,如有其他需求者可自行修改代码)
// @author       攸泠
// @match        https://px.class.com.cn/player/*
// @match        https://px.class.com.cn/study/*
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
    /*获取当前页面的url,用以判断执行哪一部分脚本*/
    var url = window.location.href;
    /*如果含有未完成的课程,则自动进入课程中*/
    if(url.indexOf('study/myclass/index')!=-1){
        var unfinished = document.getElementsByClassName('class-list-box')[0].getElementsByClassName('unfinished');
        if(unfinished.length>0){
            /*进入课程*/
            unfinished[0].getElementsByClassName('title')[0].click();
        }
        /*如果课程中含有未完成视频,则自动进入该课程,否则返回班级*/
    }else if(url.indexOf('study/myclass/course')!=-1){
        var finish_no = document.getElementsByClassName('list-box')[0].getElementsByClassName('finish-no');
        if(finish_no.length>0){
            /*进入视频*/
            finish_no[1].getElementsByTagName('button')[0].click();
        }else{
            /*返回班级*/
            document.getElementsByClassName('text-header')[0].getElementsByTagName('a')[0].click();
        }
    }else{
        /*当前观看的课程*/
        var current;
        /*课程中的所有课程*/
        var list;
        /*观看状态:1表示当前视频未看完,0表示当前视频已看完(已完成课程重刷)*/
        var lessonstatus = 1;
        /*查看模式:0代表未看完的方式,1代表已看完重刷一次,默认1即可刷所有视频,0只能刷未看完的视频*/
        var watchmode = 0;
        /*开始统计视频总时长(5秒内可自行选择起始视频)*/
        setTimeout(function() {
            /*分*/
            var minute = -1;
            /*秒*/
            var second = 0;
            /*课程内所有视频*/
            list = document.getElementById("list_chapter").getElementsByClassName("section");
            /*时间累加*/
            for(var i = 0; i < list.length; i++) {
                //定位到当前视频
                if(list[i].className.indexOf("active")!=-1) {
                    current = i;
                    minute = 0;
                }
                if(minute >= 0){
                    minute += parseInt(list[i].getElementsByClassName("time")[0].innerHTML.split(":")[0]);
                    second += parseInt(list[i].getElementsByClassName("time")[0].innerHTML.split(":")[1]);
                }
            }
            minute += parseInt(second/60);
            var time = document.createElement('div');
            time.style = "position:fixed;;top:20px;left:30%;background-color: pink;";
            time.innerText = '视频总长'+minute+'分'+second%60+'秒,已开启自动播放,感谢使用攸泠脚本!';
            document.body.append(time);
        }, 5000);

        /*刷已完成课程*/
        /*因为是iframe标签,所以使用监听非常麻烦,这里采用计时的方式*/
        /*考虑到网络延时,多增加了10秒延迟*/
        function watchover(){
            lessonstatus = 0;
            var minute = parseInt(list[current].getElementsByClassName("time")[0].innerHTML.split(":")[0]);
            /*随机时间,10代表0-10,5代表0-10加了5秒,即5-15秒*/
            var second = parseInt(list[current].getElementsByClassName("time")[0].innerHTML.split(":")[1]) + (Math.random() * 10) + 5;
            if(second>=60){
                minute ++;
                second -= 60;
            }
            document.getElementById('list_chapter').getElementsByClassName("active")[0].innerHTML += "-"+minute+":"+second;
            console.log(current);
            setTimeout(function() {
                current ++;
                list[current].click();
                lessonstatus = 1;
            }, (minute * 60 + second) * 1000);
        }
        /*刷未完成课程*/
        function watchnew(){
            var test = list[current].getElementsByClassName("status-done")[0].innerText;
            //判断是否播放完成
            if(current >= list.length-1){
                document.getElementsByClassName('btn-back')[0].getElementsByTagName('a')[0].click();
            }else{
                if(typeof(test) != "undefined") {
                    console.log("视频已播放完成:" + test);
                    current ++;
                    list[current].click();
                }
            }
        }
        /*定时启动判断程序*/
        setInterval(function() {
            if (watchmode == 1){
                if (lessonstatus == 1){
                    watchover();
                }
            }else{
                watchnew();
            }
        },10000)
    }
})();