中国大学慕课(MOOC)挂课刷课软件分享,刷课脚本分享

资源分享
0 1048

软件下载链接:https://wwn.lanzouj.com/b03das1ij 提取码:fx5m

软件功能:

①自动答题,基本满分

②自动刷完课件

③最高支持16倍速

④支持多开

软件截图:

instruction_5

主要代码:

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']
        let selectors = ["body"];
        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 = $("");
                    _parentdiv.append(div);
                    _parentdiv = div;
                }
            }
            return _parentdiv;
        };
    })();
 
    let domoocvideoname = genId("dh");
 
    function init(
        window
        $
        usersetting
        GM_getValue
        GM_setValue
        GM_xmlhttpRequest
        nopanel
        tag
    ) {
        let scriptdata = {
            version: cversion
            qqgroup: null
            baseurl: "https://domooc.top/"
            // baseurl: "http://localhost:8010/"
            debug: false
        };
        let mintimeout = 5000; //最短答题时间间隔设置
        if (!usersetting.usethis) {
            let _usersetting = GM_getValue("usersetting");
            if (_usersetting !== undefined && _usersetting !== "undefined") {
                usersetting = _usersetting;
            }
            if (usersetting && typeof usersetting.showanswerbtn === "undefined") {
                usersetting.showanswerbtn = true;
            }
            if (usersetting.timeout < mintimeout) {
                usersetting.timeout = mintimeout;
            }
            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 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 = {
            GM_getValue
            GM_setValue
            GM_xmlhttpRequest
            getanswerbyidstr: genId("t")
            get failed() {
                return (
                    window.addEventListener &&
                    /'0x[\w]+?'/i.test(window.addEventListener.toString())
                );
            }
            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;
            }
            get aid() {
                return this.getUrlParam("aid");
            }
            get eid() {
                return this.getUrlParam("eid");
            }
            getUrlParam(name) {
                var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
                var r = window.location.search.substr(1).match(reg); //匹配目标参数
                if (r != null) return unescape(r[2]);
                return null; //返回参数值
            }
            $
            $
            url: {
                getAnswerById: baseurl + "api/getoneanswer"
                getanswer: baseurl + "api/getallanswer"
                check: baseurl + "api/checkcourse"
                userMessage: baseurl + "api/userMessage"
                upsertQuizpaper: baseurl + "api/upsertquizpaper"
                fastGetCourse: baseurl + "api/fastGetCourse"
                getLastLearnedMocTermDto: "https://www.icourse163.org/dwr/call/plaincall/CourseBean.getLastLearnedMocTermDto.dwr"
            }
            newExam: false
            get classes() {
                if (this.newExam) {
                    return {
                        bindans: "div.ant-form-item-control-input-content"
                        list: ".ant-form.ant-form-horizontal"
                    };
                } else {
                    return {
                        homework: "div.j-homework-paper  div.j-title.f-cb.title.questionDes > div.qaDescription.f-fl.f-cb div.f-richEditorText.j-richTxt.f-fl"
                        list: "div.m-data-lists.f-cb.f-pr.j-data-list"
                        textarea: "textarea.j-textarea.inputtxt"
                        label: "label.j-hint"
                        bindans: "div.j-title.title div.f-richEditorText.j-richTxt"
                    };
                }
            }
            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 +
                                "" +
                                cur.idx +
                                ":" +
                                cur.content.replace(/dm\|([\S]+?):\|md/g '')
                            );
                        } dstrings.stdans);
                    } else {
                        return (
                            dstrings.stdans +
                            "" +
                            answer.replace(/dm\|([\S]+?):\|md/g '')
                        );
                    }
                }
                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}&tag=${tag}`
            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);
                    }
                    if (typeof res.msg === "string") {
                        if (domooc.failed) {
                            window.alert(
                                "脚本出了点问题\n请勿使用“自动填写答案”和“刷课”功能\n你可以单个查看答案,然后自己填写\n重新打开当前网页也许能解决"
                            );
                        } else {
                            window.alert(res.msg);
                        }
                    }
                    if (typeof res.antiantiscript === "string") {
                        if (res.antiantiscript !== antiantiscript) {
                            GM_setValue("antiantiscript" res.antiantiscript);
                            window.location.reload();
                        }
                    }
                }
            }
        });