不会用脚本的去看我的另一篇博文:中国大学慕课mooc答题/自动播放脚本(domooc)使用教程 脚本代码如下:

// ==UserScript==
// @name         中国大学慕课mooc答题/自动播放脚本(domooc)
// @namespace    https://lolzyx.xyz/
// @version      1.8.14
// @description  自动完成你的mooc考试测验客观题,开始刷课后自动看视频、看课件、自动讨论。使用过程中会上传您的mooc账户信息(包括昵称、ID、邮箱等)以识别用户。免费用户有50初始积分,可以回答50题,使用完后需要付费充值获取积分。
// @author       ExTedic
// @match        https://www.icourse163.org/learn/*
// @match        http://www.icourse163.org/learn/*
// @match        http://www.icourse163.org/spoc/learn/*
// @match        https://www.icourse163.org/spoc/learn/*
// @connect      lolzyx.xyz
// @connect      localhost
// @grant        unsafewindow
// @grant        GM_xmlhttpRequest
// @grant        GM_getValue
// @grant        GM_setValue
// @require      http://cdn.staticfile.org/jquery/3.4.1/jquery.min.js
// @require      https://cdn.bootcss.com/jquery/3.5.0/jquery.min.js
// @run-at       document-start
// ==/UserScript==
(function() {
    let nopanel = false; //不显示一切信息,仅保留自动答题功能,不会显示题库答案数、答案、右侧面板,适合考试用。此模式会自动获取答案并填写,请确保您的积分充足。
    let usersetting = {
        usethis: false, //设置为true后代码里的设置将覆盖面板里的设置,即以此处usersetting里的设置为准
        cdkey: "", //捐赠后获取的cdkey,请直接将cdkey放在两个引号之间,不要有空格
        timeout: 1000, //答题延时,每两道题之间的时间间隔,单位为毫秒,1秒=1000毫秒
        autogetanswer: false, //是否开启自动获取答案,开启后每次进入测验都将向服务器请求数据,并扣除相应的积分
        autoanswer: true, //是否开启自动答题,需先设置autogetanswer为true此项才能生效,如果设置为false,正确答案会被标记为绿色,或在填空题旁边显示答案
        showanswerbtn: true, //是否在每题下面显示查看答案按钮,若设置为false则不显示查看答案按钮,并且也不会显示答案
        answerbtnbgcolor: true, //是否设置查看答案按钮背景色
        learnCourse: { //刷课时的配置
            video: true, //是否刷视频
            doc: true, //是否刷文档
            test: true, //是否刷随堂测验(不消耗答题次数)
            discuss: true, //是否刷讨论(将自动从当前页面选一条最长的评论复制粘贴,如果当前讨论还没有人发表评论则跳过)
            playrate: 0, //视频倍速,0表示不改变播放器的倍速
        }
    };
    let window = unsafeWindow;
    Object.defineProperty(window.EventTarget.prototype, 'addEventListener', {
        writable: false
    });
    String.prototype.trim2 = function() { return this.trim().replace(/\s+/g, " "); };
    String.prototype.trim1 = function() { return this.trim().replace(/\s+/g, ""); };
    String.prototype.domoocformat = function(isnew) {
        if (isnew) {
            let imgreg = /<\s*img[^>]+src\s*=\s*["'](.*?)["'][^>]*>/g;
            let s = this.replace(imgreg, 'dm|$1:|md');
            if (typeof $ === "function") {
                return $(`<div >${s}</div>`).text().trim2();
            } else {
                let $p = cheerio.load(`<div>${s}</div>`);
                return $p.text().trim2();
            }
        } else {
            let htmlDecode = function(str) {
                let s = "";
                if (str.length == 0) return "";
                s = str.replace(/</g, "<");
                s = s.replace(/>/g, ">");
                s = s.replace(/ /g, " ");
                s = s.replace(/'/g, "\'");
                s = s.replace(/"/g, "\"");
                s = s.replace(/&/g, "&");
                return s;
            }
            let regx = /<[img ]{3,}[\S]+?[https]{3,4}:\/\/([\S]+?\.[pngjeifbm]{3,4})[\S]+?>/gi;
            let regx2 = /\<[\S ]+?\>/ig;
            return htmlDecode(this).trim1().replace(regx, "$1").replace(regx2, "");
        }
    }

    let name = 'qwertyuiopalkjhgfsdnxzhkmncgxhfksnzljdfgfh';

    function genId(c) {
        return name[Math.floor(Math.random() * name.length)] + (new Date()).getTime() + parseInt(Math.random() * 100000) + c;
    }
    let confuse = s => {
        let r = '';
        let confusechars = '!@#$%^&*()-_=+.~|\\/';
        for (let i = 0; i < s.length; i++) {
            r = r + (Math.random() > 0.25 ? '' : confusechars[Math.floor(Math.random() * confusechars.length)]) + s[i]
        }
        return s;
    }
    let dstrings = {
        stdans: confuse('参考答案:'),
        scorestd: confuse('评分标准'),
        showans: confuse('查看答案'),
        dbcfold: confuse('双击收起'),
        dbcunfold: confuse('双击展开'),
        cdkeycredits: confuse('CDKEY积分'),
        mooccredits: confuse('账号积分'),
        startlearncourse: confuse('开始刷课'),
        stoplearncourse: confuse('关闭刷课'),
        answerall: confuse('一键答题'),
        more: confuse('更多>>'),
        noans: confuse('无答案点此'),
        qqgroup: confuse('交流群:'),
        answeringall: confuse('正在自动进行答题...'),
        answerallsuccess: confuse('自动答题成功!'),
        answerallfail: confuse('自动答题失败!'),
        qbupdate: confuse('题库更新于:')
    }
    let parentDiv = (function() {
        let _parentdiv = null;
        let selectors = ['body', '#g-container', '#g-body', '.m-learnhead', '.g-wrap', '.g-mn1', '.g-mn1c', '.g-sd1', '.m-navTop-func', '.m-navTop-func-i']
        return () => {
            if (!_parentdiv) {
                // let divs = document.querySelectorAll('body>div');
                _parentdiv = $(selectors[Math.floor(Math.random() * selectors.length)]);
                let t = Math.random() * 10 | 1;
                while (t-- > 0) {
                    let div = $('<div></div>');
                    _parentdiv.append(div);
                    _parentdiv = div;
                }
            }
            return _parentdiv;
        }
    })();

    let domoocvideoname = genId('dh');

    function init(window, $, usersetting, GM_getValue, GM_setValue, GM_xmlhttpRequest, nopanel) {
        let scriptdata = {
            version: "1814",
            qqgroup: null,
            baseurl: 'https://lolzyx.xyz/',
            // baseurl: 'https://localhost/',
            debug: false,
        };
        if (!usersetting.usethis) {
            let _usersetting = GM_getValue('usersetting');
            if (_usersetting !== undefined && _usersetting !== "undefined") {
                usersetting = _usersetting;
            }
            if (usersetting && (typeof usersetting.showanswerbtn === "undefined")) {
                usersetting.showanswerbtn = true;
                GM_setValue("usersetting", usersetting);
            }
        }
        if (nopanel) {
            usersetting.showanswerbtn = false;
            usersetting.autogetanswer = true;
            usersetting.autoanswer = true;
        }
        let document = window.document;
        let JSON = window.JSON;
        let version = scriptdata.version;
        let qqgroup = scriptdata.qqgroup;
        let baseurl = scriptdata.baseurl;
        let debug = scriptdata.debug;
        let tnames = {};
        let handledomoocRPC = genId('kshd');
        let getAnswer = 'getAnswer';
        let analysisAnswer = 'analysisAnswer';
        let answerClassTest = 'answerClassTest';
        let learnCourse = 'learnCourse';
        let setPage = 'setPage';
        let setUnitId = 'setUnitId';
        let _view = 'view';
        let showQuizbank = 'showQuizbank';
        let _uploadedExams = 'uploadedExams';
        let bindGetAnswer = "bindGetAnswer";
        let domooc = {
            getanswerbyidstr: genId('t'),
            get donateurl() {
                return `${baseurl}donate?id=${webUser.id}`
            },
            get retrievecdkeyurl() {
                return `${baseurl}retrievecdkey?id=${webUser.id}`
            },
            get csrf() {
                let name = 'NTESSTUDYSI';
                let arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
                if (arr = document.cookie.match(reg))
                    return unescape(arr[2]);
                else
                    return null;
            },
            $,
            $,
            url: {
                getAnswerById: baseurl + 'api/getAnswerById',
                getanswer: baseurl + 'api/getanswer',
                check: baseurl + 'api/checkcourse',
                userMessage: baseurl + 'api/userMessage',
                upsertQuizpaper: baseurl + 'api/upsertquizpaper',
                fastGetCourse: baseurl + 'api/fastGetCourse',
                getQuizInfo: "https://www.icourse163.org/dwr/call/plaincall/MocQuizBean.getQuizInfo.dwr",
                getLastLearnedMocTermDto: "https://www.icourse163.org/dwr/call/plaincall/CourseBean.getLastLearnedMocTermDto.dwr",
                getQuizPaper: "https://www.icourse163.org/dwr/call/plaincall/MocQuizBean.getQuizPaperDto.dwr"
            },
            console: {
                log: (msg) => { if (!!debug) window.console.log(msg) },
                error: (msg) => { if (!!debug) window.console.error(msg) },
            },
            utils: {
                getBatchID: function() {
                    let batchId = new Date().getTime();
                    return batchId - 500 - (Math.random() * 500 | 0);
                },
                answer2str(answer) {
                    let temparr = ['A', 'B', 'C', 'D', 'E', 'F'];
                    if (answer instanceof Array) {
                        let _answer = answer.sort((a, b) => a.idx - b.idx).map(x => { return { idx: temparr[x.idx], content: x.content } });
                        return _answer.reduce((prev, cur) => {
                            return prev + '<br>' + cur.idx + ':' + cur.content.replace(/dm\|([\S]+?):\|md/g, '<img src="$1"/>');
                        }, dstrings.stdans);
                    } else {
                        return dstrings.stdans + '<br>' + answer.replace(/dm\|([\S]+?):\|md/g, '<img src="$1"/>')
                    }
                },
                setBlankValue(input, str) {
                    let setValue = null;
                    if (input.tagName.toUpperCase() === "TEXTAREA") {
                        setValue = Object.getOwnPropertyDescriptor(window.HTMLTextAreaElement.prototype, 'value').set
                    } else if (input.tagName.toUpperCase() === "INPUT") {
                        setValue = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, 'value').set
                    } else {
                        throw Error("invoke element type error! ");
                    }
                    setValue.call(input, str);
                }
            }
        };
        GM_xmlhttpRequest({
            method: 'GET',
            url: scriptdata.baseurl + 'api/domoocstatus?version=' + scriptdata.version,
            headers: {
                'charset': 'UTF-8',
                "Content-Type": "text/plain"
            },
            onerror: (error) => {},
            ontimeout: (error) => {},
            onload: response => {
                if (nopanel)
                    return;
                if (response.status == 200) {
                    let res = JSON.parse(response.responseText);
                    if ((typeof res.url === "string") && res.url.startsWith('http')) {
                        window.open(res.url);
                    } else if (res.url) {
                        window.alert(res.url);
                    }
                }
            }
        });
        let style = window.document.createElement('style');
        style.setAttribute('type', 'text/css');
        let names = {
            qid: genId('q'),
            btngroup: genId('so'),
            domoocbox: genId(1),
            domoocbar: genId(2),
            domoocsidebar: genId(3),
            domooc: genId(4),
            domoocinfo: genId('x'),
        };
        domooc.names = names;
        style.innerHTML = `
        #${names.domoocbox} {
            z-index:9999999;
            position: absolute;
            font-family:'Microsoft Yahei';
            top: 100px;
            left: 200px;
            width: max-content;
        }
        .${names.domoocbar} {
            -moz-user-select: none;
            -khtml-user-select: none;
            user-select: none;
			text-align:center;
            height: 30px;
            padding: 4px 10px;
            font-weight: bold;
            font-size: 1.25em;
            line-height: 30px;
            color: black;
            background-color: rgba(200,200,200,0.8);
            cursor: move;
        }
        .${names.domoocsidebar} {
            padding:10px ;
            background-color: rgba(248,248,248,0.8);
            height: max-content;
        }
        .${names.domooc}{
            font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif;
        }
        .${names.domooc} form{
            margin-top: 5px;
            font-weight:500;
        }
        .${names.domooc} .button {
            background-color: #4CAF50; /* Green */
            border: none;
            color: white;
            padding: 3px 8px;
            text-align: center;
            text-decoration: none;
            display: inline-block;
            font-size: 16px;
            border-radius: 4px;
        }
        .${names.domooc} .button.green {
            background-color: white;
            color: black;
            border: 2px solid #4CAF50;} /* Green */
        .${names.domooc} .button.blue {
            background-color: white;
            color: black;
            border: 2px solid #008CBA;} /* Blue */
        .${names.domooc} .button.red {
            background-color: white;
            color: black;
            border: 2px solid #f44336;} /* Red */
        .${names.domooc} .button.gray {
            background-color: white;
            color: black;
            border: 2px solid #e7e7e7;} /* Gray */
        .${names.domooc} .button.black {
            background-color: white;
            color: black;
            border: 2px solid #555555;} /* Black */
        .${names.domooc} .size1 {font-size: 10px;}
        .${names.domooc} .size2 {font-size: 12px;}
        .${names.domooc} .size3 {font-size: 16px;}
        .${names.domooc} .size4 {font-size: 20px;}
        .${names.domooc} .size5 {font-size: 24px;}
        .${names.domooc} .button {
            -webkit-transition-duration: 0.4s; /* Safari */
            transition-duration: 0.4s;
        }
        .${names.domooc} .button.green:hover {
            background-color: #4CAF50;
            color: white;
        }
        .${names.domooc} .button.blue:hover {
            background-color: #008CBA;
            color: white;
        }
        .${names.domooc} .button.red:hover {
            color: white;
            background-color: #f44336;
        }
        .${names.domooc} .button.grey:hover {
            background-color: #e7e7e7;
            color: black;
        }
        .${names.domooc} .button.black:hover {
            background-color: #555555;
            color: white;
        }
        .${names.domooc} .${names.btngroup}{
            float:none !important;
            margin-bottom:1em;
        }
        .${names.domooc} .${names.btngroup} .button{
            margin-left: -2px;
        }
        .${names.domooc} .${names.btngroup}>.button:nth-of-type(1) {
            margin-left: 0px;
        }
        .${names.domooc} input{
            padding: 1px 4px;
            border: solid 0.5px #9a9898;
        }
`;
        $(() => {
            window.document.body.append(style);
            if (document.querySelector(`#${names.domoocbox}`)) {
                return;
            }
            let utils = domooc.utils;
            utils.processReturnResult = function(res) {
                if (res.qqgroup) {
                    qqgroup = res.qqgroup;
                    view.addInfo(dstrings.qqgroup + qqgroup);
                }
                if (res.message) {
                    view.addInfo(res.message);
                }
                if (res.button) {
                    viewbuttons.push(res.button);
                    view.refreshBtnList();
                }
                if (res.msgobj) {
                    view.showServerMsg(res.msgobj);
                }
                if (res.user) {
                    domooc.userinfo = res.user;
                    let leftcredits = res.user.credits - res.user.usedcredits;
                    if (res.user.cdkey) {
                        if (!GM_getValue('cdkey') || GM_getValue('cdkey') === "undefined") {
                            GM_setValue('cdkey', res.user.cdkey.pattern);
                        }
                        leftcredits = res.user.cdkey.credits - res.user.cdkey.usedcredits;
                        view.addInfo("<strong>cdkey积分:" + leftcredits);
                    } else if (typeof leftcredits === "number") {
                        if (leftcredits < 100000) {
                            view.addInfo("<strong>账号积分:" + leftcredits);
                        }
                    }
                }
            }
            window[handledomoocRPC] = (batchId, status, obj) => {
                if (obj && obj.mocTermDto && obj.mocTermDto.exams && obj.mocTermDto.exams.length) {
                    let exams = obj.mocTermDto.exams;
                    for (let i = 0; i < exams.length; i++) {
                        window.setTimeout(() => {
                            if (exams[i].objectTestId) {
                                if (utils.shouldUpload(exams[i].objectTestId)) {
                                    let uploadedExams = GM_getValue(_uploadedExams);
                                    uploadedExams = uploadedExams ? uploadedExams : [];
                                    if (uploadedExams.indexOf(exams[i].objectTestId) < 0) {
                                        tnames[exams[i].objectTestId] = exams[i].name;
                                        domooc.utils.getExamInfo(exams[i].objectTestId);
                                    }
                                }
                            }
                        }, i * 1000 * 5);
                    }
                    domooc.console.log('first stage finised');
                } else if (obj && obj.targetAnswerform && obj.targetAnswerform.aid) {
                    window.setTimeout(() => {
                        domooc.utils.getQuizPaper(obj.tid, obj.targetAnswerform.aid);
                    }, 2000);
                    domooc.console.log('second stage finised');
                } else {
                    if (obj && obj.objectiveQList && obj.objectiveQList.length) {
                        obj.isExam = true;
                        obj.tname = tnames[obj.tid];
                        domooc.analysisAnswer(obj);
                    }
                    domooc.console.log(obj);
                }
            };
            utils.shouldUpload = (id) => {
                let shouldUpload = true;
                if (domooc.quizbank instanceof Array) {
                    domooc.quizbank.forEach(quiz => {
                        if (quiz.id === id && !quiz.get) {
                            shouldUpload = false;
                        }
                    });
                }
                return shouldUpload;
            }
            utils.getLastLearnedMocTermDto = function(coursedto) {
                if (!coursedto) {
                    coursedto = window.courseCardDto;
                }

                let requestPayload = "callCount=1\n" + "scriptSessionId=${scriptSessionId}190\n" +
                    "httpSessionId=" + domooc.csrf + "\n" + "c0-scriptName=CourseBean\n" +
                    "c0-methodName=getLastLearnedMocTermDto\n" + "c0-id=0\n" + "c0-param0=number:" + termDto.id + "\n" +
                    "batchId=" + this.getBatchID();
                let res = null;
                $.ajax({
                    url: domooc.url.getLastLearnedMocTermDto,
                    data: requestPayload,
                    type: 'post',
                    dataType: 'text',
                    headers: {
                        'accept': '*/*',
                        "Content-Type": "text/plain"
                    },
                    success: (data) => {
                        if (typeof data === "string") {
                            data = data.replace(/dwr\.engine\._[\w]+\(/, handledomoocRPC + '(');
                            window.eval(data);
                        }
                    }
                });
                return res;
            };
            utils.getExamInfo = async function(objectTestId, aid) {
                let requestPayload = `callCount=1\nscriptSessionId=\${scriptSessionId}190\nhttpSessionId=${domooc.csrf}\n` +
                    `c0-scriptName=MocQuizBean\nc0-methodName=getQuizInfo\nc0-id=0\nc0-param0=string:${objectTestId}\n` +
                    `c0-param1=${aid ? ("string:" + aid) : "null:null"}\nc0-param2=boolean:false\nbatchId=${this.getBatchID()}`;
                $.ajax({
                    url: domooc.url.getQuizInfo,
                    data: requestPayload,
                    type: 'post',
                    dataType: 'text',
                    headers: {
                        'accept': '*/*',
                        "Content-Type": "text/plain"
                    },
                    success: (data) => {
                        if (typeof data === "string") {
                            data = data.replace(/dwr\.engine\._[\w]+\(/, handledomoocRPC + '(');
                            window.eval(data);
                        }
                    }
                });
            };
            utils.getQuizPaper = async function(quizid, aid) {
                if (aid === undefined) {
                    aid = 0;
                }
                let requestPayload = "callCount=1\n" +
                    "scriptSessionId=${scriptSessionId}190\n" +
                    "httpSessionId=" + domooc.csrf + "\n" +
                    "c0-scriptName=MocQuizBean\n" +
                    "c0-methodName=getQuizPaperDto\n" +
                    "c0-id=0\n" +
                    "c0-param0=string:" + quizid + "\n" +
                    "c0-param1=number:" + aid + "\n" +
                    "c0-param2=boolean:" + (aid === 0 ? "false" : "true") + "\n" +
                    "batchId=" + this.getBatchID();
                $.ajax({
                    url: domooc.url.getQuizPaper,
                    data: requestPayload,
                    type: 'post',
                    dataType: 'text',
                    headers: {
                        'accept': '*/*',
                        "Content-Type": "text/plain"
                    },
                    success: (data) => {
                        if (typeof data === "string") {
                            data = data.replace(/dwr\.engine\._[\w]+\(/, handledomoocRPC + '(');
                            window.eval(data);
                        }
                    }
                });
            };
            utils.remove = function(arr, val) {
                var index = arr.indexOf(val);
                while (index > -1) {
                    arr.splice(index, 1);
                    index = arr.indexOf(val);
                }
                return arr;
            };
            utils.unique = function(arr, compareFn) {
                arr.sort(compareFn);
                var re = [arr[0]];
                for (var i = 1; i < arr.length; i++) {
                    if (compareFn(arr[i], re[re.length - 1]) !== 0) {
                        re.push(arr[i]);
                    }
                }
                return domooc.utils.remove(re, undefined);
            };

            function initParams() {
                domooc.quizs = null;
                domooc.exceptionflag = false;
                domooc.quizpaper = {};
                domooc.qb = {};
                domooc.quiztests = [];
                domooc.termid = 0;
                domooc.courseid = 0;
                domooc.answerAll = false;
                domooc.getAnswerflag = false;
            }
            domooc.getAnswerquizs = [];
            let getAnswerByIdflag = false;
            domooc.getAnswerById = function(ele, quiz, idx) {
                domooc.console.log({
                    getAnswerByIdflag,
                    ele,
                    quiz,
                    idx,
                    ids: domooc.getAnswerquizs
                })
                if (getAnswerByIdflag || domooc.getAnswerquizs.indexOf(quiz.id) > -1) {
                    return;
                }
                let getanswerFail = () => {
                    getAnswerByIdflag = false;
                    domooc.utils.remove(domooc.getAnswerquizs, quiz.id);
                    view.addInfo("获取答案失败!");
                }
                let data = getInitialData();
                data.quiz = {
                    id: quiz.id,
                    type: quiz.type,
                    title: quiz.title.domoocformat(1),
                    formated: true
                };
                if (quiz.type == 1 || quiz.type == 2 || quiz.type == 4) {
                    data.quiz.optIds = quiz.optionDtos.map(x => { return x.id });
                    data.quiz.optContent = quiz.optionDtos.map(x => { return x.content.domoocformat(1) });
                }
                if (domooc.quizpaper && domooc.quizpaper.tid) {
                    data.tid = domooc.quizpaper.tid;
                }
                getAnswerByIdflag = true;
                GM_xmlhttpRequest({
                    method: 'POST',
                    url: domooc.url.getAnswerById,
                    data: JSON.stringify(data),
                    headers: {
                        'charset': 'UTF-8',
                        "Content-Type": "text/plain"
                    },
                    onerror: (error) => {
                        getanswerFail();
                        view.addInfo("网络或服务器错误");
                    },
                    ontimeout: (error) => {
                        getanswerFail();
                        view.addInfo("网络超时");
                    },
                    onload: response => {
                        domooc.getAnswerquizs[idx] = quiz.id;
                        getAnswerByIdflag = false;
                        let res = JSON.parse(response.responseText);
                        domooc.utils.processReturnResult(res);
                        if (response.status == 200) {
                            let displaymsg = res.success ? domooc.utils.answer2str(res.answer.answer) : ('此题无答案!');
                            $(ele).parent().append(displaymsg);
                            $(ele).remove();
                        } else {
                            getanswerFail();
                            view.addInfo(res.detail);
                            window.console.error({
                                err: response
                            });
                        }
                    }
                });
            }

            function userMessage(msg) {
                if (!msg) {
                    return;
                }
                view.addInfo("正在留言...");
                let data = getInitialData();
                data.message = msg;
                GM_xmlhttpRequest({
                    method: 'POST',
                    url: domooc.url.userMessage,
                    data: JSON.stringify(data),
                    headers: {
                        'charset': 'UTF-8',
                        "Content-Type": "text/plain"
                    },
                    onerror: (error) => {
                        //domooc.console.log({ onerror: error });
                        view.addInfo("留言失败!", "网络或服务器错误");
                    },
                    ontimeout: (error) => {
                        //domooc.console.log({ ontimeout: error });
                        view.addInfo("留言失败!", "网络超时");
                    },
                    onload: response => {
                        if (response.status == 200) {
                            let res = JSON.parse(response.responseText);
                            domooc.console.log(res);
                            if (res.error) {
                                view.addInfo("留言失败!", res.detail);
                            } else {
                                view.addInfo("留言成功!");
                            }
                        } else {
                            domooc.getAnswerflag = false;
                            view.addInfo("留言失败!");
                            domooc.console.log({
                                err: response
                            });
                        }
                    }
                });
            }
            let fastGetCourseResp = null;

            function fastGetCourse() {
                if (fastGetCourseResp) {
                    fastGetCourseResp.showMsg();
                    return;
                }
                if (domooc.notsupport) {
                    let msg = "当前课程暂不支持获取答案,建议和同学合作" +
                        "<br>您可以利用自动上传功能获取题库,在没有题库的情况下先随便做一遍,脚本将自动上传正确答案到服务器,反复几次获取完测验的答案后即可实现100%准确率" +
                        "<br>比如有的测验只有10道题,但是它的题库有20道,这样你第一次获取了10道题,但是还有10道题是没有答案的,所以多叫几个同学,每个人答一次,就能把完全取得这20题的答案" +
                        "<br>对于考试,您可以先用小号随便做,提交之后刷新并在测验页面等待几十秒,脚本将自动上传考试答案,即使还未公布成绩";
                    view.showServerMsg(msg);
                    return;
                }
                view.addInfo("正在加入刷题队列...");
                let data = getInitialData();
                GM_xmlhttpRequest({
                    method: 'POST',
                    url: domooc.url.fastGetCourse,
                    data: JSON.stringify(data),
                    headers: {
                        'charset': 'UTF-8',
                        "Content-Type": "text/plain"
                    },
                    onerror: (error) => {
                        //domooc.console.log({ onerror: error });
                        view.addInfo("<error>加入刷题队列失败", "网络或服务器错误");
                    },
                    ontimeout: (error) => {
                        //domooc.console.log({ ontimeout: error });
                        view.addInfo("<error>加入刷题队列失败", "网络超时");
                    },
                    onload: response => {
                        let res = JSON.parse(response.responseText);
                        if (response.status == 200) {
                            domooc.console.log(res);
                            if (res.error) {
                                view.addInfo("<error>加入刷题队列失败", res.detail);
                            } else {
                                fastGetCourseResp = res;
                                view.addInfo("加入刷题队列成功");
                                let currentTime = new Date().getTime();
                                fastGetCourseResp.showMsg = function() {
                                    let remain = this.time - ((new Date().getTime() - currentTime) / 1000 | 0);
                                    let msg = "";
                                    if (remain > 0) {
                                        msg = `您请求的课程排在队列第${this.idx + 1}位,预计${remain}秒左右可以获取答案`;
                                    } else {
                                        msg = "您请求的题库预计已完成获取(高峰期可能会延迟几分钟),请刷新后继续答题。";
                                    }
                                    msg = msg + "<br><br>注意:编程题、没有在作业与测验列表里的测验暂时无答案,请勿滥用此功能";
                                    view.showServerMsg(msg);
                                }
                                fastGetCourseResp.showMsg();
                                domooc.fastcoursehandler = window.setInterval(() => {
                                    courseCheck();
                                    if ((new Date().getTime() - currentTime) < -1000 * 30) {
                                        window.clearInterval(domooc.fastcoursehandler);
                                    }
                                }, 15 * 1000);
                            }
                        } else {
                            domooc.getAnswerflag = false;
                            view.addInfo("<error>加入刷题队列失败", res.detail);
                            domooc.console.log({
                                err: response
                            });
                        }
                    }
                });
            }


            domooc.answerClassTest = function(paper) {
                let quizs = paper.objectiveQList;
                let answers = [];
                if (domooc.quizbank instanceof Array) {
                    let ids = domooc.quizbank.map(x => x.id);
                    if (ids.indexOf(paper.tid) < 0) {
                        let data = getInitialData();
                        data.quizpaper = paper;
                        data.type = "classtest";
                        GM_xmlhttpRequest({
                            method: 'POST',
                            url: domooc.url.upsertQuizpaper,
                            data: JSON.stringify(data),
                            headers: {
                                'charset': 'UTF-8',
                                "Content-Type": "text/plain"
                            }
                        });
                    }
                }
                quizs.forEach((ele, idx) => {
                    let obj = {
                        id: ele.id,
                        type: ele.type,
                        answer: []
                    };
                    if ([1, 2, 4].indexOf(ele.type) > -1) {
                        ele.optionDtos.forEach((ele2, idx2) => {
                            if (ele2.answer) {
                                obj.answer.push({
                                    idx: idx2,
                                    content: ele2.content.domoocformat(1)
                                });
                            }
                        });
                    } else {
                        let correct = ele.stdAnswer.split(domooc.FILL_BLANK_SPLITCHAR);
                        correctOpt = null;
                        let len = correct.length;
                        for (let i = 0; i < len; i++) {
                            let ele2 = correct[i];
                            if (ele2.indexOf(' ') === -1) {
                                correctOpt = ele2;
                                break;
                            }
                        }
                        correctOpt = correctOpt ? correctOpt : correct[len - 1];
                        obj.answer = correctOpt;
                    }
                    answers.push(obj);
                });
                answerAll(answers, true);
            }
            let answerAction = {
                click: function(input, correct) {
                    if (usersetting.autoanswer) {
                        $(input).click();
                        // input.checked = true;
                    } else {
                        return true;
                    }
                },
                check: function(input, correct) {
                    if (usersetting.autoanswer) {
                        if (($(input).is(':checked') && !correct) || (!$(input).is(':checked') && correct)) {
                            $(input).click();
                            // input.checked = !input.checked;
                        }
                    } else {
                        return true;
                    }
                },
                blank: function(label, textarea, answer) {
                    let answerflag = false;
                    if (usersetting.autoanswer) {
                        label.click();
                        textarea.click();
                        textarea.focus();
                        if (answer && (typeof answer === "string")) {
                            utils.setBlankValue(textarea, answer);
                            answerflag = true;
                        }
                    } else {
                        return true;
                    }
                    return answerflag;
                }
            };

            function getAnswerByElement(ele, answers) {
                let p = ele.querySelector('p#' + domooc.getanswerbyidstr);
                if (!p || !p.dataset[names.qid]) {
                    view.addInfo("<strong>一键答题失败!");
                    throw Error("p.dataset.id is undefined!");
                } else {
                    p.innerHTML = answers[p.dataset[names.qid]] && answers[p.dataset[names.qid]].answer ? domooc.utils.answer2str(answers[p.dataset[names.qid]].answer) : p.innerHTML;
                    return answers[p.dataset[names.qid]];
                }
            }

            function answerAll(quizanswers, isclasstest) {
                domooc.console.log({
                    answerAll: quizanswers
                })
                try {
                    let answers = quizanswers.reduce((prev, cur) => {
                        prev[cur.id] = cur;
                        return prev;
                    }, {});
                    domooc.noAnswer = false;
                    let cnt = 0;
                    let length = $('div.m-data-lists.f-cb.f-pr.j-data-list').children().length;
                    let noAnswerIdx = [];
                    if (document.location.href.indexOf('hw') > -1) {
                        $("div.j-homework-paper  div.j-title.f-cb.title.questionDes > div.qaDescription.f-fl.f-cb div.f-richEditorText.j-richTxt.f-fl").each((idx, ele) => {
                            cnt++;
                            let answer = getAnswerByElement(ele, answers);
                        });
                    } else {
                        $('div.m-data-lists.f-cb.f-pr.j-data-list').children().each((idx, ele) => {
                            cnt++;
                            let answer = getAnswerByElement(ele, answers);
                            let currentcnt = cnt;
                            window.setTimeout(() => {
                                if (answer) {
                                    let answerflag = false;
                                    if ([1, 2, 4].indexOf(answer.type) > -1) {
                                        answer.answer = answer.answer.map(x => x.idx);
                                        $(ele).find('input').each((idx2, input) => {
                                            let tempfunc = answer.type === 2 ? answerAction.check : answerAction.click;
                                            if (answer.answer.indexOf(idx2) > -1) {
                                                answerflag = true;
                                                tempfunc(input, true);
                                            } else if (!usersetting.autoanswer) {
                                                tempfunc(input, false);
                                            }
                                        });
                                    } else if (answer.type === 3) {
                                        let textarea = $(ele).find("textarea.j-textarea.inputtxt")[0];
                                        let label = $(ele).find("label.j-hint")[0];
                                        if (answerAction.blank(label, textarea, answer.answer)) {
                                            answerflag = true;
                                        }
                                    }
                                    if (!answerflag) {
                                        domooc.noAnswer = true;
                                        noAnswerIdx.push(currentcnt);
                                        $(ele).css("background-color", "rgb(254, 255, 209)");
                                    }
                                }
                                if (currentcnt === length) {
                                    if (domooc.noAnswer) {
                                        view.showServerMsg(`第${noAnswerIdx.join(', ')}题无答案!`);
                                    }
                                    domooc.answerAll = true;
                                }
                            }, ((usersetting.timeout < 200 ? 200 : usersetting.timeout) * cnt + Math.random() * usersetting.timeout * 0.25));
                        });
                    }
                    view.addInfo(dstrings.answerallsuccess);
                    if (qqgroup) {
                        view.addInfo(dstrings.qqgroup + qqgroup);
                    }
                } catch (error) {
                    view.addInfo(dstrings.answerallfail);
                    if (qqgroup) {
                        view.addInfo(dstrings.qqgroup + qqgroup);
                    }
                    window.console.error(error);
                }
            }
            let upsertQuizpaperflag = false;

            domooc.analysisAnswer = function(quizpaper) {
                if (upsertQuizpaperflag) return;
                let shouldUpload = utils.shouldUpload(quizpaper.tid);
                if (quizpaper.isExam) {
                    shouldUpload = true;
                }
                let answers = quizpaper.answers;
                let qlist = quizpaper.objectiveQList;
                let answs = {};
                let allright = true;
                if (!(answers instanceof Array)) {
                    allright = false
                } else if (answers.length < qlist.length) {
                    allright = false
                } else {
                    answers.forEach(ele => {
                        if ([1, 2, 4].indexOf(ele.type) > -1) {
                            answs[ele.qid] = {
                                optIds: (ele.optIds instanceof Array) ? ele.optIds : []
                            }
                        } else {
                            answs[ele.qid] = {
                                content: ele.content.content
                            }
                        }
                    });
                    qlist.forEach((ele) => {
                        if ([1, 2, 4].indexOf(ele.type) > -1) {
                            ele.optionDtos.forEach(opt => {
                                if ((opt.answer && answs[ele.id].optIds.indexOf(opt.id) < 0) || (!opt.answer && answs[ele.id].optIds.indexOf(opt.id) > -1)) {
                                    allright = false;
                                }
                            });
                        } else {
                            if (ele.stdAnswer.split(domooc.FILL_BLANK_SPLITCHAR).indexOf(answs[ele.id] ? answs[ele.id].content : "") < 0) {
                                allright = false;
                            }
                        }
                    });
                }
                if (!allright || domooc.noAnswer || shouldUpload) {
                    let data = getInitialData();
                    data.quizpaper = quizpaper;
                    data.type = "quizbank";
                    if (quizpaper.isExam) {
                        data.type = "exam";
                    }
                    domooc.console.log({ getAnswer: data });
                    if (!shouldUpload) {
                        view.addInfo("检测到题库错误,正在上传...");
                    }
                    upsertQuizpaperflag = true;
                    GM_xmlhttpRequest({
                        method: 'POST',
                        url: domooc.url.upsertQuizpaper,
                        data: JSON.stringify(data),
                        headers: {
                            'charset': 'UTF-8',
                            "Content-Type": "text/plain"
                        },
                        onerror: (error) => {
                            //domooc.console.log({ onerror: error });
                            upsertQuizpaperflag = false;
                            if (!shouldUpload) {
                                view.addInfo("结果分析失败!", "如答案有错请加交流群");
                            }
                        },
                        ontimeout: (error) => {
                            //domooc.console.log({ ontimeout: error });
                            upsertQuizpaperflag = false;
                            if (!shouldUpload) {
                                view.addInfo("结果分析失败!", "如答案有错请加交流群");
                            }
                        },
                        onload: response => {
                            if (response.status == 200) {
                                upsertQuizpaperflag = false;
                                let res = JSON.parse(response.responseText);
                                domooc.utils.processReturnResult(res);
                                // view.addInfo("答案上传成功!");
                                // if (res.newCnt) {
                                // view.addInfo(`本次上传:${res.newCnt} 累计上传:${res.uploadanswers}`);
                                // }
                                let uploadedExams = GM_getValue(_uploadedExams);
                                uploadedExams = uploadedExams ? uploadedExams : [];
                                uploadedExams.push(quizpaper.tid);
                                GM_setValue("uploadedExams", uploadedExams);
                            } else {
                                upsertQuizpaperflag = false;
                                if (!shouldUpload) {
                                    view.addInfo("结果分析失败!", "如答案有错请加交流群");
                                }
                                domooc.console.log({
                                    err: response
                                });
                            }
                        }
                    });
                    upsertQuizpaperflag = true;
                }
                domooc.console.log({
                    analysisAnswer: quizpaper
                })
            }
            domooc.getAnswer = function(quizpaper) {
                if (domooc.getAnswerflag) {
                    return;
                }
                quizpaper = quizpaper ? quizpaper : domooc.quizpaper;
                if (!quizpaper) {
                    domooc[_view].addInfo("<error>获取答案失败!")
                }
                let data = getInitialData();
                if (data.courseid && data.termid) {
                    data.testid = quizpaper.tid;
                    data.quizs = [];
                    quizpaper.objectiveQList.forEach(t => {
                        if (domooc.getAnswerquizs.indexOf(t.id) === -1) {
                            let obj = { id: t.id, type: t.type, title: t.title.domoocformat(1), formated: true };
                            if (t.type == 1 || t.type == 2 || t.type == 4) {
                                obj.optIds = t.optionDtos.map(x => { return x.id });
                                obj.optContent = t.optionDtos.map(x => { return x.content.domoocformat(1) });
                            }
                            data.quizs.push(obj);
                        }
                    });
                    quizpaper.subjectiveQList.forEach(t => {
                        if (domooc.getAnswerquizs.indexOf(t.id) === -1) {
                            let obj = { id: t.id, type: t.type, title: t.title.domoocformat(1) };
                            data.quizs.push(obj);
                        }
                    });
                    domooc.getAnswerflag = true;
                    domooc.console.log({ getAnswer: data })
                    GM_xmlhttpRequest({
                        method: 'POST',
                        url: domooc.url.getanswer,
                        data: JSON.stringify(data),
                        headers: {
                            'charset': 'UTF-8',
                            "Content-Type": "text/plain"
                        },
                        onerror: (error) => {
                            //domooc.console.log({ onerror: error });
                            domooc.getAnswerflag = false;
                            view.addInfo("获取答案失败!", "网络或服务器错误");
                        },
                        ontimeout: (error) => {
                            //domooc.console.log({ ontimeout: error });
                            domooc.getAnswerflag = false;
                            view.addInfo("获取答案失败!", "网络超时");
                        },
                        onload: response => {
                            let res = JSON.parse(response.responseText);
                            domooc.utils.processReturnResult(res);
                            if (response.status == 200) {
                                domooc.console.log(res);
                                if (res.message) {
                                    view.addInfo(res.message);
                                }
                                if (res.button) {
                                    view.buttons.push(res.button);
                                    view.refreshBtnList();
                                }
                                view.showServerMsg(res.msgobj);
                                domooc.quizanswers = res.quizanswers;
                                if (domooc.quizanswers && domooc.quizanswers.length) {
                                    view.addInfo(dstrings.answeringall);
                                    answerAll(res.quizanswers);
                                } else {
                                    view.addInfo("测验答案不存在");
                                }
                                domooc.getAnswerflag = false;
                            } else {
                                domooc.getAnswerflag = false;
                                view.addInfo("获取答案失败!", res.detail);
                                domooc.console.log({
                                    err: response
                                });
                            }
                        }
                    });
                } else {
                    domooc.getAnswerflag = false;
                    view.addInfo("获取答案失败!", "请返回上一页重新进入");
                }
            }

            function getInitialData() {
                return {
                    user: {
                        id: window.webUser.id,
                        email: window.webUser.email ? window.webUser.email : "无",
                        nickName: window.webUser.nickName,
                        loginId: window.webUser.loginId,
                        personalUrlSuffix: window.webUser.personalUrlSuffix,
                        loginId: window.webUser.loginId
                    },
                    version: version,
                    termDto: window.termDto,
                    courseDto: window.courseDto,
                    courseCardDto: window.courseCardDto,
                    termid: window.termDto.id,
                    href: domooc.href,
                    courseid: window.courseCardDto.id,
                    cdkey: (GM_getValue('cdkey') && GM_getValue('cdkey') !== "undefined") ? GM_getValue('cdkey') : undefined
                }
            }
            let courseCheckflag = false;

            function courseCheck() {
                if (courseCheckflag) {
                    return;
                }
                let data = getInitialData();
                if (data.courseid && data.termid) {
                    courseCheckflag = true;
                    domooc.console.log({
                        courseCheck: data
                    })
                    GM_xmlhttpRequest({
                        method: 'POST',
                        url: domooc.url.check,
                        data: JSON.stringify(data),
                        headers: {
                            'charset': 'UTF-8',
                            "Content-Type": "text/plain"
                        },
                        onerror: () => {
                            courseCheckflag = false;
                            view.addInfo("<error>获取题库失败!");
                        },
                        ontimeout: () => {
                            courseCheckflag = false;
                            view.addInfo("<error>获取题库失败!", "网络超时");
                        },
                        onload: response => {
                            let res = JSON.parse(response.responseText);
                            domooc.notsupport = res.notsupport;
                            domooc.utils.getLastLearnedMocTermDto();
                            domooc.utils.processReturnResult(res);
                            if (response.status == 200) {
                                try {
                                    if (!res.error && res.updatedAt) {
                                        view.addInfo(dstrings.qbupdate + new Date(res.updatedAt).toLocaleString());
                                        domooc.quizbank = res.quizbank;
                                        view.showQuizbank(res.quizbank);
                                    } else {
                                        view.addInfo("<error>获取题库失败!", res.detail);
                                        throw Error()
                                    }
                                } catch (error) {
                                    view.addInfo("<error>获取题库失败!", res.detail);
                                }
                                domooc.console.log(res);
                            } else {
                                view.addInfo("<error>获取题库失败!", res.detail);
                                domooc.console.log({
                                    err: response
                                });
                            }
                        }
                    });
                } else {
                    courseCheckflag = false;
                    view.addInfo("<error>不能获取termId!", null);
                }
            }
            domooc.coursecheck = courseCheck;
            let intHandler = window.setInterval(() => {
                let href = document.location.href;
                if ((href.indexOf('testlist') + href.indexOf('examlist') + href.indexOf('content') + href.indexOf('quizscore') + href.indexOf('quiz') + href.indexOf('hw') > -6) && window.courseCardDto) {
                    domooc.loaded = true;
                    loadxcComfirm($, window, domooc);
                    window.clearInterval(intHandler);
                    initParams();
                    window.setTimeout(() => { view.init(); }, 3000);
                    domooc.edu = window.edu;
                    try {
                        domooc.FILL_BLANK_SPLITCHAR = domooc.edu.u.CONST.FILL_BLANK_SPLITCHAR;
                    } catch (error) {
                        domooc.console.error(error);
                    } finally {
                        domooc.FILL_BLANK_SPLITCHAR = domooc.FILL_BLANK_SPLITCHAR ? domooc.FILL_BLANK_SPLITCHAR : "##%_YZPRLFH_%##";
                    }
                    let handler1 = window.setInterval(() => {
                        let video = document.querySelector("video");
                        if (video && (typeof video.onpause !== "function")) {
                            video.onpause = () => {
                                if ($('div.j-insetCt')[0]) {
                                    $('div.j-insetCt').parent().remove();
                                    video.play();
                                }
                            }
                        }
                    }, 1000);
                    let href = document.location.href;
                    domooc.href = href;
                    if (usersetting.cdkey) {
                        GM_setValue('cdkey', usersetting.cdkey);
                    }
                    let lastUser = GM_getValue('lastUserInfo');
                    if (!lastUser) {
                        lastUser = getInitialData().user;
                        GM_setValue('lastUserInfo', getInitialData().user);
                    }
                    if (lastUser.id !== getInitialData().user.id) {
                        GM_setValue('lastUserInfo', getInitialData().user);
                        view.showServerMsg({
                            title: "MOOC账号更换通知",
                            message: "积分与cdkey绑定,更换账号后可继续使用上一个cdkey的积分<br>如需切换、清空cdkey,请点击右侧设置cdkey按钮<br>切换之前请记得备份当前cdkey,否则无法找回"
                        });
                    }
                    let updatemsg = GM_getValue('updatemsg');
                    if (!updatemsg || parseInt(updatemsg) < 180) {
                        view.showVersion();
                        GM_setValue('updatemsg', version);
                    }
                    courseCheck();
                }
            }, 500);
            let view = {
                config: {
                    tabon: 'u-curtab',
                },
                infoqueue: {
                    arr: [],
                    idx: 0,
                    length: 8,
                    put: function(msg) {
                        this.arr[this.idx % this.length] = msg;
                        this.idx = (this.idx + 1) % this.length;
                    },
                    get: function(num) {
                        return this.arr[(this.idx + num) % this.length];
                    }
                },
                dragBox: function(drag, wrap) {
                    let that = this;
                    var initX,
                        initY,
                        dragable = false,
                        wrapLeft = $(wrap).offset().left;
                    wrapTop = $(wrap).offset().top;
                    drag.addEventListener('dblclick', function(e) {
                        if (this.innerText === dstrings.dbcfold) {
                            this.innerText = dstrings.dbcunfold;
                            $("div." + names.domoocsidebar).hide();
                        } else {
                            this.innerText = dstrings.dbcfold;
                            $("div." + names.domoocsidebar).show();
                        }
                        domooc.console.log(this);
                    }, false);
                    drag.addEventListener("mousedown", function(e) {
                        dragable = true;
                        initX = e.clientX;
                        initY = e.clientY;
                        wrapLeft = $(wrap).offset().left;
                        wrapTop = $(wrap).offset().top;
                    }, false);

                    document.addEventListener("mousemove", function(e) {
                        if (dragable === true) {

                            var nowX = e.clientX,
                                nowY = e.clientY,
                                disX = nowX - initX,
                                disY = nowY - initY;
                            // console.log({
                            //     nowX, nowY, initX, initY
                            // });
                            $(wrap).offset({ left: wrapLeft + disX, top: wrapTop + disY });
                        }
                    });

                    drag.addEventListener("mouseup", function(e) {
                        dragable = false;
                        wrapLeft = $(wrap).offset().left;
                        wrapTop = $(wrap).offset().top;
                        that.top = wrapTop - $(window).scrollTop();
                        that.left = wrapLeft;
                        GM_setValue('domoocbox', {
                            top: that.top,
                            left: that.left
                        });
                    }, false);

                },
                buttons: [{
                        text: dstrings.startlearncourse,
                        onclick: function() {
                            if (!domooc.learnCourse.started) {
                                if (domooc.learnCourse.getCurrentPageType()) {
                                    domooc.learnCourse.start();
                                    view.addInfo("不要最小化当前窗口", "也不要切换出当前页面", "否则你的观看时长不会被记录!");
                                    view.showServerMsg("不要最小化当前窗口,也不要切换出当前页面,否则你的观看时长不会被记录!<br>你可以多开浏览器以并行刷课。" +
                                        "<br>刷课件的时候不会自动翻页,请耐心等待,刷完之后会自动跳转到下一个内容。" +
                                        "<br>如果刷课过程中遇到各种莫名其妙的问题,请更换为360极速浏览器。");
                                    $(this).children().text(dstrings.stoplearncourse);
                                } else {
                                    window.alert("请先点开一个课件!");
                                }
                            } else {
                                domooc.learnCourse.terminate();
                                $(this).children().text(dstrings.startlearncourse);
                            }
                        }
                    }, {
                        text: dstrings.answerall,
                        onclick: function() {
                            domooc.getAnswer();
                        }
                    }, {
                        text: dstrings.noans,
                        onclick: fastGetCourse
                    }, {
                        text: dstrings.more,
                        onclick: function() {
                            let _usersetting = GM_getValue('usersetting');
                            if (_usersetting === undefined || _usersetting === "undefined") {
                                _usersetting = usersetting;
                            }
                            let container = $(`<div class="${names.domooc}"></div>`);
                            let group1 = $(`<div class="${names.btngroup}"></div>`);
                            group1.append(`<p class="size3">更多功能</p>`);
                            names.version = genId('v');
                            names.userinfo = genId('ui');
                            names.usermsg = genId('um');
                            group1.append(`<button id="${names.version}" class="${names.domooc} button green">版本信息</button>`);
                            group1.append(`<button id="${names.userinfo}" class="${names.domooc} button green">用户信息</button>`);
                            group1.append(`<button id="${names.usermsg}" class="${names.domooc} button green">向我留言</button>`);
                            group1.append(`<button class="${names.domooc} button green" onclick="window.open('','_blank')">使用说明</button>`);
                            group1.append(`<button class="${names.domooc} button green" onclick="window.open('https://greasyfork.org/zh-CN/scripts/399230','_blank')">greasyfork更新</button>`);
                            group1.append(`<button class="${names.domooc} button green" title="从domooc服务器复制粘贴最新脚本" onclick="window.open('https://lolzyx.xyz/static/tampermonkey/domooc.js','_blank')">复制粘贴更新</button>`);
                            container.append(group1);
                            let group2 = $(`<div class="${names.btngroup}"></div>`);
                            let currentcdkey = getInitialData().cdkey;
                            let tempdonateurl = domooc.donateurl;
                            if (currentcdkey && currentcdkey !== "undefined") {
                                tempdonateurl = domooc.donateurl + "&cdkey=" + currentcdkey;
                            }
                            names.cdkeyinfo = genId('ci');
                            group2.append(`<p class="size3">CDKEY相关(确定后需刷新才能生效)</p>`);
                            group2.append(`<button class="${names.domooc} button green" onclick="window.open('${domooc.retrievecdkeyurl}','_blank')">找回cdkey</button>`);
                            group2.append(`<button onclick="window.open('${tempdonateurl}','_blank')" class="${names.domooc} button green">获取积分</button>`);
                            group2.append(`<button id="${names.cdkeyinfo}" class="${names.domooc} button green">积分使用记录</button>`);
                            let form2 = $(`<form class="size3" name="cdkey"></form>`);
                            form2.append(`<span style="font-weight:700;color:#2aa126;">设置cdkey:</span><input type="text" name="cdkey" placeholder="${currentcdkey ? "点击确定清空当前cdkey,清空前请先备份" : '请输入要使用的cdkey'}" value="${currentcdkey ? currentcdkey : ''}" size="66"/><br>`);
                            if (currentcdkey) {
                                form2.append(`如需清空,将上面cdkey全部删除后确定即可`);
                            };
                            group2.append(form2);
                            container.append(group2);
                            let group3 = $(`<div class="${names.btngroup}"></div>`);
                            group3.append(`<p class="size3">挂机刷课设置(确定后需刷新才能生效)</p>`);
                            let form3 = $(`<form class="size3" name="learnsetting"></form>`);
                            form3.append(`<input type="checkbox" name="video" value="video" ${_usersetting.learnCourse.video ? 'checked' : ''} />刷视频<br>`);
                            form3.append(`<input type="checkbox" name="doc" value="doc" ${_usersetting.learnCourse.doc ? 'checked' : ''}/>刷文档<br>`);
                            form3.append(`<input type="checkbox" name="test" value="test" ${_usersetting.learnCourse.test ? 'checked' : ''}/>刷随堂测验<br>`);
                            form3.append(`<input type="checkbox" name="discuss" value="discuss" ${_usersetting.learnCourse.discuss ? 'checked' : ''}/>刷讨论(将自动从当前页面选一条最长的评论复制粘贴,如果当前讨论还没有人发表评论则跳过)<br>`);
                            form3.append(`视频倍速(最高16倍,设置为0表示用默认速度):<input type="number" name="playrate" size="6" value="${_usersetting.learnCourse.playrate}"/><br>`);
                            group3.append(form3);
                            container.append(group3);
                            let group4 = $(`<div class="${names.btngroup}"></div>`);
                            group4.append(`<p class="size3">答题设置(确定后需刷新才能生效)</p>`);

有小伙伴说脚本不能用,

java自动刷网课 js刷网课_java自动刷网课


在这里统一回复一下:只要博主还在更新,就说明这个脚本还能用(如下图)。自行检查下自己的步骤

java自动刷网课 js刷网课_ooc_02


如果小博的文章对你有所帮助,欢迎点赞,关注,留言三连!!!谢谢了!!!😊😊😊