云题库刷题辅助

try to take over the world!

当前为 2020-04-06 提交的版本,查看 最新版本

// ==UserScript==
// @name         云题库刷题辅助
// @namespace    http://tampermonkey.net/
// @version      1.1
// @description  try to take over the world!
// @author       吃瓜男孩
// @match        http://tiku.kgc.cn/testing/*
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_xmlhttpRequest
//@connect       *
// ==/UserScript==

var currentURL = window.location.href;
(function() {
    'use strict';
    jQuery.support.cors = true;
    var answerURL = /tiku\.kgc\.cn\/testing\/exam*/;
    var sumbitURL = /tiku\.kgc\.cn\/testing\/paper\/report*/;
    if (answerURL.test(currentURL)) {
        var data = new Array();
        var answerMap = new Map();
        var questHTML = $(".sec2>pre>img");
        var reg = /\d{10,15}/;
        var addHTML = $('<a id="getAnswer" href="javascript:void(0);"  class="f14 rest acenter"></a>').text("获取答案").click(function() {
            var quests = new Array();
            for (var i = 0; i < questHTML.length; i++) {
                var src = $(questHTML[i]).attr("src");
                quests.push(reg.exec(src)[0])
            }
            GM_xmlhttpRequest({
                method: "post",
                url: 'http://tiku.yxmnb.top:8099/answer/get',
                data: JSON.stringify(quests),
                headers: {
                    "Content-Type": 'application/json;charset=utf-8'
                },
                onload: function(r) {
                    if (r.status == 200) {
                        var answerResult = [];
                        answerResult = JSON.parse(r.responseText);
                        if (answerResult.length > 0) {
                            for (var i = 0; i < answerResult.length; i++) {
                                answerMap.set(answerResult[i].questId, answerResult[i].answer.split(","))
                            }
                            for (var a = 0; a < questHTML.length; a++) {
                                var src = reg.exec($(questHTML[a]).attr("src"))[0];
                                for (var [key, value] of answerMap) {
                                    if (src == key) {
                                        var options = $(questHTML[a]).parents(".sec").find(".sec2>li");
                                        if (value.length == 1) {
                                            options[value[0]].click()
                                        } else {
                                            for (var q = 0; q < value.length; q++) {
                                                options[value[q]].click()
                                            }
                                        }
                                    }
                                }
                            }
                        } else {
                            alert("题库里面一道题也没有,快答题扩充题库吧")
                        }
                    }
                }
            })
        });
        $("#putIn").after(addHTML);
        $("#putIn").click(function() {
            for (var i = 0; i < questHTML.length; i++) {
                var src = $(questHTML[i]).attr("src");
                if (reg.test(src)) {
                    var questId = reg.exec(src)[0];
                    var questNo = $(questHTML[i]).parents(".sec").find(".sec3").find(".font-color").parent().attr("data").split(",")[4];
                    var questType = $(questHTML[i]).parents(".sec").find(".sec3").find(".font-color").parent().attr("data").split(",")[5];
                    var answer = null;
                    var answerText = null;
                    if (questType != "1") {
                        var answerHTML = $(questHTML[i]).parents(".sec").find(".sec3").find(".green>a");
                        for (var j = 0; j < answerHTML.length; j++) {
                            var answerNum = $(answerHTML[j]).attr("data");
                            if (answer == null || answer == '') {
                                answer = answerNum;
                                answerText = $(questHTML[i]).parents(".sec").find("ul").children().eq(answerNum).text()
                            } else {
                                answer += "," + answerNum;
                                answerText += "," + $(questHTML[i]).parents(".sec").find("ul").children().eq(answerNum).text()
                            }
                        }
                    } else {
                        answer = $(questHTML[i]).parents(".sec").find(".sec3").find(".green>a").attr("data");
                        answerText = $(questHTML[i]).parents(".sec").find("ul").children().eq(answer).text()
                    }
                    var obj = {
                        questId: questId,
                        questType: questType,
                        answer: answer,
                        answerText: answerText
                    };
                    data[i] = obj
                }
            }
            for (var [k, v] of answerMap) {
                for (var d of data) {
                    if (k == d.questId) {
                        d.questType = 0
                    }
                }
            }
            GM_setValue("data", data)
        })
    } else if (sumbitURL.test(currentURL)) {
        data = GM_getValue("data");
        var answerHTML = $("#cardNum").children();
        var correctData = new Array();
        var index = 0;
        for (var i = 0; i < answerHTML.length; i++) {
            if ($(answerHTML[i]).attr("class") == "red" || data[i].questType == 0) {
                data[i] = null
            } else {
                correctData[index] = data[i];
                index++
            }
        }
        if (correctData.length > 0) {
            GM_xmlhttpRequest({
                method: "post",
                url: 'http://tiku.yxmnb.top:8099/answer/save',
                data: JSON.stringify(correctData),
                headers: {
                    "Content-Type": 'application/json;charset=utf-8'
                },
                onload: function(r) {
                    if (r.status == 200) {
                        console.log(r.responseText)
                    }
                }
            })
        }
    }
})();