下载“错题回看”页中全部试题和答案(登录http://hotmatrix.cn/后,单击“我的课程,选择一门课程进入,单击“开始训练”进入后直接选“我要交卷”交空卷后返回,再选“错题回看”进入,脚本会自动在上面生成【下载试题】,单击下载即可自动汇集全部本页试题和答案。)
// ==UserScript==
// @name 鸿科经纬试题采集
// @namespace http://yun.exam.hotmatrix.cn/
// @version 0.3
// @description 下载“错题回看”页中全部试题和答案(登录http://hotmatrix.cn/后,单击“我的课程,选择一门课程进入,单击“开始训练”进入后直接选“我要交卷”交空卷后返回,再选“错题回看”进入,脚本会自动在上面生成【下载试题】,单击下载即可自动汇集全部本页试题和答案。)
// @author 冯涛
// @require https://cdn.staticfile.org/jquery-cookie/1.4.1/jquery.cookie.min.js
// @match http://yun.exam.hotmatrix.cn/student/examPaperWrongQuestionDetail?examPaperUserId=*
// @grant none
// @run-at document-end
// ==/UserScript==
(function() {
'use strict';
var targetNode =document.getElementsByClassName("ctr-parent-score")[0];
// 创建一个observer示例与回调函数相关联
var observer = new MutationObserver(function(mutations) {
observer.disconnect(); // 停止观测
getdata();
});
observer.observe(targetNode, { attributes: true, childList: true, subtree: true });//使用配置文件对目标节点进行观测
})();
// 当节点发生变化时的需要执行的函数
function getdata(){
var questions="";
let promiseArr = [];
$("a.ctr-eps-a").each(function(i,e){
promiseArr.push(new Promise((resolve, reject) => {
let slfingerprint= $(e).attr("slfingerprint"); //题号
let examPaperUserId=getUrlParam("examPaperUserId");
let url="http://yun.exam.hotmatrix.cn/student/doExamPaperSubjectCheck?epuId=" + examPaperUserId + "&slFingerprint=" + slfingerprint + "&paperScore=1.0&userPaperId=" + examPaperUserId + "&epTrainingUseRole=1";
$.ajax({
method: "get",
url: url,
success:function(req){
let data =$.parseHTML(req);
let title= (i+1) + ". " + $(data).find(".st-title").children("div").text().replace(/\t/g,"").replace(/\n/g,"") + "[内部ID:" + slfingerprint + "]" ;
let options= $(data).find(".options").find("span").text().replace(/\t/g,"").replace(/\n/g,"").replace(/(A)/g,"$1:").replace(/([B-D])/g,"\n$1:");
let answer= $(data).find(".answer-area").next().text().replace(/\t/g,"").replace(/\n/g,"") ;
let temp=title + "\n" + options + "\n" + answer + "\n\n";
let q=temp;
questions += q ;
resolve();
}
})
} ))
})
Promise.all(promiseArr).then(res => {
var blob = new Blob([questions]);
var a = document.createElement('a');
a.innerHTML = "下载试题";
a.download = "question";
a.href = URL.createObjectURL(blob );
$(".name-box2").append(a);
});
}
//获取url中的参数
function getUrlParam(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
var r = window.location.search.substr(1).match(reg); //匹配目标参数
if (r != null) return unescape(r[2]); return null; //返回参数值
}