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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章