Greasy Fork

Greasy Fork is available in English.

航天云课堂辅助工具

27/8/2022, 22:22:22 PM

当前为 2022-08-29 提交的版本,查看 最新版本

// ==UserScript==
// @name         航天云课堂辅助工具
// @namespace    HangtianTrain Scripts
// @match        https://train.casicloud.com/*
// @require      https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.5.1.min.js
// @require      https://cdn.jsdelivr.net/npm/[email protected]
// @grant        GM_addStyle
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_deleteValue
// @grant        GM_openInTab
// @version     0.0.1
// @author      gtjl12
// @description 27/8/2022, 22:22:22 PM
// ==/UserScript==


//创建“开始学习”按钮和配置
function createStartButton() {
    let startButton = document.createElement("button");
    startButton.setAttribute("id", "startButton");
    startButton.innerText = "开始学习";
    startButton.className = "btn egg_study_btn";
    $(startButton).css({'font-size':'15px','border-radius': '6px'});
    //添加事件监听
    try {// Chrome、FireFox、Opera、Safari、IE9.0及其以上版本
        startButton.addEventListener("click", preWatchCourse, false);
    } catch (e) {
        try {// IE8.0及其以下版本
            startButton.attachEvent('onclick', preWatchCourse);
        } catch (e) {// 早期浏览器
            console.log("航天云课堂专题刷课Error: 开始学习按钮绑定事件失败")
        }
    }
    //插入节点
    $(".clsCourseDiv").before(startButton);

}

//创建课程信息,获取待学习课程链接
function creatCourseInfo(){
    let totalCourseNum = 0;
    let todoCourseNum = 0;
    let courseInfo = document.getElementsByClassName("item current-hover");
    if( courseFlag == 0 && courseInfo.length > 0)
    {
        totalCourseNum = courseInfo.length
        Array.prototype.forEach.call(courseInfo, function (element) {
            if(element.getElementsByClassName('small inline-block')[0].textContent == '开始学习' || element.getElementsByClassName('small inline-block')[0].textContent == '继续学习')
            {
                courseLink.push(linkHeader+$(element).attr("data-resource-id")+linkTail);
                todoCourseNum++;
            }

        });
        let courseDiv = document.createElement("div");
        courseDiv.setAttribute("id", "courseDiv");
        courseDiv.innerText = "本专题共有 " + totalCourseNum +" 节课,还需学习 "+ todoCourseNum + " 节课。";
        courseDiv.className = "clsCourseDiv";
        $(".subject-catalog-wrapper").before(courseDiv)

        $(".clsCourseDiv").css({'background-color':'rgb(203 234 255)','font-size':'15px','border-radius': '6px','padding': '5px'});
        courseFlag = 1;
    }
}
//创建学习提示框
function creatTips()
{
    let tipInfo = document.createElement("div");
    tipInfo.setAttribute("id", "studyTip");
    tipInfo.innerText = "正在学习....";
    tipInfo.style.position = "fixed";
    tipInfo.style.bottom = "15px";
    tipInfo.style.left = "5px";
    tipInfo.style.padding = "12px 14px";
    tipInfo.style.border = "none";
    tipInfo.style.borderRadius = "10px";
    tipInfo.style.backgroundColor = "#222222";
    tipInfo.style.color = "#ffffff";
    tipInfo.style.fontSize = "14px";
    tipInfo.style.fontWeight = "bold";

    $('.new-course-top').after(tipInfo)
}
//改变学习提示
function changeTips()
{
    document.getElementById('studyTip').innerText = "学习完成";

}
//看课程序
async function preWatchCourse(){
    startFlag = 1;
    let startButton = document.getElementById("startButton");
    startButton.innerText = "正在学习";
    startButton.style.cursor = "default";
    startButton.setAttribute("disabled", true);
    for (let i = 0; i < courseLink.length; i++) {
        GM_setValue('watchingUrl', courseLink[i]);
        console.log("正在学习第" + (i + 1) + "节课");
        let newPage = GM_openInTab(courseLink[i], { active: true, insert: true, setParent: true })
        await waitingClose(newPage);
        console.log('本专题学习已全部完成');
    }
    finishFlag = 1;
    return;

}

