欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JavaScript——易班优课YOOC课群在线测试自动答题解决方案(十九)强制重做

程序员文章站 2022-03-22 10:14:01
前文JavaScript——易班优课YOOC课群在线测试自动答题解决方案(一)答案获取Spring Boot——易班优课YOOC课群在线测试自动答题解决方案(二)答案储存Spring Boot——易班优课YOOC课群在线测试自动答题解决方案(三)答案查询JavaScript——易班优课YOOC课群在线测试自动答题解决方案(四)答案显示JavaScript——易班优课YOOC课群在线测试自动答题解决方案(五)简单脚本Spring Boot——易班优课YOOC课群在线测试自动答题解决方...

前文

JavaScript——易班优课YOOC课群在线测试自动答题解决方案(一)答案获取

Spring Boot——易班优课YOOC课群在线测试自动答题解决方案(二)答案储存

Spring Boot——易班优课YOOC课群在线测试自动答题解决方案(三)答案查询

JavaScript——易班优课YOOC课群在线测试自动答题解决方案(四)答案显示

JavaScript——易班优课YOOC课群在线测试自动答题解决方案(五)简单脚本

Spring Boot——易班优课YOOC课群在线测试自动答题解决方案(六)后端改造

JavaScript——易班优课YOOC课群在线测试自动答题解决方案(七)随机答案

JavaScript——易班优课YOOC课群在线测试自动答题解决方案(八)功能面板

JavaScript——易班优课YOOC课群在线测试自动答题解决方案(九)ID标签

Vue + Element UI + Spring Boot——易班优课YOOC课群在线测试自动答题解决方案(十)问题管理页面

JavaScript——易班优课YOOC课群在线测试自动答题解决方案(十一)恢复右键、选择和复制

JavaScript——易班优课YOOC课群在线测试自动答题解决方案(十二)脚本整合

JavaScript——易班优课YOOC课群在线测试自动答题解决方案(十三)自动答题

JavaScript——易班优课YOOC课群在线测试自动答题解决方案(十四)自动刷题

JavaScript——易班优课YOOC课群在线测试自动答题解决方案(十五)整合升级+引入jQuery

JavaScript——易班优课YOOC课群在线测试自动答题解决方案(十六)利用PC端和移动端BUG

JavaScript + Tampermonkey——易班优课YOOC课群在线测试自动答题解决方案(十七)复合型解决方案油猴脚本

JavaScript + Thymeleaf + Spring Boot——易班优课YOOC课群在线测试自动答题解决方案(十八)模板脚本

问题描述

2020年六月底,易班对考试页JavaScript更新,出现以下BUG。 

 JavaScript——易班优课YOOC课群在线测试自动答题解决方案(十九)强制重做

问题分析

考试列表页 

重做按钮 

JavaScript——易班优课YOOC课群在线测试自动答题解决方案(十九)强制重做

每次练习以后,重做按钮的链接都会发生改变,这个链接可以通过考试页面一个参数生成。

JavaScript——易班优课YOOC课群在线测试自动答题解决方案(十九)强制重做

对整个考试页面就行正则匹配即可

let examuser=/var AnswerData = JSON.parse\(localStorage.getItem\("exam(.*)"\)\) \|\| {};/.exec(res.responseText)[1]
console.log(examuser)

考试页

提交按钮事件

JavaScript——易班优课YOOC课群在线测试自动答题解决方案(十九)强制重做

JavaScript——易班优课YOOC课群在线测试自动答题解决方案(十九)强制重做

 submitAnswer()方法

JavaScript——易班优课YOOC课群在线测试自动答题解决方案(十九)强制重做

如果直接使用  submitAnswer()方法,服务端的校验不能通过。

JavaScript——易班优课YOOC课群在线测试自动答题解决方案(十九)强制重做

JavaScript——易班优课YOOC课群在线测试自动答题解决方案(十九)强制重做

_AnswerData()方法和AnswerData  

JavaScript——易班优课YOOC课群在线测试自动答题解决方案(十九)强制重做

更新前:

JavaScript——易班优课YOOC课群在线测试自动答题解决方案(十九)强制重做

更新后:

JavaScript——易班优课YOOC课群在线测试自动答题解决方案(十九)强制重做

