可可英语刷单词助手

对于可可英语网页版,自动刷单词

目前为 2024-08-19 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name 可可英语刷单词助手
  3. // @namespace http://tampermonkey.net/
  4. // @version V1.0.1
  5. // @description 对于可可英语网页版,自动刷单词
  6. // @author Boxsky
  7. // @match https://bdc.kekenet.com/*
  8. // @icon https://www.google.com/s2/favicons?sz=64&domain=kekenet.com
  9. // @grant none
  10. // @license MIT
  11. // ==/UserScript==
  12.  
  13. (function() {
  14. 'use strict';
  15. var div = document.createElement('div');
  16.  
  17. var panDu = 0;
  18. var displayoption = 0;
  19. var Detapotion = 0;
  20. var Detapotioncount = 1;
  21. var Modecount = -1;
  22. var word = [15];
  23. var wordComment =[15]
  24. var audioData = [15]
  25. var optionString = [];
  26. var optionbutten;
  27. var optionData;
  28. var Detaoption1 = 0;
  29. var wordcount = 0;
  30. var Modecountend = 0;
  31. div.style.position = 'fixed';
  32. div.style.bottom = '10px';
  33. div.style.right = '10px';
  34. div.style.width = '200px';
  35. div.style.height = '200px';
  36. div.style.backgroundColor = '#f9f9f9';
  37. div.style.border = '1px solid #ccc';
  38. div.style.padding = '10px';
  39. div.style.zIndex = '10000';
  40. div.style.overflow = 'auto';
  41. var p = document.createElement('p');
  42. p.textContent = '显示设置';
  43. p.style.color = 'red';
  44. p.style.marginLeft = '10px';
  45. p.style.marginTop = '8px';
  46.  
  47. var display = document.createElement('display');
  48. p.textContent = 'tmp';
  49. p.style.color = 'blue';
  50. p.style.marginLeft = '10px';
  51. p.style.marginTop = '8px';
  52. div.appendChild(p);
  53. var elementdata;
  54. var transferdataText;
  55. var button = document.createElement('button');
  56. button.style.marginLeft = '10px';
  57. button.style.marginTop = '10px';
  58. button.textContent = '测试数据按钮';
  59. var optionAnswer = 0;
  60. button.addEventListener('click', function() {
  61. optionAnswer = 1;
  62. var element1next1 = document.getElementsByClassName("word-btn-do")[0];
  63. if (element1next1) {
  64. element1next1.click();
  65. }
  66. var element1next2 = document.getElementsByClassName("res-btn-next")[0];
  67. if (element1next2) {
  68. element1next2.click();
  69. }
  70. console.log(word[0]);
  71.  
  72. });
  73. div.appendChild(button);
  74. document.body.appendChild(div);
  75. var buttonDeta = document.createElement('button');
  76. buttonDeta.style.marginLeft = '10px';
  77. buttonDeta.style.marginTop = '13px';
  78. buttonDeta.textContent = '自动模式';
  79. div.appendChild(buttonDeta);
  80. buttonDeta.addEventListener('click', function() {
  81. if(Detapotioncount){
  82. Detaoption1 = 1;
  83. buttonDeta.textContent = '自动模式开启';
  84. Detapotioncount = 0;
  85. }else{
  86. Detaoption1 = 0;
  87. buttonDeta.textContent = '自动模式关闭';
  88. Detapotioncount = 1;
  89. }
  90. });
  91. var buttonDeta1 = document.createElement('button');
  92. buttonDeta1.style.marginLeft = '10px';
  93. buttonDeta1.style.marginTop = '20px';
  94. div.appendChild(buttonDeta1);
  95. // 创建一个新的 MutationObserver 对象
  96. var countB = 0;
  97. var countendNum = 0;
  98. var observer = new MutationObserver(function(mutations) {
  99. if(Modecountend == 1){
  100. setTimeout(function() {
  101. var element1next2 = document.getElementsByClassName("res-btn-next")[0];
  102. if (element1next2) {
  103. element1next2.click();
  104. }
  105. Modecountend = 0;
  106. },2000);
  107. }
  108. //buttonDeta1.textContent = ""
  109. setTimeout(function() {
  110. var judgePage = document.querySelector("div[data-v-f24f413a].top-title");
  111. var judgePagetrans = judgePage.textContent;
  112. var judge = /单词预览/;
  113. var judgeresult = judge.test(judgePagetrans);
  114. if(judgeresult){
  115. for(var pushcount = 0 ; pushcount < 15 ; pushcount++){
  116. word.shift();
  117. wordComment.shift();
  118. audioData.shift();
  119. }
  120.  
  121. Modecount = 5;
  122. p.textContent = "单词预览模式"
  123.  
  124. setTimeout(function() {
  125. var elementComment = document.querySelectorAll('span[data-v-f24f413a]');
  126. elementComment.forEach(function(element){
  127. var text = element.innerText;
  128. var wordbiaoshou = /标熟/;
  129. var result = wordbiaoshou.test(text);
  130. if(result){
  131. return;
  132. }
  133. text = text.replace(/[\n\s]/g, '');
  134. wordComment.push(text);
  135. });
  136. var elementaudio = document.querySelectorAll('audio[data-v-f24f413a]');
  137. elementaudio.forEach(function(element){
  138. var text = element.src;
  139. audioData.push(text);
  140. });
  141. let elementWordtrans = document.querySelectorAll("b[data-v-f24f413a]");
  142. elementWordtrans.forEach(function(element){
  143. var text = element.innerText;
  144. console.log(text);
  145. word.push(text);
  146. });
  147. if(wordcount == 1){
  148. var element1next2 = document.getElementsByClassName("word-btn-do")[0];
  149. if (element1next2) {
  150. element1next2.click();
  151. }
  152. wordcount = 0;
  153. }else{
  154. wordcount++;
  155. }
  156.  
  157.  
  158. }, 1000);
  159. }
  160. },1000);
  161. if(Modecount != 5){
  162. var Modeoption = document.querySelector("div[data-v-6ca8079b] .exam-top-left");
  163. var Modeoptiontran = Modeoption.textContent.substring(0, 4);
  164. var textcoun = Modeoption.textContent.substring(5, 7);
  165. var textcounall = Modeoption.textContent.substring(8, 10);
  166. if(textcoun === textcounall){
  167. Modecountend = 1;
  168. }
  169. var Mode1 = /看单词选/;
  170. var Mode2 = /根据例句/;
  171. var Mode3 = /听发音选/;
  172. var Mode4 = /看解释选/;
  173. var Mode5 = /补全单词/;
  174. var Mode6 = /下一关/;
  175. var result = Mode1.test(Modeoptiontran);
  176. if(result){p.textContent = "单词模式";Modecount = 0;};
  177. result = Mode2.test(Modeoptiontran);
  178. if(result){p.textContent = "例句模式";Modecount = 1;}
  179. result = Mode3.test(Modeoptiontran);
  180. if(result){p.textContent = "听音模式";Modecount = 2;}
  181. result = Mode4.test(Modeoptiontran);
  182. if(result){p.textContent = "解释模式";Modecount = 3;}
  183. result = Mode5.test(Modeoptiontran);
  184. if(result){p.textContent = "补全模式";
  185. Modecount = 4;
  186. }
  187. }
  188. console.log(Modecount);
  189. if(Detapotion){
  190. alert("模式"+Modecount);
  191. }
  192. if(optionString.length != 0){
  193. for(var i = 1; i < 5 ; i++){
  194. optionString.shift();
  195. }
  196. }
  197. var elementoption = document.querySelectorAll("div[data-v-6ca8079b].exam-option");
  198. elementoption.forEach(function(element) {
  199. var text = element.innerText;
  200. text = text.replace(/[\n\s]/g, '');
  201. optionString.push(text);
  202. });
  203. elementdata = document.querySelector("div[data-v-6ca8079b].exam-row.exam-question");
  204. if (elementdata) {
  205. transferdataText = elementdata.innerText;
  206. transferdataText = transferdataText.replace(/[\n\s]/g, '');
  207. button.textContent = transferdataText;
  208. }else{
  209. var elementT = document.querySelector("audio[data-v-6ca8079b]");
  210. var idData = elementT.id;
  211. var idtmp = idData.split('-');
  212. var number = idtmp[1];
  213. button.textContent = '听力题ID: ' + number;
  214. }
  215. if(Modecount == 1){
  216. for(var optionNum1 = 0 ; optionNum1 < 4 ; optionNum1++ ){
  217. for(var wordNum1 = 0 ; wordNum1 < 15 ; wordNum1++){
  218. if(optionString[optionNum1] === word[wordNum1]){
  219. var optionwrdtran1 = optionNum1 + 1;
  220. optionbutten = optionwrdtran1;
  221. console.log("1option" + optionwrdtran1);
  222. if(Detaoption1){
  223. var element1 = document.getElementsByClassName("exam-option")[optionwrdtran1 - 1];
  224. element1.click();
  225. }
  226. break;
  227. }
  228. }
  229. }
  230. setTimeout(function() {
  231. var element1next2 = document.getElementsByClassName("exam-next")[0];
  232. if (element1next2) {
  233. element1next2.click();
  234. }
  235. Modecountend = 0;
  236. },2000);
  237. }
  238. if(Modecount == 3){
  239. console.log(transferdataText);
  240. for(var wordNum3 = 0 ; wordNum3 < 15 ; wordNum3++){
  241. if(transferdataText === wordComment[wordNum3]){
  242. for(var optionNum3 = 0 ; optionNum3 < 4 ; optionNum3++){
  243. if(optionString[optionNum3] === word[wordNum3]){
  244. var optionwordtran3 = optionNum3 + 1;
  245. console.log("0option = "+optionwordtran3);
  246. if(Detaoption1){
  247. var element3 = document.getElementsByClassName("exam-option")[optionwordtran3 - 1];
  248. element3.click();
  249. }
  250. optionbutten = optionwordtran3;
  251. break;
  252. }
  253. }
  254. }
  255. }
  256. }
  257. if(Modecount == 0){
  258. for(var wordNum0 = 0 ; wordNum0 < 15 ; wordNum0++){
  259. if(word[wordNum0] === transferdataText){
  260. for(var optionNum0 = 0 ; optionNum0 < 4 ; optionNum0++){
  261. if(optionString[optionNum0] === wordComment[wordNum0]){
  262. var optionwordtran0 = optionNum0 + 1;
  263. console.log("0option = "+optionwordtran0);
  264. if(Detaoption1){
  265. var element0 = document.getElementsByClassName("exam-option")[optionwordtran0 - 1];
  266. element0.click();
  267. }
  268. optionbutten = optionwordtran0;
  269. break;
  270. }
  271. }
  272. }
  273. }
  274. }
  275. if(Modecount == 2){
  276. var ExamString = document.querySelector("audio[data-v-6ca8079b]");
  277. var textString = ExamString.src;
  278. for(var id = 0; id < 15 ; id++){
  279. if(textString === audioData[id]){
  280. optionData = id;
  281. break;
  282. }
  283. }
  284. var count = 0;
  285. console.log("str");//wordComment
  286. for( var optionword = 0 ; optionword < 4 ; optionword++){
  287. if(wordComment[optionData] === optionString[optionword]){
  288. var optionwordtran = optionword + 1;
  289. console.log("2option = "+optionwordtran);
  290. if(Detaoption1){
  291. var element2 = document.getElementsByClassName("exam-option")[optionwordtran - 1];
  292. element2.click();
  293. }
  294.  
  295. optionbutten = optionwordtran;
  296. break;
  297. }
  298. }
  299. }
  300. if(Modecount == 4){
  301. var elementB = document.querySelectorAll(".fill-space");
  302. elementB.forEach(function(element) {
  303. countB++;
  304. });
  305. var wordkeytmp = [];
  306. var wordexamNum;
  307. var prmword;
  308. for(wordexamNum = 0; wordexamNum < 15 ; wordexamNum++){
  309. if(transferdataText === wordComment[wordexamNum]){
  310. console.log(word[wordexamNum]);
  311. prmword = word[wordexamNum];
  312. }
  313. }
  314. var wordkeyData = document.querySelectorAll("div[data-v-6ca8079b] .exam-row.exam-question");
  315. setTimeout(function(){
  316. },1000);
  317. var countkey = 0;
  318. wordkeyData.forEach(function(element) {
  319. var text = element.innerText;
  320. if(countkey != 0){
  321. wordkeytmp.push(text);
  322. }
  323. console.log(text);
  324. countkey++;
  325. });
  326. var wordSplicing = wordkeytmp.join("");
  327. var keykey = [];
  328. for(var keyword = 0; keyword < wordSplicing.length ; keyword++){
  329. if(wordSplicing[keyword] != prmword[keyword]){
  330. keykey.push(prmword[keyword]);
  331. }
  332. }
  333. var optionkeyData = document.querySelectorAll("div[data-v-6ca8079b] .exam-key");
  334. var optionkeyDatarr = [];
  335. optionkeyData.forEach(function(element){
  336. var text = element.textContent;
  337. optionkeyDatarr.push(text);
  338. });
  339. var optionNum = 0;
  340. for(var optionkeyNum = 0 ; optionkeyNum < 9 ; optionkeyNum++){
  341. if(optionkeyDatarr[optionkeyNum] == keykey[optionNum] || optionkeyNum == 8){
  342.  
  343. if(optionkeyNum != 8){
  344. var buttons = document.getElementsByClassName("exam-key")[optionkeyNum];
  345. buttons.click();
  346. optionNum++;
  347. }else if(optionkeyNum == 8) {
  348. buttons = document.getElementsByClassName("exam-key")[9];
  349. buttons.click();
  350. }
  351.  
  352. }
  353. }
  354. }
  355. if(Detapotion){
  356. setTimeout(function() {
  357. displayoption++;
  358. if(displayoption == 2){
  359. alert(optionString);
  360. displayoption =0;
  361. }
  362. }, 1000);
  363. }
  364. Modecount = -1;
  365. console.log('end');
  366.  
  367. });
  368. observer.observe(document, { childList: true, subtree: true });
  369. })();

QingJ © 2025

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