Greasy Fork

Greasy Fork is available in English.

智慧职教MOOC学院 --网课助手 (蓝版)

智慧职教简易自动学习脚本,解除Ctrl+C限制,自动评论/讨论

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         智慧职教MOOC学院 --网课助手 (蓝版)
// @version      1.08
// @description  智慧职教简易自动学习脚本,解除Ctrl+C限制,自动评论/讨论
// @author        tuChanged
// @run-       document-end
// @grant        unsafeWindow
// @match       *://mooc.icve.com.cn/study/*
// @license      GPL
// @namespace http://greasyfork.icu/users/449085
// @supportURL https://tuchg.github.io
// @contributionURL http://greasyfork.icu/users/449085
// ==/UserScript==
(function () {
    'use strict';
    const setting = {
        // 随机评论
        randomComment: ["6666", "好", "讲解得很精辟"],
        //是否启用评论,
        isOpenComment: false,
        //最高延迟
        maxDelayTime: 5000,
        //最低3秒
        minDelayTime: 3000,
        //0-高清 1-清晰 2-流畅 3-原画
        videoQuality: 2,
        //2倍速
        videoPlaybackRate: 2
    }, _self = unsafeWindow,
        url = location.pathname,
        top = _self

    try {
        while (top != _self.top) top = top.parent.document ? top.parent : _self.top;
    } catch (err) {
        console.log(err);
        top = _self;
    }
    var $ = _self.jQuery || top.jQuery;

    //产生区间随机
    var rnd = (min, max) => Math.floor(Math.random() * (max - min + 1) + min);
    /**
     * 随机延迟执行方法
     * @param {需委托执行的函数} func 函数
     */
    var delayExec = (func) => setTimeout(func, rnd(setting.minDelayTime, setting.maxDelayTime));
    //跳转到某小节 通过顶栏
    var gotoUrl = (page) => page.contents()[3].click();
    //跳转下一页
    // var nextCourse = () => $(".next").click();


    //入口
    switch (url) {
        case "/study/courseLearn/resourcesStudy.html":
            _main();
            break;
        case "/study/discussionArea/topicReply.html":
            discussHandler();
            break;
        case "/study/workExam/testWork/preview.html":
        case "/study/workExam/onlineExam/preview.html":
            homeworkHandler();
            break;
        case "/study/workExam/homeWork/history.html":
        case "/study/workExam/onlineExam/history.html":
        case "/study/workExam/testWork/history.html":
            floatHandler();
            break;
        default:
            console.log(`脚本已准备启动 当前位置:${url}`);
            break;
    }

    //当前页
    let current;

    //刷课主逻辑
    function _main() {
        //请求数据
        $("#olTempleteCellModul").click();
        //main函数
        setTimeout(() => {
            //当前小节
            current = $("li.np--level.np--level-3.active");
            switch (current.data().categoryname) {
                case "pt":
                case "文档":
                    pptHandler(current);
                    break;
                case "视频":
                    videoHandler(current);
                    break;
            }
            console.log("当前处理逻辑安排完成,等待执行结果中");
        }, 10000);
    }

    /**
     * 检测课程类别 并深层递归
     */
    function check(current) {
        //多级跳转
        if (current.next().length == 0) {
            // current.end();
            //往树根遍历
            //小章节
            let parent = current.closest(".np--level-2");
            if (parent.next().length == 0) {
                //大章
                let ancestor = parent.closest(".np--level-1")
                //检测是否到终章
                if (ancestor.next().length == 0) {
                    alert("任务完成");
                    //关闭当前窗口
                    // closeTab();
                } else {
                    check(ancestor.next().find(".np--level-3").first());
                }
            } else {
                check(parent.next().find(".np--level-3").first())
            }
            return;
        }
        //查询下一个是否已完成
        if (current.next().find("span.np--type.active").length > 0) {
            check(current.next());
            return;
        }
        //查询下一项所属类别
        switch (current.next().data().categoryname) {
            case ""://目录
            case "作业":
            case "测验":
                check(current.next());
                break;
            case "讨论":
                setTimeout(() => {
                    gotoUrl(current.next())
                }, 20000);
                check(current.next());
                break;
            case "pt":
            case "视频":
            case "文档":
                gotoUrl(current.next());
                _main();
                break;
        }
    }
    /**
     * 作业处理
     */
    function homeworkHandler() {
        uncageCopyLimit()
    }
    /*
     *  解除文本限制   
     */
    function uncageCopyLimit() {
        let arr = ["oncontextmenu", "ondragstart", "onselectstart", "onselect", "oncopy", "onbeforecopy"]
        for (let i of arr)
            $(".hasNoLeft").attr(i, "return true")
        console.log("已成功解除限制")
    }
    /**
     * 视频类处理
     */
    function videoHandler(current) {
        let player = top.jwplayer($(".jwplayer").attr("id"));
        //播放回调
        if (player.getState() == "complete") {
            console.log("视频原已播放完毕\n");
            delayExec(commentHandler(current));
            return;
        }
        //配置
        player.setMute(true)//静音
        player.setPlaybackRate(setting.videoPlaybackRate);
        player.setCurrentQuality(setting.videoQuality);
        //播放回调
        player.on("playlistComplete", () => {
            console.log("视频播放完成\n");
            delayExec(commentHandler(current));
        });
    }
    /**
     * PPT类别处理
     */
    function pptHandler(current) {
        //等待2秒后执行,避免不正常操作加载时间
        //延迟提交评论
        delayExec(commentHandler(current));
    }
    /**
     * 提取当前页内容
     */
    function exactProblem() {
        const arr = $(".e-q-body");
        let text = "";

        for (let x = 0; x < arr.length; x++)
            text += arr[x].innerText;
        $("#_content").val(text);

    }
    /**
     * 提取题目
     */
    function floatHandler() {
        const div = `<div style="border:#42b983 solid 2px;width: 330px; position: fixed; top: 0; right: 10px;  z-index: 99999">
                        <button id="extract_btn">提取</button>
                        <hr/>
                        <textarea id="_content" style="width: 100%;height: 300px;border: #B3C0D1 solid 2px;overflow: auto;font-size: x-small" />
                    </div>`;
        $(div).appendTo('body')
        $("#extract_btn").bind('click', () => exactProblem())
    }



    /**
    * 提交评论
    */
    function commentHandler(current) {

        if (setting.isOpenComment) {
            //评5星
            $("#star #starImg4").click();
            //随机从词库填写评论
            $("iframe#ueditor_0").contents().find("body.view")[0].innerText = setting.randomComment[rnd(0, setting.randomComment.length - 1)];
            //提交
            delayExec(() => {
                $("#btnComment").click();
                delayExec(() => {
                    $(".sgBtn.ok").click();
                    console.log("评论成功\n");
                    check(current);
                });
            });
        } else {
            check(current);
        }

    }
    /**
    * 提交讨论
    */
    function discussHandler() {
        setTimeout(() => {
            //获取上一位的评论  隔两个索引为评论  字数太少往下查找,避免太水
            let vaildComment = findVaildDiscuss();
            // //开启HTML输入模式
            // $EDITORUI["edui945"]._onClick();
            //填充评论
            $("iframe#ueditor_0").contents().find("body.view")[0].innerText = vaildComment;
            //提交
            delayExec(() => {
                $(".btn_replyTopic").click();
                console.log("讨论成功\n");
            }
            );
        }, 10000);
        /*  //返回上一页
         delayExec(() => window.history.go(-1)); */
    }

    /**
     * 简单地找出一个有效的讨论
     */
    function findVaildDiscuss() {
        let arr = $(".mc-learning-table  tbody tr div[id^='istext_']"), element;
        for (let i = 0; i < arr.length; i++) {
            element = arr[i].innerText;
            if (element.length > 10)
                return element;
        }
        return element;
    }
})();