Greasy Fork

Greasy Fork is available in English.

东华网络教自动学习脚本

try to take over the world!

目前为 2020-10-12 提交的版本。查看 最新版本

// ==UserScript==
// @name         东华网络教自动学习脚本
// @namespace    http://tampermonkey.net/
// @version      0.12
// @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';

        /** 脚本开始 */
    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
        }
    }
    /** 脚本结束 */

})();