【全自动】青书学堂挂课

青书学堂 自动播放视频 自动挂课 自动下个视频 自动下个课程

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         【全自动】青书学堂挂课
// @namespace    http://tampermonkey.net/
// @version      0.5
// @description  青书学堂 自动播放视频 自动挂课 自动下个视频 自动下个课程
// @author       Yi
// @match        https://qingshuxuetang.com/*
// @match        https://*.qingshuxuetang.com/*
// @match        https://www.qingshuxuetang.com/*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        None
// ==/UserScript==


(function() {
    'use strict';
    let domain = 'https://degree.qingshuxuetang.com/'
    let url = location.href
    let host = location.host
    let isDegree = host.indexOf('degree') > -1
    if(!isDegree && url.indexOf('MyQingShu') > -1){
        showInfo('开始执行请稍后')
        setTimeout(function() {
            console.log('viewMap',viewMap)
            if(viewMap && viewMap.student && viewMap.student.data){
                window.location.href= viewMap.student.data[0].entrance
                return
            }
            showInfo('没有学校')
        }, 3000)
        return
    }
    if(!isDegree){
        console.log('不是degree页面')
        return
    }
    let symbol = null
    if(location.pathname.split('/').length >= 2){
        symbol = location.pathname.split('/')[1]
    }
    if(symbol == null){
        console.log('未找到学校')
        return
    }
    if(url.indexOf('Student/Home') > -1){
        showInfo('开始执行请稍后')
        window.location.href=`${domain}${symbol}/Student/Course/CourseList`
    }else if (url.indexOf('Course/CourseList') > -1) {
        showInfo('开始执行请稍后')
        setTimeout(function() {
            console.log('currentCourse',currentCourse)
            sessionStorage.setItem('courses',JSON.stringify(currentCourse))
            let course = getFitCourse();
            if(course){
                window.location.href=`${domain}${symbol}/Student/Course/CourseStudy?courseId=${course.courseId}&teachPlanId=${course.teachPlanId}&periodId=${course.periodId}`
                return
            }
            showInfo('没有可学习课程')
        }, 3000)
    }else if(url.indexOf('Course/CourseStudy') > -1){
        showInfo('开始执行请稍后')
         setTimeout(function() {
             console.log('coursewareMedias',coursewareMedias)
             var videos=[];
             getVideoNode(coursewareMedias,videos)
             console.log('videos',videos);
             let video = videos[0];
             let courseId = getQueryString('courseId');
             let teachPlanId = getQueryString('teachPlanId');
             let periodId = getQueryString('periodId');
             let videoMaps = {}
             videoMaps[courseId] = videos;
             sessionStorage.setItem('videos',JSON.stringify(videoMaps))
             window.location.href=`${domain}${symbol}/Student/Course/CourseShow?teachPlanId=${teachPlanId}&periodId=${periodId}&courseId=${courseId}&nodeId=${video.id}`
         }, 3000)
    }else if(url.indexOf('Course/CourseShow') > -1){
        showInfo('开始执行请稍后')
        let courseId = getQueryString('courseId');
        let nodeId = getQueryString('nodeId');
        let videoMaps = JSON.parse(sessionStorage.getItem('videos'))
        let teachPlanId = getQueryString('teachPlanId');
        let periodId = getQueryString('periodId');
        let nextVideo = getNextVideo(nodeId,videoMaps[courseId])
        setTimeout(function() {
          var video = document.getElementById("vjs_video_3_html5_api")
          //设置静音
          video.muted = true
          //视频倍速
          //video.playbackRate = 2
          //视频开始
          video.play()
          const nextUrl = `${domain}${symbol}/Student/Course/CourseShow?teachPlanId=${teachPlanId}&periodId=${periodId}&courseId=${courseId}&nodeId=${nextVideo}`
          if(video.duration < 300){
              if(nextVideo == null){
                  let courses = JSON.parse(sessionStorage.getItem('courses'))
                  let course = getNextCourse(courseId,courses)
                  if(course == null){
                      window.location.href='https://baidu.com'
                  }
                  window.location.href=`${domain}${symbol}/Student/Course/CourseStudy?courseId=${course.courseId}&teachPlanId=${course.teachPlanId}&periodId=${course.periodId}`
              }else{
                  location.replace(nextUrl);
              }
          }
          // 下一条视频
          video.addEventListener("ended",function(){
              if(nextVideo == null){
                  let courses = JSON.parse(sessionStorage.getItem('courses'))
                  let course = getNextCourse(courseId,courses)
                  if(course == null){
                      window.location.href='https://baidu.com'
                  }
                  window.location.href=`${domain}${symbol}/Student/Course/CourseStudy?courseId=${course.courseId}&teachPlanId=${course.teachPlanId}&periodId=${course.periodId}`
              }else{
                  location.replace(nextUrl);
              }
          })
        }, 5000)
        getVideoTime()

    }

    function getFitCourse(){
       for(let inx in currentCourse) {
           if(currentCourse[inx].score < 100){
               return currentCourse[inx]
           }
       }
       return null
    }

    function getNextVideo(current,videos){
        let next =null;
        Array.prototype.forEach.call(videos,function (value,index) {
            if(value.id === current && videos.length-1 > index+1){
               next = videos[index+1].id
                return false
            }
        })
        return next;
    }

    function getNextCourse(current,courses){
        let next =null;
        Array.prototype.forEach.call(courses,function (value,index) {
            if(value.courseId == current && courses.length-1 > index+1){
               next = courses[index+1]
                return false
            }
        })
        return next;
    }

    function getVideoNode(medias,videos){
       Array.prototype.forEach.call(medias,function (value,index) {
            if(value.type === 'video'){
                videos.push(value)
            }
            if(value.nodes !=null){
                getVideoNode(value.nodes,videos)
            }
        })
    }

    function getQueryString(name) {
        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
        var r = window.location.search.substr(1).match(reg);
        if (r != null) {
            return unescape(r[2]);
        }
        return null;
    }

    let currentVideoTime =null;

    function getVideoTime() {
        setInterval(function () {
            var vid = document.getElementById("vjs_video_3_html5_api")
            var currentTime = vid.currentTime.toFixed(1);
            if(currentTime == currentVideoTime){
                console.log('视频卡住了,刷新~');
                location.reload()
            }
            currentVideoTime = currentTime;
            console.log('视频时间:', currentTime);
        }, 5000);
    }

    function showInfo(info){
        QingshuDialog.info(`【脚本信息】${info}`)
    }

})();