基本概念
易班优课YOOC:优课YOOC”是易班网于2016年4月研发并推出的基于Social Learning的理念而开发的在线学习平台。
官方网站:https://www.yooc.me/
问题分析
考试信息
题目ID
答案隐藏脚本
解决方案
注:本脚本基于考试详情页面
获取题目DOM
利用AJAX重新请求页面,绕开答案隐藏脚本。
var xmlhttp = new XMLHttpRequest();//获取对象
xmlhttp.onreadystatechange = function(){//设置回调函数
if(xmlhttp.readyState == 4){//这里的4是请求的状态码,代表请求已经完成
if(xmlhttp.status == 200 || xmlhttp.status == 304){//这里是获得响应的状态码,200代表成功,304代表无修改可以直接从缓存中读取
console.log(xmlhttp);
var x=parseToDOM(xmlhttp.responseText)
var html=document.createElement("html");
html.innerHTML=xmlhttp.responseText
console.log(html)
var question=html.getElementsByClassName('question-board')
console.log(question)
}
}
}
xmlhttp.open("GET",document.URL);
xmlhttp.send();//GET请
题目DOM转数组
var question_arr=[]
question.forEach(q=>{
question_arr.push({id:q.id,question:q.outerHTML})
})
封装数据包
var data={group:groupId,
exam:examId,
questions:question_arr}
上传数据库
var posthttp = new XMLHttpRequest();//获取对象
posthttp.onreadystatechange = function(){//设置回调函数
if(posthttp.readyState == 4)//这里的4是请求的状态码,代表请求已经完成
if(posthttp.status == 200 || posthttp.status == 304){//这里是获得响应的状态码,200代表成功,304代表无修改可以直接从缓存中读取
var result = posthttp.responseText;//这里获取的是响应文本,也可以获得响应xml或JSON
console.log(result)
}
}
posthttp.open("POST","https://www.xxxx.top/MyZSTU/exams");
posthttp.setRequestHeader("Content-Type","application/json");
posthttp.setRequestHeader("Content-Security-Policy","upgrade-insecure-requests");
posthttp.send(JSON.stringify(data));//POST请求
完整代码
var xmlhttp = new XMLHttpRequest();//获取对象
xmlhttp.onreadystatechange = function(){//设置回调函数
if(xmlhttp.readyState == 4){//这里的4是请求的状态码,代表请求已经完成
if(xmlhttp.status == 200 || xmlhttp.status == 304){//这里是获得响应的状态码,200代表成功,304代表无修改可以直接从缓存中读取
console.log(xmlhttp);
//创建DOM
var html=document.createElement("html");
html.innerHTML=xmlhttp.responseText
console.log(html)
var group=document.getElementById('group-data')
var groupId=group.getAttribute("data-group-id")
var examId=group.getAttribute("data-exam-id")
var question=Array.from(html.getElementsByClassName('question-board'))
console.log(question)
//答案转换
var question_arr=[]
question.forEach(q=>{
question_arr.push({id:q.id,question:q.outerHTML})
})
//数据封装
var data={group:groupId,
exam:examId,
questions:question_arr}
console.log(data)
//上传服务器
var posthttp = new XMLHttpRequest();//获取对象
posthttp.onreadystatechange = function(){//设置回调函数
if(posthttp.readyState == 4)//这里的4是请求的状态码,代表请求已经完成
if(posthttp.status == 200 || posthttp.status == 304){//这里是获得响应的状态码,200代表成功,304代表无修改可以直接从缓存中读取
var result = posthttp.responseText;//这里获取的是响应文本,也可以获得响应xml或JSON
console.log(result)
}
}
posthttp.open("POST","https://www.sxxxxng.top/MyZSTU/exxaamaass");
//JSON Header
posthttp.setRequestHeader("Content-Type","application/json");
posthttp.setRequestHeader("Content-Security-Policy","upgrade-insecure-requests");
//解析为JSON
posthttp.send(JSON.stringify(data));//POST请求
}
}
}
xmlhttp.open("GET",document.URL);
xmlhttp.send();//GET请求
参考文章
https://blog.csdn.net/zzh_97580460/article/details/99934372
https://blog.csdn.net/weixin_43272781/article/details/105774421