解决方案

        var repeatExam=()=>{
            $.ajax({
                url: 'https://www.yooc.me/group/'+groupId+'/exam/'+examId+'/detail',
                type: 'GET'
            }).then(res=>{
                let examuser=/var AnswerData = JSON.parse\(localStorage.getItem\("exam(.*)"\)\) \|\| {.*};/.exec(res)[1];
                $.ajax({
                    beforeSend: function(xhr){
                        // 取消掉全局loading效果
                        if($('#mask').length>0){
                            $('#mask').hide();
                        }
                    },
                    url:'https://www.yooc.me/group/'+groupId+'/exam/'+examId+'/examuser/'+examuser+'/repeat',
                    type: 'post',
                    data: {'csrfmiddlewaretoken': csrf},
                    success: function(data){
                        if(data.result){
                            window.location.href = data.url;
                        }else{
                            alert(data.message);
                        }
                    }
                });
            },ajaxUsualErrorMessage)

        }
        let appendsomething=()=>{
            let releaseButton=document.getElementsByClassName('release-board')[0]
            let ns=document.createElement('a')
            ns.id="null-submit"
            ns.href="javascript:;"
            ns.innerText="提交白卷"
            ns.style="margin-left: 0px;margin-top: 10px;"
            ns.title="随机答案提交试卷"
            ns.onclick=()=>{
                nullSubmit();
                //页面方法
                xAlert('提示','随机答案选择完毕,可以提交了');
            };
            releaseButton.appendChild(ns);
            let qa=document.createElement('a');
            qa.id="query-answer";
            qa.href="javascript:;";
            qa.innerText="查询答案";
            qa.style="margin-left: 20px;margin-top: 10px;";
            qa.title="云端题库查询答案";
            qa.onclick=()=>{
                let ansElements = document.getElementsByClassName('the-ans');
                let ansNum = ansElements.length
                if(ansNum<=0){
                    showAnswer();
                    addIdTag()
                }else{
                    //页面方法
                    xAlert('失败','已经有答案了哦')
                }
            };
            releaseButton.appendChild(qa);
            let autoAnswerButton=document.createElement('a');
            autoAnswerButton.id="auto-answer-submit";
            autoAnswerButton.href="javascript:;";
            autoAnswerButton.innerText="自动答题";
            autoAnswerButton.style="margin-left: 0px;margin-top: 10px;";
            autoAnswerButton.title="答案自动选择";
            autoAnswerButton.onclick=()=>{
                autoAnswer();
                addIdTag();
                //页面方法
                xAlert('提示','答案自动选择完毕,请自行检查填空题部分')
            }
            releaseButton.appendChild(autoAnswerButton);

            let copyAnswerButton=document.createElement('a');
            copyAnswerButton.id="auto-answer-submit";
            copyAnswerButton.href="javascript:;";
            copyAnswerButton.innerText="正确答案";
            copyAnswerButton.style="margin-left: 20px;margin-top: 10px;";
            copyAnswerButton.title="利用PC端和移动端之间BUG实现获取正确答案";
            let checked_a=false;
            copyAnswerButton.onclick=()=>{
                let ansElements = document.getElementsByClassName('the-ans');
                let ansNum = ansElements.length;
                if(ansNum<=0){
                    copyMobileAnswer();
                    addIdTag();
                    //页面方法
                    xAlert('提示','正确答案复制完毕,请自行检查填空题部分');
                }else{
                    //页面方法
                    xAlert('失败','已经有答案了哦');
                }
            };
            releaseButton.appendChild(copyAnswerButton);

            var repeatButton=document.createElement('a')
            repeatButton.id="repeat-exam-submit"
            repeatButton.href="javascript:;"
            repeatButton.innerText="强制重做"
            repeatButton.style="margin-left: 0px;margin-top: 10px;"
            repeatButton.title="强制申请重做试卷"
            repeatButton.onclick=()=>{
                repeatExam();
                //页面方法
                xAlert('提示','强制申请重做试卷成功')
            }
            releaseButton.appendChild(repeatButton)

            var tempButton=document.createElement('a')
            tempButton.id="temp-submit"
            tempButton.href="javascript:;"
            tempButton.innerText="占位按钮"
            tempButton.style="margin-left: 20px;margin-top: 10px;"
            tempButton.title="未定义功能"
            tempButton.onclick=()=>{
                //页面方法
                xAlert('失败','占位按钮:未定义功能')
            }
            releaseButton.appendChild(tempButton)
        };

运行结果

 JavaScript——易班优课YOOC课群在线测试自动答题解决方案(十九)强制重做

JavaScript——易班优课YOOC课群在线测试自动答题解决方案(十九)强制重做

参考文章 

https://shentuzhigang.blog.csdn.net/article/details/105878870

本文地址:https://blog.csdn.net/weixin_43272781/article/details/107304268