AnswerTip

http://tampermonkey.net/

  1. // ==UserScript==
  2. // @name AnswerTip
  3. // @description http://tampermonkey.net/
  4. // @version 0.32
  5. // @author polygon
  6. // @icon data:image/png;base64,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
  7. // @match https://changjiang.yuketang.cn/*/exercise/*
  8. // @match https://changjiang-exam.yuketang.cn/exam/*
  9. // @match https://changjiang.yuketang.cn/*
  10. // @match https://www.xuetangx.com/*/exercise/*
  11. // @match https://mooc1.chaoxing.com/work/doHomeWorkNew*
  12. // @match https://examination.xuetangx.com/exam/*
  13. // @match https://onlineexamh5new.zhihuishu.com/*
  14. // @grant GM_xmlhttpRequest
  15. // @grant GM_addStyle
  16. // @grant GM_getValue
  17. // @grant GM_setValue
  18. // @grant GM_addElement
  19. // @run-at document-end
  20. // @namespace http://tampermonkey.net/
  21. // ==/UserScript==
  22. (function() {
  23. const order = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']
  24. const n = 10
  25. const wait = 3 // s
  26. const configs = {
  27. 'onlineexamh5new.zhihuishu.com': {
  28. main: '.examPaper_subject', // 答案要展示的父级元素节点,会append到该Node下
  29. question: '.subject_describe', // 问题,题目所在位置,其innerText属性是问题(不含选项)
  30. options: '.subject_node p span, .node_detail p', // 每个选项的位置,会根据它匹配多个Node
  31. select: 'onChecked', // 点击后,相应属性增加值,因为有的选项需要多次点击,所以增加此用于判断是否点击上
  32. // 一些自定义添加的答案区域style
  33. style: `
  34. background-color: #f5f5f5;
  35. height: 200px;
  36. overflow-y: scroll;
  37. `
  38. },
  39. 'changjiang.yuketang.cn': {
  40. main: '.item-body', // 答案要展示的父级元素节点,会append到该Node下
  41. question: '.problem-body', // 问题,题目所在位置,其innerText属性是问题(不含选项)
  42. options: '.item-body ul li label', // 每个选项的位置,会根据它匹配多个Node
  43. select: 'is-checked', // 点击后,相应属性增加值,因为有的选项需要多次点击,所以增加此用于判断是否点击上
  44. // 一些自定义添加的答案区域style
  45. style: `
  46. background-color: #f5f5f5;
  47. `
  48. },
  49. 'changjiang-exam.yuketang.cn': {
  50. main: '.item-body',
  51. question: 'h4',
  52. options: '.item-body ul li label',
  53. select: 'is-checked',
  54. style: `
  55. background-color: #f5f5f5;
  56. height: 200px;
  57. overflow-y: scroll;
  58. `
  59. },
  60. 'www.xuetangx.com': {
  61. main: '.courseActionLesson',
  62. question: '.leftQuestion',
  63. options: '.leftradio',
  64. select: 'active',
  65. style: `
  66. background-color: #fcfcfc;
  67. border: 1px solid hsla(0,0%,81.2%,.31);
  68. width: 500px;
  69. height: 200px;
  70. overflow-y: scroll;
  71. `
  72. },
  73. 'mooc1.chaoxing.com': {
  74. main: '.TiMu',
  75. question: '.Zy_TItle div p',
  76. options: 'ul li',
  77. select: 'Hover',
  78. style: `
  79. background-color: #fcfcfc;
  80. height: 200px;
  81. overflow-y: scroll;
  82. `
  83. },
  84. 'examination.xuetangx.com': {
  85. main: '.subject-item',
  86. question: '.item-body',
  87. options: 'ul li',
  88. select: 'is-checked',
  89. style: `
  90. background-color: #fcfcfc;
  91. height: 200px;
  92. overflow-y: scroll;
  93. `
  94. }
  95. }
  96. let url = window.location.href
  97. let host = Object.keys(configs).filter((host) => {
  98. if (url.includes(host)) {
  99. return true
  100. }
  101. return false
  102. })
  103. if (host.length == 0) return
  104. const config = configs[host[0]]
  105. GM_addStyle(`
  106. .answer-polygon {
  107. ${config.style};
  108. font-size: 14px;
  109. border-radius: 4px;
  110. padding: 10px 15px;
  111. margin-bottom: 20px;
  112. text-align: left;
  113. font-family: -apple-system,SF UI Text,Arial,PingFang SC,Hiragino Sans GB,Microsoft YaHei,WenQuanYi Micro Hei,"sans-serif";
  114. }
  115. `)
  116. let cookieSet = () => {
  117. GM_xmlhttpRequest({
  118. method: 'POST',
  119. url: 'https://tiku.fenbi.com/android/tourist/enter',
  120. responseType: 'json',
  121. onload: (xhr) => {
  122. const data = xhr.response
  123. let cookie = `userid=${data.userId}; tourist=${data.touristToken};`
  124. console.log(cookie)
  125. }
  126. })
  127. }
  128. let clickOption = (optionNodes, text) => {
  129. optionNodes.forEach((optionNode) => {
  130. let option_text = optionNode.innerText.replaceAll('[p]', '').replaceAll('[/p]', '').split('\n').slice(-1)
  131. console.log(option_text, text)
  132. if (option_text.includes(text)||text.includes(option_text)) {
  133. let id = setInterval(() => {
  134. if (!optionNode.innerHTML.includes(config.select)) {
  135. optionNode.click()
  136. } else {
  137. clearInterval(id)
  138. }
  139. }, 3000)
  140. }
  141. })
  142. }
  143. let answerParser = (data, answerNode, optionNodes, mainNode) => {
  144. let s = ''
  145. let answer_groups = []
  146. for (let i=0;i<n;i++) {
  147. let item = data['questionList'][i]
  148. // 1 题目
  149. s += item['content'].replaceAll('[', '<').replaceAll(']', '>') + '<br/>'
  150. const re = new RegExp("[`~!@#$^&*()=|{}':;',\\[\\].<>/?~!@#¥……&*()——|{}【】‘;:”“'。,、?%+_]", 'g');
  151. let same = item['content'].replaceAll(re, '').includes(mainNode.getAttribute('currentQuestion').replaceAll(re, '').split('\n')[0])
  152. if (same) {
  153. answer_groups.push([])
  154. }
  155. // 2 正确答案
  156. // 2.1 选项形式 ABCD
  157. if (item['correctAnswer'].hasOwnProperty('choice')) {
  158. let choice_indexes = item['correctAnswer']['choice'].split(',')
  159. if (choice_indexes.length > 0) {
  160. let choice_orders = []
  161. for (let j=0;j<choice_indexes.length;j++) {
  162. let choice_order = order[parseInt(choice_indexes[j])]
  163. if (!choice_orders.includes(choice_order)) {
  164. choice_orders.push(choice_order)
  165. }
  166. }
  167. s += '<p>' + choice_orders.join('') + '</p><br/>'
  168. // choice_orders = ['A', 'B', 'C']
  169. // 选项
  170. if (item['accessories'].length > 0){
  171. item['accessories'] = item['accessories'].filter((item) => {
  172. return (item.hasOwnProperty('options'))
  173. })
  174. if (item['accessories'].length > 0 && item['accessories'][0]['options'].length > 0) {
  175. let options = item['accessories'][0]['options']
  176. for (let j=0;j<options.length;j++) {
  177. let option = options[j].replace('[p]', '').replace('[/p]', '')
  178. if (choice_orders.includes(order[j])) {
  179. if (same) {
  180. answer_groups[answer_groups.length-1].push(options[j])
  181. }
  182. // if (same) clickOption(optionNodes, options[j])
  183. s += `<b>[${order[j]}] ` + option + '</b><br/>'
  184. } else {
  185. s += `[${order[j]}] ` + option + '<br/>'
  186. }
  187.  
  188. }
  189.  
  190. }
  191. }
  192. }
  193. // 2.2 文字描述形式
  194. } else if (item['correctAnswer'].hasOwnProperty('answer')) {
  195. let text = item['correctAnswer']['answer']
  196. .replace('', '<br/>')
  197. .replace('\u0001', '<br/>')
  198. .replace('\x01', '<br/>')
  199. .replace(/-+/g, '<br/>')
  200. .replaceAll('[', '<')
  201. .replaceAll(']', '>')
  202. .replace(';;', ';')
  203. if (same) {
  204. text.replace('<p>', '')
  205. .replace('</p>', '')
  206. .split('<br/>')
  207. .forEach((option_text) => {
  208. answer_groups[answer_groups.length-1].push(option_text)
  209. // clickOption(optionNodes, option_text)
  210. })
  211. }
  212. s += '<b>' + text + '</b>'
  213. }
  214. if (i < n-1) {
  215. s += '<br/><hr/><br/>'
  216. }
  217. }
  218. // 判断是否为多选
  219. let multi = false
  220. answer_groups.forEach((group) => {
  221. if (group.length > 1) {
  222. multi = true
  223. }
  224. })
  225. if (multi) {
  226. answer_groups = answer_groups.filter((group) => {
  227. return group.length > 1
  228. })
  229. }
  230. let answers = []
  231. if (answer_groups.length == 1) {
  232. answers = answer_groups[0]
  233. } else {
  234. // 取交集
  235. // 得到所有答案元素
  236. let answer_items = []
  237. answer_groups.forEach((group) => {
  238. group.forEach((item) => {
  239. if (!answer_items.includes(item)) {
  240. answer_items.push(item)
  241. }
  242. })
  243. })
  244. answers = answer_items.filter((item) => {
  245. let b = true
  246. answer_groups.forEach((group) => {
  247. if (!group.includes(item)) {
  248. b = false
  249. }
  250. })
  251. return b
  252. })
  253. }
  254. console.log(answers)
  255. answers.forEach((answer) => {
  256. clickOption(optionNodes, answer)
  257. })
  258. answerNode.innerHTML = s
  259. }
  260. let searchAnswer = (text, answerNode, optionNodes, mainNode) => {
  261. GM_xmlhttpRequest({
  262. method: 'POST',
  263. url: 'https://schoolapi.fenbi.com/college/android/search-item/search?format=ubb&searchType=2&text=' + encodeURIComponent(text),
  264. responseType: 'json',
  265. onload: (xhr) => {
  266. let res = xhr.response
  267. let enc = res['data']
  268. if (enc == null) {
  269. if (res.errMessage.includes('次数')) {
  270. cookieSet()
  271. }
  272. answerNode.innerHTML = xhr.response.errMessage
  273. setTimeout(() => {
  274. mainNode.setAttribute('currentQuestion', '')
  275. }, wait * 1000);
  276. return
  277. }
  278. // 解密
  279. let t = new Date().valueOf()
  280. GM_xmlhttpRequest({
  281. method: 'POST',
  282. url: `http://101.35.131.22:5500/decrypt`,
  283. headers: {
  284. "Content-Type": "application/x-www-form-urlencoded"
  285. },
  286. data: `enc=${enc}`,
  287. responseType: 'text',
  288. onload: (xhr) => {
  289. let data = JSON.parse(xhr.responseText)
  290. answerParser(data, answerNode, optionNodes, mainNode)
  291. }
  292. })
  293. },
  294. ontimeout: function () {
  295. answer.innerHTML = "No Sugesstion"
  296. }
  297. })
  298. }
  299. cookieSet()
  300. let id = setInterval(() => {
  301. let mainNodes = document.querySelectorAll(config.main)
  302. if (mainNodes.length == 0) return
  303. clearInterval(id)
  304. mainNodes.forEach(function(mainNode) {
  305. mainNode.setAttribute('currentQuestion', '')
  306. setInterval(() => {
  307. let questionNode = mainNode.querySelector(config.question)
  308. if (questionNode == null) return
  309. let text = questionNode.innerText.slice(0, 233)
  310. if (text == mainNode.getAttribute('currentQuestion')) return
  311. mainNode.setAttribute('currentQuestion', text)
  312. let answerNode = mainNode.querySelector('.answer-polygon')
  313. if (answerNode == null) {
  314. answerNode = document.createElement('div')
  315. answerNode.setAttribute('class', 'answer-polygon')
  316. mainNode.append(answerNode)
  317. }
  318. try {
  319. answerNode.innerHTML = 'searching...'
  320. } catch {
  321. return
  322. }
  323. let optionNodes = mainNode.querySelectorAll(config.options)
  324. searchAnswer(text, answerNode, optionNodes, mainNode)
  325. }, 6000)
  326. })
  327. }, 233)
  328. })();

QingJ © 2025

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