JLC_CJ_TK_LocalData

TK 离线

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください。
// ==UserScript==
// @name         JLC_CJ_TK_LocalData
// @namespace    http://tampermonkey.net/
// @version      1.1.5
// @description  TK 离线
// @author       123
// @require      https://cdn.bootcss.com/blueimp-md5/2.12.0/js/md5.min.js
// @require      https://update.greasyfork.org/scripts/497006/1388537/JLCMD5TK.js
// @match        https://exam.kaoshixing.com/exam/exam_start/**
// @license      MIT
// ==/UserScript==

(function () {
    'use strict';

    const repalceText = (text) => {
        text = text.replace(/[\n\r\ ]+/g, '')
        return text.replace(/^([A-Z]\.)*/g, '')
    }

    /**
     * 在答题页面,勾选上查询到的答案
     * @returns
     */
    const renderResultInExamStartPage = async () => {
        // 当前页判断
        if (!location.href.includes('exam.kaoshixing.com/exam/exam_start')) {
            return;
        }
        // 库
        const md5DataList = getMD5DataList();

        $('.question-content').find('.question-name .pre-wrap').each(function () {
            // 题干
            let questionName = repalceText($(this).text());
            let questionObject = md5DataList.filter(questionMd5 => questionMd5.split(':::')[0] === md5(questionName));

            // 没查到题目的话,跳过当前题目
            if (questionObject.length === 0) {
                return;
            }

            questionObject = questionObject[0];
            // 拿到选项的MD5列表
            let answerMD5List = questionObject.split(":::")[1].split(',');

            // 选项MD5
            $(this).parents('.question-content').find('.answers .select').each(function () {
                let text = $(this).text().replace(/[\r\n\ ]+/g, '');
                let answerMD5 = md5(repalceText(text));

                // 判断题
                if (['正确', '错误'].includes(text) && answerMD5List.includes(answerMD5)) {
                    $(this).find('span.words').click();
                }
                // 单选、多选
                else {
                    // 如果选项没有内容,就认为是图片,这时候需要获取图片的地址作为md5加密的值
                    if (text.split('.')[1] === '') {
                        text += $(this).find('img').attr('src');
                        let answerMD5 = md5(repalceText(text));
                        if (answerMD5List.includes(answerMD5)) {
                            $(this).find('span.words-option').click();
                        }
                    }
                    // 是否包含在正确答案中
                    if (answerMD5List.includes(answerMD5)) {
                        $(this).find('span.words-option').click();
                    }
                }
            });
        });
    }

    //生成从minNum到maxNum的随机数
    function randomNum(minNum, maxNum) {
        switch (arguments.length) {
            case 1:
                return parseInt(Math.random() * minNum + 1, 10);
            case 2:
                return parseInt(Math.random() * (maxNum - minNum + 1) + minNum, 10);
            default:
                return 0;
        }
    }

    /**
     * 未查询到的答案 随机选择
     */
    const rednerNotFindQuestion = () => {
        setInterval(() => {
            $('div.question-content[data-commit="false"]').each(function () {
                $(this).find(`span.words-option:eq(${randomNum(0, 3)})`).click()
                $(this).find(`span.words:eq(${randomNum(0, 1)})`).click();
            })
        }, 1000);
    }

    /**
     * 交卷按钮控制, 自动提交试卷
     */
    const buttonControl = () => {
        if ($('#endExamBtn').length === 0) {
            return;
        }
        // 取随机交卷时间
        // 30、60 是随机交卷时间:30秒到60秒之间,可以根据自己的需求修改。
        const second = randomNum(30, 60) * 1000;
        let sencond2 = second;

        let timeoutTask = setInterval(() => {
            // .attr('disabled', true)
            sencond2 = sencond2 - 1000;
            $('#endExamBtn').css({
                padding: '10px 0px'
            }).text(`自动交卷倒计时${sencond2 / 1000}秒`);
            // 去除定时
            if ((sencond2 / 1000) <= 0) {
                timeoutTask = null;
                clearInterval(timeoutTask);
                $('#endExamBtn').css({
                    padding: '10px 28px'
                }).attr('disabled', false).text('提交试卷');
            }
        }, 1000);

        // 交卷
        setTimeout(() => {
            $('#endExamBtn').click();
            $('#confirmEndExamBtn').click();
        }, second + 1000);
    }

    renderResultInExamStartPage();
    rednerNotFindQuestion();
    // 不要自动交卷,把下面这行删掉
    buttonControl();
})();