Thứ Bảy, 20 tháng 11, 2021

Code Javascript


  javascript:(function () { var script = document.createElement('script'); script.src="//cdn.jsdelivr.net/npm/eruda"; document.body.appendChild(script); script.onload = function () { eruda.init() } })();


video hướng dẫn: ấn vào đây  cũng là từ 2021 tùy vào nhân phẩm mỗi ng có ng làm dc còn lại thì ko chắc thế =P

Thứ Hai, 15 tháng 11, 2021

Code duolingo ( 2022 but just work with some lesson )

  1. https://www.youtube.com/channel/UC_OLBj-iftWE6IgC1wPjtCQ ung ho toi 1 sub nao
  2. // ==UserScript==
  3. // @name Duolingo-Cheat-Tool
  4. // @namespace http://tampermonkey.net/
  5. // @version 0.1
  6. // @description Auto answer Duolingo script!
  7. // @author Tran Quy <tranphuquy19@gmail.com>
  8. // @match https://www.duolingo.com/skill*
  9. // @icon https://www.google.com/s2/favicons?domain=duolingo.com
  10. // @grant none
  11. // ==/UserScript==
  12.  
  13. const DEBUG = true;
  14. let mainInterval;
  15.  
  16. const dataTestComponentClassName = 'e4VJZ';
  17.  
  18. const TIME_OUT = 1;
  19.  
  20. // Challenge types
  21. const CHARACTER_SELECT_TYPE = 'characterSelect';
  22. const CHARACTER_MATCH_TYPE = 'characterMatch'; // not yet
  23. const TRANSLATE_TYPE = 'translate';
  24. const LISTEN_TAP_TYPE = 'listenTap';
  25. const NAME_TYPE = 'name';
  26. const COMPLETE_REVERSE_TRANSLATION_TYPE = 'completeReverseTranslation';
  27. const LISTEN_TYPE = 'listen';
  28. const SELECT_TYPE = 'select';
  29. const JUDGE_TYPE = 'judge';
  30. const FORM_TYPE = 'form';
  31. const LISTEN_COMPREHENSION_TYPE = 'listenComprehension';
  32. const READ_COMPREHENSION_TYPE = 'readComprehension';
  33. const CHARACTER_INTRO_TYPE = 'characterIntro';
  34. const DIALOGUE_TYPE = 'dialogue';
  35. const SELECT_TRANSCRIPTION_TYPE = 'selectTranscription';
  36. const SPEAK_TYPE = 'speak';
  37. const SELECT_PRONUNCIATION_TYPE = 'selectPronunciation';
  38.  
  39. // Query DOM keys
  40. const CHALLENGE_CHOICE_CARD = '[data-test="challenge-choice-card"]';
  41. const CHALLENGE_CHOICE = '[data-test="challenge-choice"]';
  42. const CHALLENGE_TRANSLATE_INPUT = '[data-test="challenge-translate-input"]';
  43. const CHALLENGE_LISTEN_TAP = '[data-test="challenge-listenTap"]';
  44. const CHALLENGE_JUDGE_TEXT = '[data-test="challenge-judge-text"]';
  45. const CHALLENGE_TEXT_INPUT = '[data-test="challenge-text-input"]';
  46. const CHALLENGE_TAP_TOKEN = '[data-test="challenge-tap-token"]';
  47. const PLAYER_NEXT = '[data-test="player-next"]';
  48. const PLAYER_SKIP = '[data-test="player-skip"]';
  49. const BLAME_INCORRECT = '[data-test="blame blame-incorrect"]';
  50. const CHARACTER_MATCH = '[data-test="challenge challenge-characterMatch"]';
  51.  
  52. const clickEvent = new MouseEvent('click', {
  53. view: window,
  54. bubbles: true,
  55. cancelable: true
  56. });
  57.  
  58. function getChallengeObj(theObject) {
  59. let result = null;
  60. if (theObject instanceof Array) {
  61. for (let i = 0; i < theObject.length; i++) {
  62. result = getChallengeObj(theObject[i]);
  63. if (result) {
  64. break;
  65. }
  66. }
  67. }
  68. else {
  69. for (let prop in theObject) {
  70. if (prop == 'challenge') {
  71. if (typeof theObject[prop] == 'object') {
  72. return theObject;
  73. }
  74. }
  75. if (theObject[prop] instanceof Object || theObject[prop] instanceof Array) {
  76. result = getChallengeObj(theObject[prop]);
  77. if (result) {
  78. break;
  79. }
  80. }
  81. }
  82. }
  83. return result;
  84. }
  85.  
  86. function getChallenge() {
  87. // const dataTestComponentClassName = 'e4VJZ';
  88. const dataTestDOM = document.getElementsByClassName(dataTestComponentClassName)[0];
  89.  
  90. if (!dataTestDOM) {
  91. document.querySelectorAll(PLAYER_NEXT)[0].dispatchEvent(clickEvent);
  92. return null;
  93. } else {
  94. const dataTestAtrr = Object.keys(dataTestDOM).filter(att => /^__reactProps/g.test(att))[0];
  95. const childDataTestProps = dataTestDOM[dataTestAtrr];
  96. const { challenge } = getChallengeObj(childDataTestProps);
  97. return challenge;
  98. }
  99. }
  100.  
  101. function pressEnter() {
  102. document.dispatchEvent(new KeyboardEvent('keydown', { 'keyCode': 13, 'which': 13 }));
  103. }
  104.  
  105. function dynamicInput(element, msg) {
  106. let input = element;
  107. let lastValue = input.value;
  108. input.value = msg;
  109. let event = new Event('input', { bubbles: true });
  110. // hack React15
  111. event.simulated = true;
  112. // hack React16 内部定义了descriptor拦截value,此处重置状态
  113. let tracker = input._valueTracker;
  114. if (tracker) {
  115. tracker.setValue(lastValue);
  116. }
  117. input.dispatchEvent(event);
  118. }
  119.  
  120. function classify() {
  121. const challenge = getChallenge();
  122. if (!challenge) return;
  123. if (DEBUG) console.log(`${challenge.type}`, challenge);
  124. switch (challenge.type) {
  125. case SELECT_PRONUNCIATION_TYPE:
  126. case READ_COMPREHENSION_TYPE:
  127. case LISTEN_COMPREHENSION_TYPE:
  128. case FORM_TYPE: { // trắc nghiệm 1 đáp án
  129. const { choices, correctIndex } = challenge;
  130. if (DEBUG) console.log('READ_COMPREHENSION LISTEN_COMPREHENSION FORM', { choices, correctIndex });
  131. document.querySelectorAll(CHALLENGE_CHOICE)[correctIndex].dispatchEvent(clickEvent);
  132. return { choices, correctIndex };
  133. }
  134.  
  135. case SELECT_TYPE:
  136. case CHARACTER_SELECT_TYPE: { // trắc nghiệm 1 đáp án
  137. const { choices, correctIndex } = challenge;
  138. if (DEBUG) console.log('SELECT CHARACTER_SELECT', { choices, correctIndex });
  139. document.querySelectorAll(CHALLENGE_CHOICE_CARD)[correctIndex].dispatchEvent(clickEvent);
  140. return { choices, correctIndex };
  141. }
  142.  
  143. case CHARACTER_MATCH_TYPE: { // tập hợp các cặp thẻ
  144. const { pairs } = challenge;
  145. const tokens = document.querySelectorAll(CHALLENGE_TAP_TOKEN);
  146. pairs.forEach((pair) => {
  147. for(let i = 0; i < tokens.length; i++) {
  148. if(tokens[i].innerText === pair.transliteration || tokens[i].innerText === pair.character) {
  149. tokens[i].dispatchEvent(clickEvent);
  150. }
  151. }
  152. })
  153. return { pairs };
  154. }
  155.  
  156. case TRANSLATE_TYPE: {
  157. const { correctTokens, correctSolutions } = challenge;
  158. if (DEBUG) console.log('TRANSLATE', { correctTokens });
  159. if (correctTokens) {
  160. const tokens = document.querySelectorAll(CHALLENGE_TAP_TOKEN);
  161. let ignoreTokeIndexes = [];
  162. for (let correctTokenIndex in correctTokens) {
  163. for (let tokenIndex in tokens) {
  164. const token = tokens[tokenIndex];
  165. if (ignoreTokeIndexes.includes(tokenIndex)) continue;
  166. if (token.innerText === correctTokens[correctTokenIndex]) {
  167. token.dispatchEvent(clickEvent);
  168. ignoreTokeIndexes.push(tokenIndex);
  169. if(DEBUG) console.log(`correctTokenIndex [${correctTokens[correctTokenIndex]}] - tokenIndex [${token.innerText}]`);
  170. break;
  171. };
  172. }
  173. }
  174. } else if (correctSolutions) {
  175. let textInputElement = document.querySelectorAll(CHALLENGE_TRANSLATE_INPUT)[0];
  176. dynamicInput(textInputElement, correctSolutions[0]);
  177. }
  178.  
  179. return { correctTokens };
  180. }
  181.  
  182. case NAME_TYPE: { // nhập đán án
  183. const { correctSolutions } = challenge;
  184. if (DEBUG) console.log('NAME', { correctSolutions });
  185. let textInputElement = document.querySelectorAll(CHALLENGE_TEXT_INPUT)[0];
  186. let correctSolution = correctSolutions[0];
  187. dynamicInput(textInputElement, correctSolution);
  188. return { correctSolutions };
  189. }
  190.  
  191. case COMPLETE_REVERSE_TRANSLATION_TYPE: { // điền vào từ còn thiếu
  192. const { displayTokens } = challenge;
  193. if (DEBUG) console.log('COMPLETE_REVERSE_TRANLATION', { displayTokens });
  194. const { text } = displayTokens.filter(token => token.isBlank)[0];
  195. let textInputElement = document.querySelectorAll(CHALLENGE_TEXT_INPUT)[0];
  196. dynamicInput(textInputElement, text);
  197. return { displayTokens };
  198. }
  199.  
  200. case LISTEN_TAP_TYPE: {
  201. const { correctTokens } = challenge;
  202. if (DEBUG) console.log('LISTEN_TAP', { correctTokens });
  203. const tokens = document.querySelectorAll(CHALLENGE_TAP_TOKEN);
  204. for (let wordIndex in correctTokens) {
  205. tokens.forEach((token) => {
  206. if (token.innerText === correctTokens[wordIndex]) {
  207. token.dispatchEvent(clickEvent);
  208. };
  209. });
  210. }
  211. return { correctTokens };
  212. }
  213.  
  214. case LISTEN_TYPE: { // nghe và điền vào ô input
  215. const { prompt } = challenge;
  216. if (DEBUG) console.log('LISTEN', { prompt });
  217. let textInputElement = document.querySelectorAll(CHALLENGE_TRANSLATE_INPUT)[0];
  218. dynamicInput(textInputElement, prompt);
  219. return { prompt };
  220. }
  221.  
  222. case JUDGE_TYPE: { // trắc nghiệm 1 đáp án
  223. const { correctIndices } = challenge;
  224. if (DEBUG) console.log('JUDGE', { correctIndices });
  225. document.querySelectorAll(CHALLENGE_JUDGE_TEXT)[correctIndices[0]].dispatchEvent(clickEvent);
  226. return { correctIndices };
  227. }
  228.  
  229. case DIALOGUE_TYPE:
  230. case CHARACTER_INTRO_TYPE: { // trắc nghiệm 1 đáp án
  231. const { choices, correctIndex } = challenge;
  232. if (DEBUG) console.log('DIALOGUE CHARACTER_INTRO', { choices, correctIndex });
  233. document.querySelectorAll(CHALLENGE_JUDGE_TEXT)[correctIndex].dispatchEvent(clickEvent);
  234. return { choices, correctIndex };
  235. }
  236.  
  237. case SELECT_TRANSCRIPTION_TYPE: {
  238. const { choices, correctIndex } = challenge;
  239. if (DEBUG) console.log('DIALOGUE CHARACTER_INTRO', { choices, correctIndex });
  240. document.querySelectorAll(CHALLENGE_JUDGE_TEXT)[correctIndex].dispatchEvent(clickEvent);
  241. return { choices, correctIndex };
  242. }
  243.  
  244. case SPEAK_TYPE: {
  245. const { prompt } = challenge;
  246. if (DEBUG) console.log('SPEAK', { prompt });
  247. document.querySelectorAll(PLAYER_SKIP)[0].dispatchEvent(clickEvent);
  248. return { prompt };
  249. }
  250.  
  251. default:
  252. break;
  253. }
  254. }
  255.  
  256. function breakWhenIncorrect() {
  257. const isBreak = document.querySelectorAll(BLAME_INCORRECT).length > 0;
  258. if (isBreak) {
  259. console.log('Incorrect, stopped');
  260. clearInterval(mainInterval);
  261. };
  262. }
  263.  
  264. function main() {
  265. try {
  266. let isPlayerNext = document.querySelectorAll(PLAYER_NEXT)[0].textContent.toUpperCase();
  267. if (isPlayerNext.valueOf() !== 'CONTINUE') {
  268. classify();
  269. breakWhenIncorrect()
  270. pressEnter();
  271. }
  272. setTimeout(pressEnter, 1);
  273. } catch (e) {
  274. console.log(e);
  275. }
  276. }
  277.  
  278. function solveChallenge() {
  279. mainInterval = setInterval(main, TIME_OUT);
  280. console.log(`to stop run this command clearInterval(${mainInterval})`);
  281. }
  282.  
  283. // solveChallenge();
  284. (solveChallenge)();
  285. 1

Có lẽ nên cs 1 video mới=)