福大雨课堂刷课-数研院

a script for automating video play for 雨课堂

目前為 2022-09-30 提交的版本,檢視 最新版本

// ==UserScript==
// @name         福大雨课堂刷课-数研院
// @namespace    http://tampermonkey.net/
// @version      0.3.0
// @license      MIT
// @description  a script for automating video play for 雨课堂
// @author       camerayuhang or 风刮的唉 from FZU
// @match        https://changjiang.yuketang.cn/v2/web/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=yuketang.cn
// @grant        none
// @require      https://cdn.bootcdn.net/ajax/libs/jquery/3.6.1/jquery.js
// ==/UserScript==

(function() {
    let timeInterval = 4000; // you can change the time interval here

    let stopInterval = (id) => {
      window.clearInterval(id);
      id = null;
    };


    // keep looking for scrollDown button every a few seconds until finds it
    let intervalForScrollDown;
    intervalForScrollDown = window.setInterval(() => {
      let btn = $("span.blue.ml20").eq(0);
      if (btn.length !== 0) {
        stopInterval(intervalForScrollDown);
        if (btn.text().trim() === "展开") {
          console.log("展开 button will be click automatically");
          btn.click();
        }

        let currentURL = window.location.href;

        // look for all videoNodes
        let intervalForAllVideoNodes;
        intervalForAllVideoNodes = window.setInterval(() => {
          let sectionVideoNodes = $("#pane--1 .activity-info.el-tooltip use[*|href='#icon-shipin']").parent().parent().parent().parent();
          if (sectionVideoNodes.length >= 0) {
            stopInterval(intervalForAllVideoNodes);

            // traverse each video nodes and check whether it is finished
            let done = true;
            for (let i = 0; i < sectionVideoNodes.length; i++) {
              const ele = sectionVideoNodes[i];
              let flagText = $(ele).children(".statistics-box").children(".aside").children().eq(1);
              console.log(`the state of the ${i + 1}th video: ${flagText.text()}`);
              if (flagText.text() !== "已完成") {
                console.log(`you have watched ${i} videos`);
                console.log(`start to watch the ${i + 1}th video`);
                done = false;
                flagText.click();
                break;
              }
            }
            if (done) {
              window.alert("Congratulation! you've already finished all videos of this course.Please switch to another unfinished course to go on your journey!")
            }
            else {
              // look for video node
              let intervalForVideo;
              intervalForVideo = window.setInterval(() => {
                let video = $(".xt_video_player");
                if (video.length === 1) {
                  stopInterval(intervalForVideo);
                  let videoTitle = $("div.title-fl span")[0].innerText;  // title
                  let pause_btn = $("xt-bigbutton.pause_show");  // pause button
                  if (pause_btn.length == 1) {  //  determine whether the button is shown
                    pause_btn.click();
                  }
                  // lisen the video process
                  let listenVideoProcess;
                  let videoNode = video[0];
                  listenVideoProcess = window.setInterval(() => {
                    let w = $("span.text:eq(1)")[0];  // element for process
                    console.log(videoTitle + '---' + w.innerText);
                    if (w.innerText == "完成度:100%" || videoNode.ended == true) {
                      stopInterval(listenVideoProcess);
                      console.log("close the interval");
                      window.location.replace(currentURL);
                    }
                  }, timeInterval)
                }
              }, timeInterval);
            }
          }
        }, timeInterval);
      }
    }, timeInterval);
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址