重庆理工自考刷课脚本

重庆理工大学在线学习平台刷课脚本

// ==UserScript==
// @name         重庆理工自考刷课脚本
// @namespace    http://tampermonkey.net/
// @version      1.0.0
// @license       MIT
// @description  重庆理工大学在线学习平台刷课脚本
// @match        *://cqlg.360xkw.com/*
// ==/UserScript==
(function() {
    'use strict';
    document.onreadystatechange = function(){
        if(document.readyState === 'complete'){
            var courseAll = document.getElementsByClassName('kmList')[0].querySelectorAll('li');
            var videoEl = document.getElementById('live_video');
            var playList = document.getElementsByClassName('layui-colla-content layui-show')[0].querySelectorAll('li');
            var playIndex = 0;
            courseAll.forEach((item, index) => {
                item.addEventListener('click', () => {
                    console.log('更新了科目,重置播放P数与播放列表');
                    playList = document.getElementsByClassName('layui-colla-content layui-show')[0].querySelectorAll('li');
                    playIndex = 0;
                })
            })
            function getPlayIndex (){
                for(var i=0;i<playList.length;i++){
                    var className = playList[i].children[0].getAttribute('class');
                    if(className.indexOf('onLive')>0){
                        playIndex = i;
                        break;
                    }
                }
            };
            if(videoEl){
                console.log('找到视频实例,开始监听');
                // console.log('开始1.5倍速播放视频'); // 倍速播放会导致视频刷完了但是时长不够
                // videoEl.playbackRate = 1.5;

                const currentTime = videoEl.currentTime; // 获取当前播放时间(秒)
                const now = new Date();
                const timestampDirect = Date.now(); // 直接获取的当前时间戳
                const videoDuration = videoEl.duration; // 获取视频总时长
                const remainingTime = videoDuration - currentTime; // 计算剩余播放时间 (单位:秒)
                const videoEndTime = new Date(now.getTime() + remainingTime * 1000); // 视频结束的本地时间戳

                console.log(`当前时间戳:${timestampDirect},已播放时间(秒):${currentTime},未播放时间(秒):${remainingTime},视频将在本地时间戳结束:${videoEndTime.getTime()}`);

                // 计算并打印剩余时间(单位:毫秒)
                console.log('距离视频结束还有(毫秒):', remainingTime * 1000);
                videoEl.volume = 0.01;
                // 播放结束
                videoEl.addEventListener('ended',function(){
                    if(playIndex < playList.length-1){
                        console.log('播放结束,自动下一P');
                        setTimeout(function(){
                            playList[++playIndex].querySelector('a').click();
                        },1000);
                    }else{
                        alert('所有视频已播放完毕');
                    }
                })
                // 播放开始
                videoEl.addEventListener('play', function () {
                    getPlayIndex();
                    console.log('正在播放第:'+ playIndex,'P');
                    // videoEl.playbackRate = 1.5;
                });
            }else{
                alert('视频实例没找到')
            }
        }
    }
})();