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

基本概念

易班优课YOOC:优课YOOC”是易班网于2016年4月研发并推出的基于Social Learning的理念而开发的在线学习平台。

官方网站:https://www.yooc.me/

问题分析

 

考试信息 

题目ID 

 

答案隐藏脚本 

解决方案

注:本脚本基于考试详情页面

例:https://www.yooc.me/group/16x263/exam/11067x/detail 

 获取题目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

http://caibaojian.com/javascript/107.html

©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页