寒假教师研修秒过

寒假教师研修,打开视频自动秒过

目前為 2025-01-26 提交的版本,檢視 最新版本

// ==UserScript==
// @name         寒假教师研修秒过
// @namespace    http://tampermonkey.net/
// @version      2025.01.27
// @description  寒假教师研修,打开视频自动秒过
// @author       occc
// @match        https://www.smartedu.cn/*
// @match        https://basic.smartedu.cn/*
// @match        https://smartedu.gdtextbook.com/education/*
// @require      https://fastly.jsdelivr.net/npm/[email protected]/dist/sweetalert2.all.min.js
// @resource     css https://fastly.jsdelivr.net/npm/[email protected]/dist/sweetalert2.min.css
// @grant        GM_addStyle
// @grant        GM_getResourceText
// @run-at       window-load
// @license      MIT
// ==/UserScript==

(function () {
  "use strict";

  // Your code here...
  // 引入第三方库https://github.com/sweetalert2/sweetalert2/
  GM_addStyle(GM_getResourceText("css"));
  // 弹窗函数
  function msg(txt, ms = 3000) {
    Swal.fire({
      html: txt,
      position: "center",
      icon: "success",
      showConfirmButton: false,
      timer: ms,
      timerProgressBar: true,
    });
  }
  var log = console.log;
  // 课程
  var course_name = "2025年寒假教师研修";
  var home = "https://basic.smartedu.cn/training/2025hjpx";
  var course_url = [
    // 学习贯彻全国教育大会精神
    "https://basic.smartedu.cn/teacherTraining/courseDetail?courseId=2c5f7bc2-699a-4433-b650-b5e554ed15e3&tag=2025%E5%B9%B4%E5%AF%92%E5%81%87%E6%95%99%E5%B8%88%E7%A0%94%E4%BF%AE&channelId=&libraryId=bb042e69-9a11-49a1-af22-0c3fab2e92b9&breadcrumb=2025%E5%B9%B4%E5%AF%92%E5%81%87%E6%95%99%E5%B8%88%E7%A0%94%E4%BF%AE",
    // 深化教育综合改革
    "https://basic.smartedu.cn/teacherTraining/courseDetail?courseId=4b35be2e-b78c-474b-9e27-85a0bb5757bf&tag=2025%E5%B9%B4%E5%AF%92%E5%81%87%E6%95%99%E5%B8%88%E7%A0%94%E4%BF%AE&channelId=&libraryId=bb042e69-9a11-49a1-af22-0c3fab2e92b9&breadcrumb=2025%E5%B9%B4%E5%AF%92%E5%81%87%E6%95%99%E5%B8%88%E7%A0%94%E4%BF%AE",
    // 推进教育国际交流合作
    "https://basic.smartedu.cn/teacherTraining/courseDetail?courseId=5a72caa9-d09e-4af1-be30-7d970c125038&tag=2025%E5%B9%B4%E5%AF%92%E5%81%87%E6%95%99%E5%B8%88%E7%A0%94%E4%BF%AE&channelId=&libraryId=bb042e69-9a11-49a1-af22-0c3fab2e92b9&breadcrumb=2025%E5%B9%B4%E5%AF%92%E5%81%87%E6%95%99%E5%B8%88%E7%A0%94%E4%BF%AE",
  ];
  // 上述配置的课程,分别学习多少课时(看多少个视频),因为认定学时有限,每个课程不用刷完!!!
  // 配置-1为学完当前课程的所有视频
  var lessons = [9, 6, 4];

  function next() {
    var href = window.location.href;
    var index = course_url.indexOf(href);
    if (index > -1) {
      if (index + 1 < course_url.length) {
        window.location.href = course_url[index + 1];
      } else {
        window.location.href = home;
      }
    } else {
      window.location.href = course_url[0];
    }
  }

  function click(auto_next = true) {
    // 判读是否满足学时要求
    if (lessons) {
      var href = window.location.href;
      var index = course_url.indexOf(href);
      var lesson = lessons[index];
      if (lesson != undefined && lesson != -1) {
        let headers = document.getElementsByClassName("fish-collapse-header");
        for (let i = 0; i < headers.length; i++) {
          let header = headers[i];
          header.click();
        }
        let finish = document.getElementsByClassName(
          "iconfont icon_checkbox_fill"
        );
        log(
          `当前页面已经学完【${
            finish.length
          }】个视频,学时要求为【${lesson}】个视频,是否达标:${
            finish.length >= lesson
          }`
        );
        if (finish.length >= lesson) {
          next();
        }
      }
    }
    var icon = null;
    function find_icon() {
      // 进行中
      icon = document.getElementsByClassName(
        "iconfont icon_processing_fill"
      )[0];
      // 未开始
      if (!icon) {
        icon = document.getElementsByClassName(
          "iconfont icon_checkbox_linear"
        )[0];
      }
    }
    // 查找默认列表
    find_icon();
    // 展开其他列表
    if (!icon) {
      let headers = document.getElementsByClassName("fish-collapse-header");
      for (let i = 0; i < headers.length; i++) {
        let header = headers[i];
        header.click();
        find_icon();
        if (icon) {
          break;
        }
      }
    }
    // 有没学完的
    if (icon) {
      icon.click();
    } else {
      if (auto_next) {
        next();
      } else {
        Swal.fire("当前页面所有视频已经播放完!", "", "success");
      }
    }
  }

  function play(v = null) {
    if (!v) {
      v = document.getElementsByTagName("video")[0];
    }
    if (v) {
      //v.dispatchEvent(new Event("ended"));
      v.muted = true;
      //v.playbackRate = 2;
      v.play();
      //v.currentTime = v.duration;
    }
    log(`play: v==>${v}`);
    // 关闭提示(必须完整看完整个视频才可以获得该视频的学时。)
    let btn = document.getElementsByClassName("fish-btn fish-btn-primary")[0];
    if (btn && btn.innerText.includes("知道了")) {
      btn.click();
      log(`关闭提示: btn==>${btn}`);
    }
  }

  var pageNumber = null;
  var pageCount = null;
  function read() {
    log(`PDF文档阅读: pageNumber==>${pageNumber}, pageCount==>${pageCount}`);
    if (pageCount) {
      var pc = pageCount;
      // 最后一页
      log("PDF文档跳到最后一页:", pc);
      window.postMessage(
        {
          type: "pdfPlayerPageChangeing",
          data: {
            pageNumber: pc,
            pageCount: pc,
          },
        },
        "*"
      );
      // 第一页
      setTimeout(function () {
        log("PDF文档调到第一页...");
        window.postMessage(
          {
            type: "pdfPlayerPageChangeing",
            data: {
              pageNumber: 1,
              pageCount: pc,
            },
          },
          "*"
        );
      }, 1000);
      // 重置
      pageCount = null;
    }
  }

  // 答题
  function answer() {
    let count = 0;
    const intervalId = setInterval(() => {
      log("自动答题检测...");
      // 选A
      var a = document.getElementsByClassName("nqti-check")[0];
      if (a) {
        a.click();
        // 下一题、确定
        for (let i = 0; i < 2; i++) {
          var btn = document.querySelector(
            "div.index-module_footer_3r1Yy > button"
          );
          if (btn) {
            btn.click();
          }
        }
      }
      count++;
      if (count === 3) {
        clearInterval(intervalId);
      }
    }, 1000);
  }

  // 广东特色
  function gd_class() {
    let ms = 10000;
    msg("欢迎进入“2024年广东暑期教师研修”专题。", (ms = ms));
    let tid = setInterval(function () {
      let all_finish = true;
      let flags = document.getElementsByClassName("flag");
      for (let i = 0; i < flags.length; i++) {
        let flag = flags[i];
        let display = flag.getElementsByClassName("icon-finish inline-block")[0]
          .style.display;
        if (display === "none") {
          all_finish = false;
          let v = document.getElementsByTagName("video")[0];
          if (v) {
            flag.click();
            setTimeout(function () {
              v = document.getElementsByTagName("video")[0];
              if (v) {
                //v.playbackRate = 16;
                //v.play();
                v.currentTime = v.duration;
              }
            }, 3000);
          }
          break;
        }
      }
      if (all_finish) {
        clearInterval(tid);
        msg("“2024年广东暑期教师研修”专题已学习完毕!", (ms = ms * 10));
      } else {
        let p =
          document.getElementsByClassName("el-progress__text")[0].innerText;
        msg(`挂机中,当前进度【${p}】`, (ms = ms));
      }
    }, ms);
  }

  function main() {
    log("main...");
    // 等待页面加载,延时开始
    var delay = 1000 * 10;
    var href = window.location.href;
    if (course_url.includes(href)) {
      msg(`等待网页资源加载, 约【${delay / 1000}】秒后开始自动播放视频`, delay);
      setInterval(function () {
        click();
        play();
        read();
        answer();
      }, delay);
    } else if (href.includes(`https://smartedu.gdtextbook.com/education/`)) {
      log(`“2024年广东暑期教师研修”专题iframe的跨域处理`);
    } else {
      Swal.fire({
        //background: "#url(https://baotangguo.cn:8081/)",
        icon: "warning",
        title: "开始刷视频?",
        //text: "好好学习,天天向上!",
        /*
                html: `<button id="myButton1" class="swal2-confirm swal2-styled" style="width: 450px;">国家中小学智慧教育平台应用专项培训<br>(“2024年广东暑期教师研修”专题)<br>进入视频播放页后按键盘【G】</button>`,
                willOpen: () => {
                    // 添加事件监听器
                    const button1 = Swal.getHtmlContainer().querySelector('#myButton1');
                    button1.addEventListener("click", () => {
                        Swal.fire(`进入视频播放页后按键盘【G】`);
                    });
                },
                */
        showDenyButton: true,
        showCancelButton: true,
        confirmButtonColor: "green",
        confirmButtonText: `<div style="width: 450px;">刷脚本配置的课程,当前为:<br><b>${course_name}</b></div>`,
        denyButtonColor: "blue",
        denyButtonText: '<div style="width: 450px;">只刷当前页的视频</div>',
        cancelButtonColor: "red",
        cancelButtonText: '<div style="width: 450px;">退出</div>',
      }).then((result) => {
        /* Read more about isConfirmed, isDenied below */
        if (result.isConfirmed) {
          msg("走你~");
          next();
        } else if (result.isDenied) {
          msg(`【${delay / 1000}】秒后开始自动播放视频`, delay);
          setInterval(function () {
            click(false);
            play();
            read();
            answer();
          }, delay);
        }
      });
    }
  }

  if (document.readyState === "complete") {
    // DOM 已经加载完成
    main();
  } else {
    // DOM 还未加载完成
    window.addEventListener("load", main);
  }
  document.addEventListener("keydown", function (event) {
    log("keydown", event.code);
    if (event.code === "KeyG") {
      gd_class();
    } else if (event.code === "KeyT") {
      msg("测试");
    }
  });
  window.addEventListener("message", function (event) {
    log("message", event);
    var data = event.data;
    log("data.type==>", data.type);
    if (data.type === "pdfPlayerInitPage") {
      pageNumber = data.data.pageNumber;
      pageCount = data.data.pageCount;
      log(
        `PDF文档初始化: pageNumber==>${pageNumber}, pageCount==>${pageCount}`
      );
    }
  });
})();

QingJ © 2025

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