Greasy Fork

Greasy Fork is available in English.

青书学堂自动答题工具(选择题)

青书学堂作业自动填写选择题

目前为 2022-12-15 提交的版本,查看 最新版本

// ==UserScript==
// @name         青书学堂自动答题工具(选择题)
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  青书学堂作业自动填写选择题
// @author       kokusan
// @match        *://*.qingshuxuetang.com/hngd/Student/ExercisePaper*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none
// @license MIT
// ==/UserScript==


var answerPageUrl;
(function() {
    'use strict';

    // 创建一个iframe用来加载答案页面
    var pageUrl = window.location.href;

    // 青书学堂答案就在下面这个地址中
    answerPageUrl = pageUrl.replace("ExercisePaper", "ViewQuiz");


    var iframe = document.createElement('iframe');
    document.body.appendChild(iframe);
    iframe.style.display = 'none';
    iframe.src = answerPageUrl;

    // 初始化所有选项
    $('#form1 > div.question-entity input[type="checkbox"]').prop('checked', false);

    listenerIframe(iframe);

})();

var answer;

// 监听创建的答案iframe是否加载完毕
function listenerIframe(iframe) {
    var iframeLoad = function () {
        window.setTimeout(function() {
            console.log("加载完毕")

            // iframe加载完毕后获取所有问题的答案存进answer中
            var an = [];
            $(iframe.contentDocument).find('.question-detail-container span.question-detail-answer.question-detail-choice-solution').each(function(i) {
                an.push({"index":i, "value":$(this).html()})
            });
            console.log('成功获取答案数量:' + an.length);
            console.log(an)
            answer = an;
            writeInAnswerFun();

        }, 500);

        // 移除监听器
        iframe.removeEventListener("load", iframeLoad, true);
    };
    iframe.addEventListener('load', iframeLoad, true);
}

let sleepFun = function(fun, time) {
  setTimeout(function() {
    fun();
  }, time);
}

// 把答案写入到试卷中
function writeInAnswerFun() {
    if (!answer) {
        alert("未成功获取答案,请刷新页面重试!");
        return;
    }

    // 下面时成功获取答案后该进行的操作
    var errNumber = [];
    var index = 0;
    var _interval = setInterval(function() {
        try {
            index = $('.question_group_container .group_item.active').index();
            let item = answer[index];
            let value = item.value;
            const $q_div = $('.paper-container > .question-detail-container').eq(index);
            let $input = $q_div.find('input[value="' + value + '"]');
            if ($input.length == 0) {
                let $o_des = $q_div.find('.option-description');
                $o_des.each(function(i2, e){
                    if ($(this).text() === value) {
                        $input = $(this).parent().find('input');
                        return;
                    }
                });
            }
            $input.click();
        } catch(e) {
            try {
                errNumber.push(item.index + 1)
            } catch(e2){}
        }

        if (index >= answer.length -1) {
            clearInterval(_interval);
            setTimeout(function() {
                lastFun();
            }, 1000);
        }
    }, 1000);

    if (errNumber.length > 0) {
        alert('第' + errNumber.join(',') + '题答案录入失败!')
    }

}

function lastFun() {
    alert('自动填入答案程序执行完毕。')

    if($('#form1 > div.question-entity[questiontype="3"]').length > 0) {
        window.open(answerPageUrl, "_blank");
    }
}