Greasy Fork

Greasy Fork is available in English.

不学习何以提升信息技术应用能力

看看视频,看看文章。

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         不学习何以提升信息技术应用能力
// @namespace    http://tampermonkey.net/
// @version      1.4
// @description  看看视频,看看文章。
// @author       荷包蛋。
// @match        https://jstsgc.gdedu.gov.cn/info2/pinfo/teacherSpace/home.action
// @match        https://scnu.djtedu.cn/student.html
// @match        https://preview.dccloud.com.cn/?ssl=*&furl=*
// @icon         https://dckj.ks3-cn-guangzhou.ksyun.com/ltedu3/20210410/807d6bbf-80f8-44d6-82ab-44b0b8a5a3fc.png
// @require      https://cdn.bootcdn.net/ajax/libs/blueimp-md5/2.9.0/js/md5.min.js
// @grant        GM_addStyle
// @grant        GM_openInTab
// @grant        window.close
// ==/UserScript==

var study_css = ".egg_study_btn{outline:0;border:0;position:fixed;top:5px;left:5px;padding:12px 20px;border-radius:10px;cursor:pointer;background-color:#fff;color:#d90609;font-size:18px;font-weight:bold;text-align:center;box-shadow:0 0 9px #666777;z-index: 999;}";
GM_addStyle(study_css);

const homePageUrl = "https://jstsgc.gdedu.gov.cn/info2/pinfo/teacherSpace/home.action";
const studyPageUrl = "https://scnu.djtedu.cn/student.html";
const articlePageUrl = "https://preview.dccloud.com.cn"
var currUrl = window.location.href;

var currArticle = -1;

