吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2142|回复: 24
收起左侧

[其他原创] 【油猴脚本】第九届全国学生“学宪法 讲宪法”活动(宪法小卫士)答题脚本

  [复制链接]
南岸 发表于 2024-9-13 13:36
本帖最后由 南岸 于 2024-9-13 13:38 编辑

脚本托管地址:https://greasyfork.org/zh-CN/scripts/430038

从去年开始,综合测评的试题展示方式发生了改变,即题目一样,选项中除了正确的选项以外都是与练习中收集到的选项不同,故之前匹配题目+选项组来获取答案的方法失效了

去年也是懒了,没有写新的匹配方法,今年邮箱收到了许多催更信息,所以写了一版新的

新版本采用题目+正确答案的方式来处理试题,即收集答案时只存入 题目+正确答案

考试时,利用 题目+每个选项 去做匹配 ,当 题目+选项 匹配到 收集过得 题目+正确答案 , 从而判定此选项为正确答案。

-----

实现功能:自动收录练习答案,自动点击正确选项
!!!注意:由于此版本将答案存于本地,所以考试前请做一遍练习,防止答案出错或没有

// ==UserScript==
// @name         普法网(宪法小卫士)课后练习、考试自动答题
// @namespace    Ne-21
// @version      1.3.9
// @AuThor       Ne-21
// @match        *://static.qspfw.moe.gov.cn/*
// @run-at       document-end
// @grant        unsafeWindow
// @grant        GM_setValue
// @grant        GM_getValue
// @license      MIT
// @require      https://lf9-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/3.6.0/jquery.min.js
// @require      https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/limonte-sweetalert2/11.0.1/sweetalert2.all.min.js
// @require      https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/crypto-js/4.1.1/crypto-js.min.js
// ==/UserScript==

var _self = unsafeWindow,
    $ = _self.jQuery || top.jQuery,
    Swal = Swal || window.Swal,
    columnId = getQueryVariable("columnId"),
    answer_list = [],
    exam_list = [],
    time = 5e3, // 答题间隔时间,最好为5秒
    save_key = "xfxws2024",
    num = {"A": 1,"B": 2, "C": 3, "D": 4};

(function() {
    if (window.location.pathname.indexOf('learn_exam.html') != -1) {
        Swal.fire('宪法小助手提示','点击确定开始考试','info').then(()=>{
            Swal.fire({
                position: 'top-end',
                title: '脚本将在5秒后开始自动作答!',
                showConfirmButton: false,
                timer: 4000
            })
            getExam();
            let t = setInterval( function() {
                doExam(t)
            },time);
        })
    } else if (window.location.pathname.indexOf('learn-practice.html') != -1) {
        Swal.fire('宪法小助手提示','点击确定开始练习,脚本会自动收录本练习题目数据','info').then(()=>{
            getAnswer(columnId);
            let t = setInterval( function() {
                doQuestion(t)
            },time);
        })
    } else if (window.location.pathname.indexOf('learn_practice_list.html') != -1) {
        Swal.fire('宪法小助手提示','<div style="font-size: 13px;">脚本最后更新时间:2024.09.12<br />使用说明:<br /><div><span style="color: red;">1.脚本题库数据托管于本地,请在做综合评价前逐个完成练习,收集答案!!!</span><br />2.脚本运行故障如综合测评无操作等,请使用Edge浏览器+ScriptCat。<br />3.问题联系邮箱nawlgzs@gmail.com<br />4.脚本数据来自本网站后端返回的明文JSON数据包,脚本不涉及任何逆向操作!<br />5.脚本仅供学习交流,请勿用于商业用途,否则后果自负!</div></div>')
    } else if (window.location.pathname.indexOf('evaluation.html') != -1) {

    }
})();

// 解析url参数
function getQueryVariable(variable) {
       var query = window.location.search.substring(1);
       var vars = query.split("&");
       for (var i=0;i<vars.length;i++) {
               var pair = vars[i].split("=");
               if(pair[0] == variable){return pair[1];}
       }
       return(false);
};

// 正则匹配
function getStr(str, start, end) {
    let res = str.match(new RegExp(`${start}(.*?)${end}`))
    return res ? res[1] : null
}

// 获取答案
function getAnswer(columnId) {
    // var html = $("html").html(),
    //     taskId = getStr(html,'&taskId=','`,')

    $.ajax({
        url: _self.config.practice.host + _self.config.practice.practice + "?columnId="+ columnId + "&taskId=" + _self.config.taskId,
        headers: _self.config.apiConfig.header,
        async: false,
        success: function (res) {
            const { data, status } = res;
            if (status === "0") {
                var question_data = res.data
                var questionBankList = data.questionBankList
                answer_list = questionBankList;
                upload(answer_list)
            } else if (status === "1") {
                //无效的columnId(下个接口是chapterId)
                alert("请先学习当前模块");
                window.history.go(-1);
            } else if (status === "-2") {
                alert("请重新登陆");
            } else {

            }
        },
        error: function (err) {
        }
    });
}

