Greasy Fork is available in English.

Typescript helpers

Special click, import and execute tesseract and opencv, alert blocking

  1. // ==UserScript==
  2. // @name Typescript helpers
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.1
  5. // @description Special click, import and execute tesseract and opencv, alert blocking
  6. // @author Andrewblood
  7. // @match *://*/*
  8. // @icon https://coinfinity.top/favicon.ico
  9. // @grant none
  10. // @license MIT
  11. // ==/UserScript==
  12.  
  13. (function() {
  14. 'use strict';
  15.  
  16. window.alert = function() {
  17. // Nichts tun, um den Alert zu blockieren
  18. };
  19.  
  20. window.confirm = function() {
  21. // Nichts tun, um den Alert zu blockieren
  22. };
  23.  
  24. window.anonymous = function() {
  25. // Nichts tun, um den Alert zu blockieren
  26. };
  27.  
  28.  
  29.  
  30. // @grant window.focus
  31. // @grant window.close
  32. // @grant unsafeWindow
  33.  
  34. // Funktion für das Schließen der Tabs
  35. var oldFunction = unsafeWindow.open;
  36. var lastOpenedWindow = null; // Variable zur Speicherung des zuletzt geöffneten Fensters
  37.  
  38. function closeAdFunction(url, target) {
  39. // Setze den Namen des Fensters
  40. var windowName = (target && target !== "_blank") ? target : "popUpWindow";
  41.  
  42. // Öffne das Fenster und speichere die Referenz
  43. lastOpenedWindow = oldFunction(url, windowName);
  44. return lastOpenedWindow;
  45. }
  46.  
  47. unsafeWindow.open = closeAdFunction;
  48.  
  49. // Schließe das letzte geöffnete Fenster, wenn die Seite verlassen wird
  50. unsafeWindow.onbeforeunload = function() {
  51. if (lastOpenedWindow) {
  52. lastOpenedWindow.close(); // Schließe das Fenster
  53. lastOpenedWindow = null; // Setze die Referenz zurück
  54. }
  55. };
  56.  
  57.  
  58.  
  59. // Functions for REAL Click
  60. function triggerMouseEvent(elm, eventType) {
  61. let clickEvent = document.createEvent('MouseEvents');
  62. clickEvent.initEvent(eventType, true, true);
  63. elm.dispatchEvent(clickEvent);
  64. }
  65.  
  66. function alternativeClick(elm) {
  67. triggerMouseEvent(elm, "mouseover");
  68. triggerMouseEvent(elm, "mousedown");
  69. triggerMouseEvent(elm, "mouseup");
  70. triggerMouseEvent(elm, "click");
  71. }
  72.  
  73. function specialClick(selector) {
  74. var interval001 = setInterval(function() {
  75. // Wähle den Button anhand des Selektors
  76. var button = document.querySelector(selector);
  77. // Wähle das CAPTCHA-Element und das Response-Element
  78. var captchaElement = document.querySelector(".captcha-modal, .g-recaptcha, .h-captcha");
  79. var captchaResponse = document.querySelector("#g-recaptcha-response, #g-recaptcha-response, #fform > center > div > div > input[type=hidden]");
  80.  
  81. // Überprüfe, ob das CAPTCHA-Element vorhanden ist
  82. if (captchaElement) {
  83. // Falls das CAPTCHA ausgefüllt ist und der Button sichtbar und aktiv ist, klicke den Button
  84. if (captchaResponse && captchaResponse.value.length > 0 && button && button.offsetHeight > 0 && !button.hasAttribute('disabled')) {
  85. alternativeClick(button);
  86. console.log("Element is clicked.");
  87. clearInterval(interval001);
  88. }
  89. } else {
  90. // Falls kein CAPTCHA vorhanden ist, überprüfe nur die Sichtbarkeit des Buttons
  91. if (button && button.offsetHeight > 0 && !button.hasAttribute('disabled')) {
  92. alternativeClick(button);
  93. console.log("Element is clicked.");
  94. clearInterval(interval001);
  95. }
  96. }
  97. }, 500);
  98. }
  99.  
  100. function searchFirstButtonWithInnerText(text) {
  101. let interval = setInterval(function() {
  102. let buttons = document.querySelectorAll('button');
  103.  
  104. for (let button of buttons) {
  105. if (button.innerText.includes(text) && !button.hasAttribute('disabled') && button.offsetHeight > 0) {
  106. setTimeout(function () {
  107. alternativeClick(button);
  108. console.log("Element is clicked.");
  109. clearInterval(interval);
  110. }, 1000);
  111. break;
  112. }
  113. }
  114. }, 500);
  115. }
  116.  
  117.  
  118.  
  119. // Mouse move on random position
  120. function getRandomNumber(min, max) {
  121. return Math.floor(Math.random() * (max - min) + min);
  122. }
  123.  
  124. function randomDisplayNumber() {
  125. var screenWidth = window.innerWidth;
  126. var screenHeight = window.innerHeight;
  127.  
  128. var randomX = getRandomNumber(0, screenWidth);
  129. var randomY = getRandomNumber(0, screenHeight);
  130.  
  131. return { x: randomX, y: randomY };
  132. }
  133.  
  134. function moveMouseTo(x, y) {
  135. var event = new MouseEvent('mousemove', {
  136. bubbles: true,
  137. cancelable: true,
  138. view: document.defaultView,
  139. clientX: x,
  140. clientY: y
  141. });
  142. document.dispatchEvent(event);
  143. }
  144.  
  145. // Codde for Mouse move function
  146. var randomPosition = randomDisplayNumber();
  147. moveMouseTo(randomPosition.x, randomPosition.y);
  148.  
  149.  
  150.  
  151. // @require https://cdnjs.cloudflare.com/ajax/libs/tesseract.js/5.0.5/tesseract.min.js
  152. // @require https://cdnjs.cloudflare.com/ajax/libs/tesseract.js/5.0.5/worker.min.js
  153.  
  154. // OpenCV script
  155. var opencvScript = document.createElement('script');
  156. opencvScript.src = 'https://docs.opencv.org/4.5.5/opencv.js';
  157. opencvScript.onload = function() {
  158. console.log("OpenCV.js loaded");
  159.  
  160. // Funktion zum Polling bis das Element sichtbar ist
  161. function waitForElement(selector, callback) {
  162. const element = document.querySelector(selector);
  163. if (element && element.offsetHeight > 1) {
  164. callback(element);
  165. } else {
  166. setTimeout(() => waitForElement(selector, callback), 1000);
  167. }
  168. }
  169.  
  170. // Funktion zum Laden und Bearbeiten des Bildes
  171. function loadAndProcessImage() {
  172.  
  173. // Überwachungsfunktion, die in bestimmten Intervallen prüft, ob das Bild vorhanden ist
  174. let interval = setInterval(function() {
  175. let imgElement = document.querySelector("#description > img");
  176. if (imgElement) {
  177. clearInterval(interval); // Stoppe das Intervall, wenn das Bild vorhanden ist
  178. originalImgElement.src = imgElement.src; // Zeige das Originalbild an
  179. processImage(imgElement); // Lade und bearbeite das Bild
  180. } else {
  181. }
  182. }, 1000); // Überprüfe alle 1 Sekunde, ob das Bild vorhanden ist
  183. }
  184.  
  185. // Funktion zum Laden und Bearbeiten des Bildes
  186. function processImage(imgElement) {
  187. let src = cv.imread(imgElement);
  188.  
  189. // Schritt 0: Vergrößere das Bild
  190. let resized = new cv.Mat();
  191. let dsize = new cv.Size(src.cols * 4, src.rows * 4); // Verdreifache die Größe des Bildes
  192. cv.resize(src, resized, dsize, 0, 0, cv.INTER_LINEAR);
  193.  
  194. let dst = new cv.Mat();
  195. let M = cv.Mat.ones(5, 5, cv.CV_8U);
  196. let anchor = new cv.Point(-1, -1);
  197.  
  198. // Schritt 1: Ändere die Schriftfarbe auf Weiß und den Hintergrund auf Schwarz
  199. cv.cvtColor(resized, dst, cv.COLOR_RGB2GRAY);
  200. cv.threshold(dst, dst, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU);
  201.  
  202. // Schritt 2: Verwende Morphologie-Operationen, um das Bild zu bearbeiten
  203. cv.dilate(dst, dst, M, anchor, 2, cv.BORDER_CONSTANT, cv.morphologyDefaultBorderValue());
  204. // cv.erode(dst, dst, M, anchor, 1, cv.BORDER_CONSTANT, cv.morphologyDefaultBorderValue());
  205.  
  206. // Schritt 3: Konvertiere das bearbeitete Bild zurück in ein DOM-Element
  207. let canvas = document.createElement('canvas');
  208. cv.imshow(canvas, dst);
  209. let manipulatedImageSrc = canvas.toDataURL();
  210.  
  211. // Füge das bearbeitete Bild dem Overlay-DIV hinzu
  212. processedImgElement.src = manipulatedImageSrc;
  213.  
  214. // Texterkennung mit Tesseract.js
  215. Tesseract.recognize(
  216. manipulatedImageSrc,
  217. 'eng', // Sprache einstellen, hier: Englisch
  218. {
  219. logger: m => console.log("Tesseract Log:", m),
  220. psm: 7,
  221. oem: 3,
  222. tessedit_char_whitelist: "0123456789",
  223. tessedit_traineddata: 'eng', // Ändere den Pfad zu deiner trainierten Datenbank, z.B. 'C:/Users/User/Desktop/Projekte/Luckybird Chat Bot/output_model/tec'
  224. }
  225. ).then(({ data: { text } }) => {
  226. console.log("Text from teseract:", text);
  227.  
  228. // Filtere nur Zahlen von 0 bis 9 aus dem erkannten Text
  229. const filteredText = text.replace(/[^0-9]/g, '');
  230.  
  231. console.log('Regonized Numbers:' + filteredText)
  232.  
  233. var textField = document.querySelector("#description > input.captcha-input");
  234.  
  235. // Überprüfe, ob die Länge des Textes korrekt ist
  236. if (filteredText.length === 4) {
  237. textField.value = filteredText;
  238.  
  239. } else {
  240. location.reload();
  241. }
  242. });
  243.  
  244. // Bereinige Ressourcen
  245. src.delete();
  246. dst.delete();
  247. M.delete();
  248. resized.delete();
  249. }
  250.  
  251. // Starte das Laden und Bearbeiten des Bildes
  252. loadAndProcessImage();
  253. };
  254. document.head.appendChild(opencvScript);
  255.  
  256. })();