JavaScript——易班優課YOOC課羣在線測試自動答題解決方案(五)簡單插件

前文

JavaScript——易班優課YOOC課羣在線測試自動答題解決方案(一)答案獲取

Spring Boot——易班優課YOOC課羣在線測試自動答題解決方案(二)答案儲存

Spring Boot——易班優課YOOC課羣在線測試自動答題解決方案(三)答案查詢

JavaScript——易班優課YOOC課羣在線測試自動答題解決方案(四)答案顯示

解決方案

// ==UserScript==
// @name         YOOC Exam
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       STZG
// @match        https://www.yooc.me/group/*/exam/*/detail
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // Your code here...
var examUpload=()=>{
    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
                        .replace('/the-ans fls/g',"the-ans crt")
                        .replace('/<li class="crt/g"','<li class=""')
                        .replace('/<li class="fls/g"','<li class=""')})
                })
                //上傳服務器
                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://localhost/MyZSTU/yooc/group/"+groupId+"/exam/"+examId+"/upload");
                //JSON Header
                posthttp.setRequestHeader("Content-Type","application/json");
                posthttp.setRequestHeader("Content-Security-Policy","upgrade-insecure-requests");
                //解析爲JSON
                posthttp.send(JSON.stringify(question_arr));//POST請求
            }
        }
    }
    xmlhttp.open("GET",document.URL);
    xmlhttp.send();//GET請求
}
var answer=()=>{
    //獲取考試信息
    var group=document.getElementById('group-data')
    var groupId=group.getAttribute("data-group-id")
    var examId=group.getAttribute("data-exam-id")
    //獲取問題信息
    questions=document.getElementsByClassName('question-board')
    var question_arr=[]
    Array.from(questions).forEach(q=>{
        question_arr.push(q.id.substr(9))
    })
    var xmlhttp = new XMLHttpRequest();//獲取對象
    xmlhttp.onreadystatechange = function(){//設置回調函數
        if(xmlhttp.readyState == 4){//這裏的4是請求的狀態碼,代表請求已經完成
            if(xmlhttp.status == 200 || xmlhttp.status == 304){//這裏是獲得響應的狀態碼,200代表成功,304代表無修改可以直接從緩存中讀取
                var result = xmlhttp.responseText;//這裏獲取的是響應文本,也可以獲得響應xml或JSON
                console.log(result)
                //解析爲JS對象
                var obj = JSON.parse(result);
                var questionContainer=document.getElementsByClassName('exam-detial-container')[0]
                obj.forEach(q=>{
                    var question=document.getElementById('question-'+q.id)
                    var answer = document.createElement("div");
                    answer.innerHTML = q.question;
                    var child=answer.childNodes[0]
                    child.id='ans-'+q.id
                    questionContainer.insertBefore(child,question)
                    console.log(question)
                    console.log(answer)
                })
            }
        }
    }
    xmlhttp.open("GET","https://localhost/MyZSTU/yooc/group/"+groupId+"/exam/"+examId+"/answer?question="+question_arr);
    xmlhttp.send();//GET請求
}

//獲取考試信息
var group=document.getElementById('group-data')
var groupId=group.getAttribute("data-group-id")
var examId=group.getAttribute("data-exam-id")
var examQuestionNum=Number(group.getAttribute("data-questions"))
//獲取問題信息
var questions=document.getElementsByClassName('question-board')
var questionNum = questions.length
//獲取答案信息
var ansElements = document.getElementsByClassName('the-ans')
var ansNum = ansElements.length
if(ansNum>0){
    if(questionNum===examQuestionNum){
        examUpload()
    }else{
        console.log("現在是考試中,不能上傳答案哦。")
    }
}else{
    answer()
}


})();

使用教程

參考文章

https://www.jianshu.com/p/cf3f8d20bbfc 

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