(function() {
    'use strict';
    if(currUrl.indexOf(homePageUrl) != -1){
        //如果是首页
        createStartButton();
    }else if(currUrl.indexOf(studyPageUrl) != -1){
        //如果是学习页面
        console.log("学习")
        study();
    }else if(currUrl.indexOf(articlePageUrl) != -1){
        console.log("阅读文章")
        readAtricle();
    }

    //获取video标签
    function getVideoTag(){
        let iframe = document.getElementsByTagName("iframe")[0];
        let video = null;
        let pauseButton = null;
        if(iframe){
            //如果有iframe,说明外面的video标签是假的
            video = iframe.contentWindow.document.getElementsByTagName("video")[0];
        }else{
            //否则这个video标签是真的
            video = document.getElementsByTagName("video")[0];
        }
        return video;
    }

    //看视频
    function watchVideo(){
        return new Promise(resolve => {
            let playTime = 0;
            let video = getVideoTag();
            if(video){
                if(!video.muted){
                    video.muted = true;
                }
                if(playTime == 0){
                    playTime = video.currentTime;
                }
                let checkMideaInterval = setInterval(function(){
                    if(video.paused){
                        if(video.duration > playTime){
                            try{
                                video.play();
                            }catch(e){}
                        }else{
                            console.log("播放完了")
                            clearInterval(checkMideaInterval);
                            resolve('done');
                        }
                    }else{
                        console.log("正在播放视频")
                        playTime += 2.5;
                        if(playTime == video.duration || playTime > video.duration){
                            console.log("播放完了")
                            clearInterval(checkMideaInterval);
                            resolve('done');
                        }
                    }
                },2500);
            }
        })
    }

    //获取未完成的视频
    function getVideo(){
        let video = null;
        let videos = document.querySelectorAll(".public-articleSlideList");
        let key = md5(document.querySelector(".left-content h3").innerText);
        let currVideo = getCookie("currVideo");
        console.log(key)
        console.log(currVideo)
        if(videos && videos.length != 0){
            //有一组视频
            for(let i = 0; i < videos.length; i++){
                let status = videos[i].querySelector(".video-status");
                status = status.innerText;
                if(status != "已学习"){
                    if(key == currVideo){
                        //已经播放完了,但是还没更新状态
                        //跳过
                        video = null;
                    }else{
                        //还没学过
                        setCookie("currVideo",key);
                        video = document.querySelectorAll(".public-articleSlideList");
                        video = {
                            btn:videos[i].querySelector(".el-icon-video-play"),
                            status:status
                        }
                        break;
                    }
                }
            }
        }else{
            //只有一个视频,或者没有视频
            let temp = document.querySelector("video");
            if(temp){
                //用笨办法,自己检测
                if(key == currVideo){
                    //已经播放完了,但是还没更新状态
                    //跳过
                    video = null;
                }else{
                    //还没学过
                    setCookie("currVideo",key);
                    video = {
                        btn:null,
                        status:"未完成"
                    }
                }
            }else{
                //没有视频
                video = null;
            }
        }
        return video;
    }

    //看文章(PPT)
    async function readAtricle(){
        await Sleep(7000);
        // let pageCount = document.getElementById("PageCount");
        // let nextBtn = document.getElementById("pageNext");
        // if(pageCount && nextBtn){
        //     console.log("PPT")
        //     //获取总共有多少页
        //     pageCount = Number.parseInt(pageCount.innerText);
        //     let i = 0;
        //     while(i < pageCount){
        //         await Sleep(2500);
        //         nextBtn.click();
        //         i++;
        //     }
        // }else{
        //     console.log("文章")
        //     let scrollItem = document.getElementById("ctn");
        //     let scrollLength = scrollItem.scrollHeight;
        //     let part = scrollLength/40;
        //     if(scrollItem){
        //         let num = scrollLength - part;
        //         while(num > 0){
        //             scrollItem.scrollTo(0,scrollLength - num);
        //             num -= part;
        //             await Sleep(1000);
        //         }
        //     }else{
        //         await Sleep(scrollLength * 10);
        //     }
        // }
        window.close();
    }

    //查询是否需要阅读文章,如果需要则返回立即阅读按钮
    function getArticle(){
        let article = null;
        let articles = document.querySelectorAll(".file-box-content");
        if(articles && articles.length != 0){
            for(let i = 0; i< articles.length; i++){
                let isFinish = articles[i].querySelector(".fs12");
                if(isFinish.innerText.indexOf("未完成") != -1){
                    let title = articles[i].querySelector(".fs15");
                    title = md5(title.innerText);
                    if(title == getCookie("currArticle")){
                        //不是第一次看了,跳过,不看了
                    }else{
                        setCookie("currArticle",title);
                        article = articles[i].querySelector("button");
                        break;
                    }
                }
            }
        }
        return article;
    }

    //打开并监听页面关闭
    function openArticle(articleUrl){
        return new Promise(resolve => {
            let studyPage = GM_openInTab(articleUrl,{active: true,insert: true, setParent :true});
            let studying = setInterval(function() {
                if(studyPage.closed) {
                    clearInterval(studying);
                    resolve('done');
                }
            }, 2500);
        })
    }

    //监听等待主题出现
    function getAllSubjects(){
        return new Promise(resolve => {
            let checkInterval = setInterval(function(){
                var subjects = document.querySelectorAll(".el-tree-node__content");
                if(subjects && subjects.length != 0){
                    clearInterval(checkInterval);
                    resolve(subjects);
                }
            },800)
            })
    }

    //学习
    async function study(){
        let subjects = await getAllSubjects();
        //初始化当前看的视频
        setCookie("currVideo",null);
        //初始化当前看的文章
        setCookie("currArticle",null);
        for(let i = 0; i < subjects.length; i++){
            let isFinish = subjects[i].querySelector("i");
            if(isFinish.title != "已学习"){
                if(!subjects[i].querySelector(".active")){
                    //如果不是当前选中的,就去点击
                    subjects[i].querySelector(".nav_menu").click();
                }
                await Sleep(2000);
                let video = getVideo();
                console.log(video);
                while(video != null){
                    if(video.status == "未学习" || video.status == "学习中"){
                        if(video.btn){
                            video.btn.click();
                        }
                        await Sleep(2000);
                    }
                    await watchVideo();
                    video = getVideo();
                }
                console.log("播放完视频了,看看有没有文章")
                let article = null;
                while((article = getArticle()) != null){
                    article.click();//这里必须要按按钮,文章才算读了,如果用GM打开页面不算
                    await Sleep(10000);
                }
            }
        }
        console.log("该课程都学完了");
        await Sleep(1500);
        window.close();
    }


    //创建“开始学习”按钮和配置
    function createStartButton(){
        let body = document.getElementsByTagName("body")[0];
        let startButton = document.createElement("button");
        startButton.setAttribute("id","startButton");
        startButton.innerText = "开始学习";
        startButton.className = "egg_study_btn";
        //添加事件监听
        try{// Chrome、FireFox、Opera、Safari、IE9.0及其以上版本
            startButton.addEventListener("click",start,false);
        }catch(e){
            try{// IE8.0及其以下版本
                startButton.attachEvent('onclick',start);
            }catch(e){// 早期浏览器
                console.log("不学习何以强国error: 开始学习按钮绑定事件失败")
            }
        }
        //插入节点
        body.append(startButton)
    }

    //阻塞
    function Sleep(time = 1000){
        return new Promise(resolve => {
            setTimeout(function(){
                resolve('done');
            },time);
        });
    }

    //学习课程
    function studyCourse(courseUrl){
        return new Promise(resolve => {
            let studyPage = GM_openInTab(courseUrl,{active: true,insert: true, setParent :true});
            let studying = setInterval(function() {
                if(studyPage.closed) {
                    clearInterval(studying);
                    resolve('done');
                }
            }, 2500);
        })
    }

    //开始
    async function start(){
        let courses = document.querySelectorAll(".training-item");
        for(let i = 0; i< courses.length; i++){
            let state = courses[i].querySelector(".training-state img");
            if(state.src.indexOf("un-finish") == -1){
                //如果不是显示未完成,那直接跳过
                //因为更新有延迟,所以检测有没有显示未完成,而不是检测有没有显示已完成
                continue;
            }
            let title = courses[i].querySelector(".training-info a");
            console.log("正在学习第" + (i+1) + "个课程" + title.innerText);
            let button = courses[i].querySelector(".training-btn a");
            await studyCourse(button.href);
        }
        console.log("已完成")
    }

    //保存cookies
    function setCookie(name,value,expiredays = 1){
        var exp = new Date();
        exp.setTime(exp.getTime() + expiredays*24*60*60*1000);
        document.cookie = name + "="+ escape(value) + ";expires=" + exp.toGMTString();
    }

    //读cookies
    function getCookie(name){
        var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
        if(arr=document.cookie.match(reg)){
            return arr[2];
        }else{
            return null;
        }
    }

    setInterval(function(){
        let messageBox = document.querySelector(".el-message-box__wrapper");
        if(messageBox){
            let message = messageBox.querySelector(".el-message-box__message").innerText;
            if(message && (message.indexOf("确定要切换到其他章节学习吗") != -1 || message.indexOf("将切换到此视频") != -1)){
                let confirnBtn = messageBox.querySelector(".el-button--primary");
                confirnBtn.click();
            }
        }
    },2000);
})();