//等待窗口关闭
function waitingClose(newPage) {
    return new Promise(resolve => {
        let doing = setInterval(function () {
            if (newPage.closed) {
                clearInterval(doing);//停止定时器
                resolve('done');
            }
        }, 1000);
    });
}

//默认情况下, chrome 只允许 window.close 关闭 window.open 打开的窗口,所以我们就要用window.open命令,在原地网页打开自身窗口再关上,就可以成功关闭了
function closeWin() {
    try {
        window.opener = window;
        var win = window.open("","_self");
        win.close();
        top.close();
    } catch (e) {
    }
}
//模拟看课
function controlPlayer()
{
    let referseBtns = document.getElementsByClassName('videojs-referse-btn');
    let pauseBtns = document.getElementsByClassName('vjs-paused');
    let playingBtns = document.getElementsByClassName('vjs-playing');
    let videoPlayer = document.getElementsByTagName('video');
    if(videoPlayer.length > 0 && referseBtns.length > 0 && videoPlayer[0].paused == true){
        document.getElementsByClassName('videojs-referse-btn')[0].click();
        setTimeout(() => console.log("视频已暂停,等待重新播放"), 3000)
        videoPlayer[0].play();
    }
    let okBtns = document.getElementsByClassName('btn-ok');
    if(okBtns.length > 0){
        $(".btn-ok")[0].click();
    }
    scroN++;
    window.scrollTo(0, scroN%2);
}

var loadFlag = 0;
var courseFlag = 0;
var startFlag = 0;
var testFlag = 0;
var finishFlag = 0;

var reloadTime = 2500;
var linkHeader = "https://train.casicloud.com/#/study/course/detail/10&";
var linkTail = "/6/1";
var courseLink = [];
var scroN = 0;

var mainFunc = setInterval(function () {

    //如果本页是专题页面,创建学习按钮
    let subjectDiv = document.getElementsByClassName("subject-catalog-wrapper");
    if( subjectDiv.length > 0 )
    {
        if(document.getElementById('courseDiv') == null )
        {
            creatCourseInfo();
        }
        if(document.getElementById('courseDiv') != null && document.getElementById('startButton') == null )
        {
            createStartButton();
            loadFlag = 1;
        }
    }


    let url = window.location.href;
    //如果是从专题进入课程
    if( typeof GM_getValue("watchingUrl") != 'object' && url == GM_getValue("watchingUrl") )
    {
        var watchingCourse = setInterval(function () {
            if( document.getElementById('studyTip') == null )
            {
                creatTips();
            }
            let subFinishDiv = document.getElementsByClassName('anew-text');
            let videoPlayer = document.getElementsByTagName('video');
            if( ( videoPlayer[0].currentTime == videoPlayer[0].duration ) || ( subFinishDiv.length > 0 && subFinishDiv[0].textContent == '您已完成该课程的学习'))
            {
                changeTips();
                clearInterval(watchingCourse);
                closeWin();
            }else{
                controlPlayer();
            }
        },3000)
    }
    //如果不是从专题进入课程,而是直接观看课程,只控制播放,看完停止循环
    let videoPlayer = document.getElementsByTagName('video');
    if( videoPlayer.length > 0 && finishFlag == 0 && loadFlag == 0 && courseFlag == 0 )
    {
        if( document.getElementById('studyTip') == null )
        {
            creatTips();
        }
        let CoursefinishDiv = document.getElementsByClassName('anew-text');
        if( ( videoPlayer[0].currentTime == videoPlayer[0].duration ) || ( CoursefinishDiv.length > 0 && CoursefinishDiv[0].textContent == '您已完成该课程的学习'))
        {
            changeTips();
            clearInterval(mainFunc);
        }else{
            controlPlayer();
        }
    }
    //看完一个专题全部课程,停止循环
    if( finishFlag == 1 && loadFlag == 1 && courseFlag == 1)
    {
        let startButton = document.getElementById("startButton");
        startButton.innerText = "已完成本专题学习";
        startButton.style.cursor = "default";
        startButton.setAttribute("disabled", true);
        clearInterval(mainFunc);
    }
}, reloadTime)