当前位置: 移动技术网 > IT编程>开发语言>JavaScript > JavaScript——易班优课YOOC课群在线测试自动答题解决方案(十九)强制重做

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

2020年07月14日  | 移动技术网IT编程  | 我要评论

前文

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。 

 

问题分析

考试列表页 

重做按钮 

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

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

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

考试页

提交按钮事件

 submitAnswer()方法

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

_AnswerData()方法和AnswerData  

更新前:

更新后:

解决方案

        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)
        };

运行结果

 

参考文章 

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

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网