Greasy Fork

Greasy Fork is available in English.

【临时修复版】青书学堂自动刷课

【临时修复版】青书学堂自动刷课脚本,修复不能自动下一章,增加自动跳过课程简介、教学大纲,青书学堂更新后很多插件都用不了只能自己修复

当前为 2022-12-07 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         【临时修复版】青书学堂自动刷课
// @namespace    http://tampermonkey.net/
// @version      0.3
// @description  【临时修复版】青书学堂自动刷课脚本,修复不能自动下一章,增加自动跳过课程简介、教学大纲,青书学堂更新后很多插件都用不了只能自己修复
// @author       xuzifeng
// @match        *://*.qingshuxuetang.com/*
// @grant        none
// @license      GPL
// ==/UserScript==


(function() {
    'use strict';
    var i
    var href = location.href
    if (href.indexOf('nodeId') > -1) {
        var params = new UrlSearch()
        const courseArr = params.nodeId.split('jbxx')
        console.log('当前地址:',courseArr);
        // 跳过基本信息页(课程介绍、教学大纲)直接进入课程讲授
        if (courseArr.length == 2) {
            //视频第一页
            const kcjs = `kcjs_1_1`
            //拼接地址
            const Url = `https://${window.location.host}${window.location.pathname}?teachPlanId=${params.teachPlanId}&periodId=${params.periodId}&courseId=${params.courseId}&nodeId=${kcjs}`
            location.replace(Url);
        }
        setTimeout(function() {
            var video = document.getElementsByTagName("video")[0]
            console.log('找到视频组件,开始静音并自动播放...', video)
            var params = new UrlSearch()
            // 课程ID
            var courseId = params.courseId
            const courseArr = params.nodeId.split('_')
            // 播放的视频的key
            var nextKey = ''
            // 非播放页面转到播放页
            if(video ===undefined){
                console.log('找不到视频组件', video)
                nextKey = `kcjs_${Number(courseArr[1]) + 1}_1`
                //拼接地址
                const Url = `https://${window.location.host}${window.location.pathname}?teachPlanId=${params.teachPlanId}&periodId=${params.periodId}&courseId=${params.courseId}&nodeId=${nextKey}`
                location.replace(Url);
            }
            //设置播放进度为0
            video.currentTime = 0
            // 设置静音并播放
            video.muted = true
            // 设置倍速播放 支持以下速率: [2, 1.5, 1.2, 0.5] ;默认开启 如有问题请手动注释下面这行代码;或者邮箱反馈我
            video.playbackRate = 0.5
            video.play()

            //正常播放
            if (courseArr.length == 3) {
              nextKey = `kcjs_${courseArr[1]}_${Number(courseArr[2]) + 1}`
              console.log('下一页:',nextKey);
          }

            const nextUrl = `https://${window.location.host}${window.location.pathname}?teachPlanId=${params.teachPlanId}&periodId=${params.periodId}&courseId=${courseId}&nodeId=${nextKey}`
          console.log(params, 'currentId:', params.nodeId, 'nextKey:', nextKey, 'nextUrl:', nextUrl)
            // 视频播放结束,自动下一条视频
            video.addEventListener("ended",function(){
                location.replace(nextUrl);
            })
        }, 5000)

        // 打印播放进度
        getvideoprogress();
    }
})();

function UrlSearch() {
    var name,value;
    var str=location.href; //取得整个地址栏
    console.log('当前整个地址:',str);
    var num=str.indexOf("?")
    str=str.substr(num+1); //取得所有参数   stringvar.substr(start [, length ]
    var arr=str.split("&"); //各个参数放到数组里
    for(var i=0;i < arr.length;i++){
        num=arr[i].indexOf("=");
        if(num>0){
            name=arr[i].substring(0,num);
            value=arr[i].substr(num+1);
            this[name]=value;
        }
    }
}

// 检测当前播放的进度
function getvideoprogress() {
    setInterval(function () {
        var vid = document.getElementsByTagName("video")[0]
        var currentTime=vid.currentTime.toFixed(1);
        console.log('当前进度:', currentTime);
    }, 10000);
}