Greasy Fork is available in English.

东华网络教自动学习脚本

try to take over the world!

// ==UserScript==
// @name         东华网络教自动学习脚本
// @namespace    http://tampermonkey.net/
// @version      0.16
// @description  try to take over the world!
// @author       You
// @match        http://*/*
// @include      *://donghuacj.ct-edu.com.cn/*
// @include      *:*
// @include      *:*
// @include      *:*
// @include      *:*
// @grant        none
// ==/UserScript==

(function () {
  "use strict";

  /** 脚本开始 */
  // 设置刷新时间,性能慢的电脑可设置5-10秒
  const INTERVALTIME = 3 * 1000;

  let waitTill = 0;

  let timer = null;

  // 判断是否有类
  function hasClassFun(element, cls) {
    console.log("判断类由还是没有element:", element);
    if (element) {
      return (" " + element.className + " ").indexOf(" " + cls + " ") > -1;
    } else {
      return false;
    }
  }

  // 如果有框 才走下面
  const handleNext = () => {
    showNext();
    showComplete();
    showQuestion();
  };
  // 定时器检测
  timer = setInterval(handleNext, INTERVALTIME);

  // 出现下一条
  function showNext() {
    // 出现下一页框点击
    let selectBox = document.querySelector(".layui-layer.layui-layer-dialog");
    let next = document.querySelector(
      ".layui-layer.layui-layer-dialog .layui-layer-btn0"
    );
    // 如果下一张显示就点击下一张
    if (selectBox && !selectBox.hidden) {
      next.click();
    }
  }

  // 出现已完成字样
  function showComplete() {
    // 页面标题出现已完成
    let complete = document.querySelector(".item-title .complete.ng-scope");
    // 所有列表
    let allNav = document.querySelectorAll(
      ".course_chapter_item.user-no-select.ng-scope"
    );
    let index = [].findIndex.call(allNav, (v) => hasClassFun(v, "active"));
    // 如果页面上出现已完成 点击下一跳视频
    if (complete && complete.innerText === "已完成") {
      allNav[index + 1].querySelector(".section_title.ng-binding").click();
    }
  }
  // 处理答题弹窗
  function showQuestion() {
    // 页面标题出现已完成
    let q = document.querySelector(".popup_do.ng-scope");

    if (q) {
      // 清除全局定时器
      clearInterval(timer);

      // let selectlis = getLis(q) // 获取列表集合
      // let submitBtn = getBtn(questionBox) // 提交按钮
      // console.log({ q, selectlis })
      // 第一条
      getLis(q)[0].querySelector("label").click();
      getBtn(q).click();

      waitTill = new Date(new Date().getTime() + 1 * 1000);
      while (waitTill > new Date()) {}

      if (hasClassFun(getLis(q)[0], "error")) {
        console.log("第一条有错误");
        getBtn(q).click();
        waitTill = new Date(new Date().getTime() + 1 * 1000);
        while (waitTill > new Date()) {}
      } else {
        timer = setInterval(handleNext, INTERVALTIME);
        return;
      }
      // 第二条
      getLis(q)[1].querySelector("label").click();
      getBtn(q).click();

      waitTill = new Date(new Date().getTime() + 1 * 1000);
      while (waitTill > new Date()) {}

      if (hasClassFun(getLis(q)[1], "error")) {
        console.log("第二条有错误");
        getBtn(q).click();
        waitTill = new Date(new Date().getTime() + 1 * 1000);
        while (waitTill > new Date()) {}
      } else {
        timer = setInterval(handleNext, INTERVALTIME);
        return;
      }

      // 第三条
      getLis(q)[2].querySelector("label").click();
      getBtn(q).click();

      waitTill = new Date(new Date().getTime() + 1 * 1000);
      while (waitTill > new Date()) {}

      if (hasClassFun(getLis(q)[2], "error")) {
        console.log("第三条有错误");
        getBtn(q).click();
        waitTill = new Date(new Date().getTime() + 1 * 1000);
        while (waitTill > new Date()) {}
      } else {
        timer = setInterval(handleNext, INTERVALTIME);
        return;
      }

      // 第四条
      getLis(q)[3].querySelector("label").click();
      getBtn(q).click();

      waitTill = new Date(new Date().getTime() + 1 * 1000);
      while (waitTill > new Date()) {}

      if (hasClassFun(getLis(q)[3], "error")) {
        console.log("第四条有错误");
        getBtn(q).click();
        waitTill = new Date(new Date().getTime() + 1 * 1000);
        while (waitTill > new Date()) {}
      } else {
        timer = setInterval(handleNext, INTERVALTIME);
        return;
      }
    } else {
      getContinueBtn() && getContinueBtn().click();
      return;
    }
  }
  // 返回答题列表
  function getLis(questionBox) {
    let selectUl = questionBox.querySelector(".item.content.DANXUAN.active ul");
    let selectlis = selectUl ? selectUl.querySelectorAll("li") : [];
    return selectlis;
  }
  // 返回提交重做按钮
  function getBtn(questionBox) {
    return questionBox.querySelector(".btn.whaty-button");
  }
  // 返回安提结束继续按钮
  function getContinueBtn() {
    const q = document.querySelector(".popup_show.ng-scope");
    if (q) {
      return q.querySelector(".btn.whaty-button");
    } else {
      return null;
    }
  }
  /** 脚本结束 */
})();