// 答题操作
function doQuestion(t) {
    var cur_topic = $('#currentTopic').text(),
        tol_topic = $('#totalTopic').text(),
        answer = answer_list[cur_topic - 1].answer;
    $('#exam_answer > div:nth-child(' + num[answer] + ')').click();
    if (cur_topic == tol_topic) {
        // 清除Interval的定时器
        clearInterval(t);
        setTimeout(function(){Swal.fire('宪法小助手提示','答题完成','info')},time / 2);
    } else{
        setTimeout(function(){$('#next_question').click()},time / 2);
    };
}

// 获取考试题目
function getExam(){
    // var html = $("html").html(),
    //     taskId = getStr(html,'taskId=','`,');
    $.ajax({
        url: _self.config.wexam.host + _self.config.wexam.getPaper + "?taskId=" + _self.config.taskId,
        headers: _self.config.apiConfig.header,
        async: false,
        success: function (res) {
            const { data, status, message } = res;
            if (status === "0") {
                var question_data = res.data;
                var paper = question_data.paper;
                var paperInfo = paper.paperInfo;
                exam_list = paperInfo;
            } else {
                alert('获取考试题目失败!')
            }
        },
        error: function (err) {
        }
    });
}
// 考试答题操作
function doExam(t){
    let db_json = []
    if (GM_getValue(save_key) && JSON.parse(GM_getValue(save_key)).length >= 0) {
        db_json = JSON.parse(GM_getValue(save_key))
    } else {
        Swal.fire('宪法小助手提示','无题库数据,请先收集答案或自己作答!','info')
        return
    }

    $('#ne21ans')[0] ? $('#ne21ans').html('<p style="color: red;">正在搜索答案~</p>') : $('#exam_question').append('<div id="ne21ans"><p style="color: red;">正在搜索答案~</p></div>')

    var cur_topic = $('#currentTopic').text(),
        tol_topic = $('#totalTopic').text(),
        questionInfo = exam_list[cur_topic - 1];

    ans_index = []
    ops = questionInfo.answerOptions.split("@!@")
    for (var i = 0; i < ops.length; i++) {
        hash_tmp = MD555(questionInfo.content+"|"+ops[i])
        db_json.forEach((item)=>{
            if (item.hash == hash_tmp) {
                ans_index.push(i)
            }
        }) 
    }

    if (ans_index.length == 0) {
        Swal.fire('宪法小助手提示','无题库数据,请先收集答案或自己作答!','info')
        return
    }

    ans_index.forEach((item1)=>{
        $('#ne21ans').html('<p style="color: red;">参考答案:'+ ops[item1] + '</p>')
        $('#exam_answer > div:nth-child(' + (item1+1) + ')').click();  
    })

    if (cur_topic == tol_topic) {
         // 清除Interval的定时器
         clearInterval(t);
         setTimeout(function(){Swal.fire('宪法小助手提示','答题完成,请自己点击交卷!','info')},time / 2);
    } else{
         setTimeout(function(){$('#next_question').click()},time / 2);
    };

}

function upload(question_data) {
    let db_json = []
    if (GM_getValue(save_key) && JSON.parse(GM_getValue(save_key)).length >= 0) {
        db_json = JSON.parse(GM_getValue(save_key))
    }
    question_data.forEach((item)=>{
        let question = item.content
        let ans_index = []
        item.answer.split().forEach(((item1)=>{
            let index_tmp = "ABCDEFG".indexOf(item1)
            ans_index.push(index_tmp)
        }))
        let ans_ops = item.answerOptions.split("@!@")
        ans_index.forEach((item3)=>{
            db_json.push({
                "hash":MD555(question+"|"+ans_ops[item3]), 
                "question": question, 
                "answer": ans_ops[item3]
                })
        })
    })

    let dbJson = uniqueByField(db_json,"hash")
    GM_setValue(save_key,JSON.stringify(dbJson))
    console.log(JSON.parse(GM_getValue(save_key)))
}

function MD555(str) {
    return CryptoJS.MD5(str).toString()
}

function uniqueByField(array, field) {
    const seen = new Set();
    return array.filter((item) => {
        const key = item[field];
        return seen.has(key) ? false : seen.add(key);
    });
}

免费评分

参与人数 3吾爱币 +9 热心值 +3 收起 理由
心有玫瑰 + 1 + 1 谢谢@Thanks!
weitao4112 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

star350000 发表于 2024-9-23 00:42
真不错,虽然错过了。孩子没做,都是家长在做苦了家长们了。还有后面的AI合成我直接用我的头像去合成提交作业了。呵呵呵。都是形式主义!
Mr6ing 发表于 2024-9-13 13:50
lxw3254 发表于 2024-9-13 13:57
zxxiaopi 发表于 2024-9-13 13:57
刚好用上
我为52pojie狂 发表于 2024-9-13 14:32
你就是及时雨 宋题
abc023119 发表于 2024-9-13 14:40
收藏 备用  
huigul123 发表于 2024-9-13 15:27
谢谢分享,非常有用
灵魂守卫 发表于 2024-9-13 16:11
感谢分享
wapjsx 发表于 2024-9-13 17:23
我不需要,但马上想到的是如何批量处理!!
老东东2019 发表于 2024-9-13 17:30
全国统一,感谢作者
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 08:26

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表