JavaScript——易班优课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。
问题分析
考试列表页
重做按钮
每次练习以后,重做按钮的链接都会发生改变,这个链接可以通过考试页面一个参数生成。
对整个考试页面就行正则匹配即可
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
上一篇: 三层架构介绍和MVC设计模型介绍
下一篇: 【模块化那些事】 拆散的模块化