TikN雨课堂学堂在线试卷导出工具

将雨课堂网页版试卷导出为TikN可识别的格式。

  1. // ==UserScript==
  2. // @name TikN雨课堂学堂在线试卷导出工具
  3. // @namespace http://blmm.top/
  4. // @version 0.1.0
  5. // @description 将雨课堂网页版试卷导出为TikN可识别的格式。
  6. // @author Fairytale_Store
  7. // @match https://examination.xuetangx.com/*
  8. // @grant none
  9. // @license MIT
  10. // ==/UserScript==
  11.  
  12. function p(e){
  13. console.log(e)
  14. }
  15.  
  16. var pageContent
  17. function solve(){
  18. p("ok")
  19. pageContent = document.body.innerHTML;
  20. var dom=document.getElementsByClassName("subject-item")
  21. var problemDom=[];
  22. var list=["单选题","多选题","判断题"]
  23. for(var i=0;i<dom.length/2;i++)problemDom.push(dom[i+dom.length/2])
  24. p(problemDom)
  25. var str="";
  26. for(i=0;i<problemDom.length;i++){
  27. var more=1;
  28. var problemContent=problemDom[i].querySelectorAll(".clearfix p")[0]
  29. if(!problemContent){
  30. problemContent=problemDom[i].querySelectorAll(".clearfix")[0];
  31. more=2;
  32. }
  33. else{
  34. var idList=problemDom[i].querySelectorAll(".checkboxInput")
  35. var ansList=problemDom[i].querySelectorAll(".checkboxText")
  36. if(idList.length==0&&ansList.length==0){
  37. idList=problemDom[i].querySelectorAll(".radioInput")
  38. ansList=problemDom[i].querySelectorAll(".radioText")
  39. more=0;
  40. }
  41. }
  42. problemContent=problemContent.textContent.replace(/\n|\r/g, "")
  43.  
  44. str+=("第"+(i+1)+"题"+"("+list[more]+"):"+problemContent)+"<br>"
  45. if(more==2){
  46. continue;
  47. }
  48. p(idList)
  49. for(var j=0;j<idList.length;j++){
  50. var opt=idList[j].innerText.replace(/\n|\r/g, "")+":"+ansList[j].innerText.replace(/\n|\r/g, "")
  51. str+=opt+"<br>"
  52. }
  53. str+="<br>"
  54. }
  55. p(str)
  56. document.body.innerHTML=str;
  57. window.print()
  58. }
  59.  
  60.  
  61. class Question {
  62. constructor(Qtype, Qcontent, answerList, correctAnswer) {
  63. this.Qtype = Qtype;
  64. this.Qcontent = Qcontent;
  65. this.answerList = answerList;
  66. this.correctAnswer = correctAnswer;
  67. }
  68. }
  69.  
  70. function strReplace(str,key){
  71. if(str.includes(key)){
  72. return key;
  73. }
  74. return str;
  75. }
  76.  
  77. function saveStringToFile(str, filename) {
  78. var blob = new Blob([str], {type: "text/plain;charset=utf-8"});
  79. var link = document.createElement('a');
  80. link.href = window.URL.createObjectURL(blob);
  81. link.download = filename;
  82. link.click();
  83. }
  84.  
  85. function test(){
  86. p("ok")
  87. pageContent = document.body.innerHTML;
  88. var pd=document.querySelector(".time")
  89. if(pd){
  90. alert("这张试卷还没有完成,完成后再进行导出")
  91. return
  92. }
  93. var elements = document.querySelectorAll('.result_item');//所有题目的集合
  94.  
  95. var QList=[]
  96. for(var i=0;i<elements.length;i++){
  97. var cur=elements[i]
  98. //=========
  99. var Qtype=cur.querySelector(".item-type").textContent;//获取类型
  100. Qtype=strReplace(Qtype,"单选题")
  101. Qtype=strReplace(Qtype,"多选题")
  102. Qtype=strReplace(Qtype,"判断题")
  103. //==========
  104. var Qcontent=cur.querySelector('.clearfix.exam-font p');//获取题目描述
  105. if(!Qcontent)Qcontent=cur.querySelector('.clearfix.exam-font')
  106. Qcontent=Qcontent.innerText
  107. //=========
  108. var answerList=[] //获取单个题目的答案集合
  109. if(Qtype=="判断题"){
  110. answerList=["对","错"]
  111. }else{
  112. var ansList=cur.querySelectorAll(".radioText p")
  113. for(var j=0;j<ansList.length;j++){
  114. var tmp=ansList[j].innerText;
  115. if(tmp&&tmp!="")answerList.push(tmp)
  116. }
  117. }
  118. p(answerList)
  119. //=========
  120. var correctAnswer;
  121. try{
  122. correctAnswer=cur.querySelector('.item-footer--header').innerText.match(/正确答案:\s*(\S+)/)[1]; //获取正确答案
  123. }catch(error){
  124. correctAnswer="主观题答案获取等待下次开发"
  125. }
  126. if(!correctAnswer)correctAnswer=""
  127. //========
  128. QList.push(new Question(Qtype,Qcontent,answerList,correctAnswer))
  129. }
  130. var str=""
  131. for(var k=0;k<QList.length;k++){
  132. var q=QList[k]
  133. //str+="【"+q.Qtype+"】"
  134. str+=q.Qcontent
  135. //str+="<strong>"+q.correctAnswer+"</strong>"
  136. str+="\r\n"
  137. if(q.Qtype=="判断题")continue
  138. for(var x=0;x<q.answerList.length;x++){
  139. var id=String.fromCharCode(65 + x); //答案选项字母
  140. var choice=q.answerList[x]
  141. str+=id+"."+choice+"\r\n"
  142. }
  143. str+="#"+q.correctAnswer+"#"
  144. }
  145. var saveAll ="<TikS><本试卷使用TikN雨课堂导出工具V1.0自动生成>" + str
  146. saveStringToFile(saveAll,"导出习题.tik")
  147. //window.print()
  148. }
  149.  
  150. (function() {
  151. window.onload = function() {
  152. setTimeout(function() {
  153. test()
  154. //document.body.innerHTML=pageContent
  155. }, 3000);
  156. };
  157.  
  158.  
  159. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址