Greasy Fork

Greasy Fork is available in English.

国家中小学智慧教育平台刷课脚本(16倍速,自动答题,自动切换列表中的视频,后台播放,学时不更新的解决方法看下面)

16倍速,自动答题,自动切换列表中的视频,后台播放,学时不更新的解决方法看下面

当前为 2023-01-10 提交的版本,查看 最新版本

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         国家中小学智慧教育平台刷课脚本(16倍速,自动答题,自动切换列表中的视频,后台播放,学时不更新的解决方法看下面)
// @namespace    http://tampermonkey.net/
// @version      1.6
// @license      CC BY-NC-SA
// @description  16倍速,自动答题,自动切换列表中的视频,后台播放,学时不更新的解决方法看下面
// @author       HGGshiwo
// @match        https://*.zxx.edu.cn/teacherTraining/courseDetail*
// @match        https://basic.smartedu.cn/teacherTraining/courseDetail*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none
// ==/UserScript==

(function () {
  "use strict";
  // function
  const sleep = async (time) => {
    var p = new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve();
      }, time);
    });
    return p;
  };

  const getActiveVideoAndPlay = async () => {
    await sleep(1000);

    //获取当前视频位置
    try {
      var groups = document.getElementsByClassName("fish-collapse-item");
      var groupNo = [...groups].findIndex((item) => {
        return item.className.includes("active");
      });
      var base = location.hostname.includes("basic")
        ? document
        : groups[groupNo];
      var resItems = base.getElementsByClassName("resource-item");
      var resNo = [...resItems].findIndex((item) => {
        return item.className.includes("active");
      });
    } catch (e) {
      console.log(666, e);
      getActiveVideoAndPlay();
      return;
    }

    console.log(666, `开始观看: 第${resNo + 1}个视频,第${groupNo + 1}组`);
    try {
      var vid = document.getElementsByTagName("video")[0];
      vid.muted = true;
      vid.play();
      vid.playbackRate = 16;

      vid.addEventListener(
        "ended",
        async () => {
          await sleep(1000);
          //计算下一个视频的位置
          if (resNo + 1 == resItems.length) {
            //看完了当前组
            if (groupNo + 1 == groups.length) {
              console.log(666, "看完了所有组, 退出");
            } else {
              //观看下一组
              console.log(666, `点击下一组的第一个视频`);
              document
                .getElementsByClassName("fish-collapse-header")
                [groupNo + 1].click();
              await sleep(1000);
              resItems =
                groups[groupNo + 1].getElementsByClassName("resource-item");
              resItems[0].click();
              getActiveVideoAndPlay();
            }
          } else {
            //观看当前组的下一个视频
            resItems[resNo + 1].click();
            console.log(666, `点击当前组的下一个视频`);
            getActiveVideoAndPlay();
          }
        },
        false
      );

      vid.addEventListener("pause", async () => {
        if (document.hidden) {
          vid.play(); //因为页面隐藏而暂停,则直接播放
          return;
        }
      });
    } catch (e) {
      console.log(666, e);
      getActiveVideoAndPlay(); //获取不到视频,再次调用
    }
  };

  if (confirm("开始运行脚本吗?")) {
    console.log(666, "刷课脚本开始运行");

    setInterval(() => {
      var options = document.getElementsByClassName("nqti-option");
      if (options.length) {
        options[0].click();
      }
      var btnWapper = document.getElementsByClassName(
        "index-module_markerExercise_KM5bU"
      );
      if (btnWapper.length) {
        var btns = btnWapper[0].getElementsByClassName("fish-btn");
        if (btns.length) {
          btns[0].click();
        }
      }
      var confirmBtns = document.getElementsByClassName(
        "fish-modal-confirm-btns"
      );
      if (confirmBtns.length) {
        confirmBtns[0].getElementsByClassName("fish-btn")[0].click();
      }
    }, 1000);

    getActiveVideoAndPlay();
  }
})();