21tb自用

21tb的自动挂机,未实现全自动学习。手动选择课程后,课程内的每小节会自动下一节学习。注意:1、域名的主机名要注意是否相同,账号不同,对应的页面不同,不能保证所有通用,注意URL的路径匹配,自行修改,目前我接触的有两种学习界面;2、因为21tb的视频使用了iframe,所以将脚本设置“仅在顶层页面(框架)运行”选择“是”,以免重复启用。

目前為 2023-10-21 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

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

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         21tb自用
// @namespace    http://tampermonkey.net/
// @version      0.4
// @description  21tb的自动挂机,未实现全自动学习。手动选择课程后,课程内的每小节会自动下一节学习。注意:1、域名的主机名要注意是否相同,账号不同,对应的页面不同,不能保证所有通用,注意URL的路径匹配,自行修改,目前我接触的有两种学习界面;2、因为21tb的视频使用了iframe,所以将脚本设置“仅在顶层页面(框架)运行”选择“是”,以免重复启用。
// @author       You
// @match        https://*.21tb.com/els/html/courseStudyItem/courseStudyItem.learn.do*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=21tb.com
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    var interval=30 //间隔时间,秒,必须正整数
    var courseList=[] //所有课程
    var watchVideo //视频任务
    console.log("已启动")

    var domain=document.domain
    var url=window.location.pathname
    //时间设置有误,默认为30秒
    if(!(Number.isInteger(interval)&&interval>0))
    {
        interval=30
    }
    if(url=='/els/html/courseStudyItem/courseStudyItem.learn.do')
    {
        setTimeout(function(){
            if(document.querySelector('#courseItemId'))
            {
                console.log("1号方案")
                startWatch()
            }
            else if(document.querySelector('#aliPlayerFrame'))
            {
                console.log("2号方案")
                startWatch2()
            }
        },10000);
    }


    function startWatch2()
    {
      courseList= document.getElementsByClassName("url-course-content")[0].contentWindow.document.querySelectorAll('.section-item:not(.finish)')
      console.log("还有有"+ courseList.length +"节课")
        checkVideo2()
        watchVideo=setInterval(checkVideo2,interval*1000)
    }

function checkVideo2()
    {
        console.log("正在检测视频——2")
        //Iframe的document
        var frameDocument=document.querySelector('#aliPlayerFrame').contentDocument
        //判断是否有正在学习的节点
        if(frameDocument.querySelector('.first-line.active'))
        {
            //如果有,判断该节点是否是已完成
            if(frameDocument.querySelector('.first-line.active').parentNode.classList.contains('finish'))
            {
                //有找到未完成的课程
                if(frameDocument.querySelector('.section-item:not(.finish)'))
                {
                    frameDocument.querySelector('.section-item:not(.finish)').click()
                    return
                }
                else//没有找到未完成的课程
                {
                    //关闭定时器
                    clearInterval(watchVideo)
                    return
                }

            }
            else{//未完成,判断视频是否暂停状态
                console.log('检测视频是否暂停状态--2--暂停',frameDocument.querySelector('video').paused)

                if(frameDocument.querySelector('video').paused)
                {
                   frameDocument.querySelector('video').play()
                }
                return
            }
        } else//如果没有正在学习的节点
        {
                //有找到未完成的课程
                if(frameDocument.querySelector('.section-item:not(.finish)'))
                {
                    frameDocument.querySelector('.section-item:not(.finish)').click()
                    return
                }
                else//没有找到未完成的课程
                {
                    //关闭定时器
                    clearInterval(watchVideo)
                    return
                }
        }



    }





    function startWatch()
    {
        console.log("已加载")
        courseList=document.querySelector('#courseItemId').querySelectorAll('.cl-catalog-item-sub')
        console.log("共有"+ courseList.length +"节课")

        checkVideo()

         console.log("开启定时器")
        //开启定时器,循环检测
       watchVideo=setInterval(checkVideo,interval*1000)
    }

        function checkVideo(){
            console.log("正在检测视频——1")
            //检测是否有正在播放的视频
            if(document.querySelector('a.cl-catalog-playing'))
            {
                //已完成
                if(document.querySelector('a.cl-catalog-playing').classList.contains('item-done'))
                {
                    //如果存在未完成的视频
                    if(document.querySelector('a.item-no'))
                    {
                        //点击第一个未完成的视频
                        document.querySelector('a.item-no').click()
                        console.log('正在播放“'+document.querySelector('a.item-no').title+"”")
                        return
                    }
                    //如果不存在未完成的视频,说明视频已经播放完毕。结束计时器
                    clearInterval(watchVideo)
                }
                else{//未播放完成
                    if(document.querySelector('iframe#iframe_aliplayer').contentDocument.querySelector('video').paused)
                    {
                        document.querySelector('iframe#iframe_aliplayer').contentDocument.querySelector('video').play()
                    }
                    return
                }
            }else{//没有正在播放的视频
                //如果存在未完成的视频
                if(document.querySelector('a.item-no'))
                {
                    //点击第一个未完成的视频
                    document.querySelector('a.item-no').click()
                     console.log('正在播放“'+document.querySelector('a.item-no').title+"”")
                    return
                }
                //如果不存在未完成的视频,说明视频已经播放完毕。结束计时器
                clearInterval(watchVideo)
            }
        }

    // Your code here...
})();