Greasy Fork is available in English.
Special click, import and execute tesseract and opencv, alert blocking
// ==UserScript== // @name Typescript helpers // @namespace http://tampermonkey.net/ // @version 1.1 // @description Special click, import and execute tesseract and opencv, alert blocking // @author Andrewblood // @match *://*/* // @icon https://coinfinity.top/favicon.ico // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; window.alert = function() { // Nichts tun, um den Alert zu blockieren }; window.confirm = function() { // Nichts tun, um den Alert zu blockieren }; window.anonymous = function() { // Nichts tun, um den Alert zu blockieren }; // @grant window.focus // @grant window.close // @grant unsafeWindow // Funktion für das Schließen der Tabs var oldFunction = unsafeWindow.open; var lastOpenedWindow = null; // Variable zur Speicherung des zuletzt geöffneten Fensters function closeAdFunction(url, target) { // Setze den Namen des Fensters var windowName = (target && target !== "_blank") ? target : "popUpWindow"; // Öffne das Fenster und speichere die Referenz lastOpenedWindow = oldFunction(url, windowName); return lastOpenedWindow; } unsafeWindow.open = closeAdFunction; // Schließe das letzte geöffnete Fenster, wenn die Seite verlassen wird unsafeWindow.onbeforeunload = function() { if (lastOpenedWindow) { lastOpenedWindow.close(); // Schließe das Fenster lastOpenedWindow = null; // Setze die Referenz zurück } }; // Functions for REAL Click function triggerMouseEvent(elm, eventType) { let clickEvent = document.createEvent('MouseEvents'); clickEvent.initEvent(eventType, true, true); elm.dispatchEvent(clickEvent); } function alternativeClick(elm) { triggerMouseEvent(elm, "mouseover"); triggerMouseEvent(elm, "mousedown"); triggerMouseEvent(elm, "mouseup"); triggerMouseEvent(elm, "click"); } function specialClick(selector) { var interval001 = setInterval(function() { // Wähle den Button anhand des Selektors var button = document.querySelector(selector); // Wähle das CAPTCHA-Element und das Response-Element var captchaElement = document.querySelector(".captcha-modal, .g-recaptcha, .h-captcha"); var captchaResponse = document.querySelector("#g-recaptcha-response, #g-recaptcha-response, #fform > center > div > div > input[type=hidden]"); // Überprüfe, ob das CAPTCHA-Element vorhanden ist if (captchaElement) { // Falls das CAPTCHA ausgefüllt ist und der Button sichtbar und aktiv ist, klicke den Button if (captchaResponse && captchaResponse.value.length > 0 && button && button.offsetHeight > 0 && !button.hasAttribute('disabled')) { alternativeClick(button); console.log("Element is clicked."); clearInterval(interval001); } } else { // Falls kein CAPTCHA vorhanden ist, überprüfe nur die Sichtbarkeit des Buttons if (button && button.offsetHeight > 0 && !button.hasAttribute('disabled')) { alternativeClick(button); console.log("Element is clicked."); clearInterval(interval001); } } }, 500); } function searchFirstButtonWithInnerText(text) { let interval = setInterval(function() { let buttons = document.querySelectorAll('button'); for (let button of buttons) { if (button.innerText.includes(text) && !button.hasAttribute('disabled') && button.offsetHeight > 0) { setTimeout(function () { alternativeClick(button); console.log("Element is clicked."); clearInterval(interval); }, 1000); break; } } }, 500); } // Mouse move on random position function getRandomNumber(min, max) { return Math.floor(Math.random() * (max - min) + min); } function randomDisplayNumber() { var screenWidth = window.innerWidth; var screenHeight = window.innerHeight; var randomX = getRandomNumber(0, screenWidth); var randomY = getRandomNumber(0, screenHeight); return { x: randomX, y: randomY }; } function moveMouseTo(x, y) { var event = new MouseEvent('mousemove', { bubbles: true, cancelable: true, view: document.defaultView, clientX: x, clientY: y }); document.dispatchEvent(event); } // Codde for Mouse move function var randomPosition = randomDisplayNumber(); moveMouseTo(randomPosition.x, randomPosition.y); // @require https://cdnjs.cloudflare.com/ajax/libs/tesseract.js/5.0.5/tesseract.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/tesseract.js/5.0.5/worker.min.js // OpenCV script var opencvScript = document.createElement('script'); opencvScript.src = 'https://docs.opencv.org/4.5.5/opencv.js'; opencvScript.onload = function() { console.log("OpenCV.js loaded"); // Funktion zum Polling bis das Element sichtbar ist function waitForElement(selector, callback) { const element = document.querySelector(selector); if (element && element.offsetHeight > 1) { callback(element); } else { setTimeout(() => waitForElement(selector, callback), 1000); } } // Funktion zum Laden und Bearbeiten des Bildes function loadAndProcessImage() { // Überwachungsfunktion, die in bestimmten Intervallen prüft, ob das Bild vorhanden ist let interval = setInterval(function() { let imgElement = document.querySelector("#description > img"); if (imgElement) { clearInterval(interval); // Stoppe das Intervall, wenn das Bild vorhanden ist originalImgElement.src = imgElement.src; // Zeige das Originalbild an processImage(imgElement); // Lade und bearbeite das Bild } else { } }, 1000); // Überprüfe alle 1 Sekunde, ob das Bild vorhanden ist } // Funktion zum Laden und Bearbeiten des Bildes function processImage(imgElement) { let src = cv.imread(imgElement); // Schritt 0: Vergrößere das Bild let resized = new cv.Mat(); let dsize = new cv.Size(src.cols * 4, src.rows * 4); // Verdreifache die Größe des Bildes cv.resize(src, resized, dsize, 0, 0, cv.INTER_LINEAR); let dst = new cv.Mat(); let M = cv.Mat.ones(5, 5, cv.CV_8U); let anchor = new cv.Point(-1, -1); // Schritt 1: Ändere die Schriftfarbe auf Weiß und den Hintergrund auf Schwarz cv.cvtColor(resized, dst, cv.COLOR_RGB2GRAY); cv.threshold(dst, dst, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU); // Schritt 2: Verwende Morphologie-Operationen, um das Bild zu bearbeiten cv.dilate(dst, dst, M, anchor, 2, cv.BORDER_CONSTANT, cv.morphologyDefaultBorderValue()); // cv.erode(dst, dst, M, anchor, 1, cv.BORDER_CONSTANT, cv.morphologyDefaultBorderValue()); // Schritt 3: Konvertiere das bearbeitete Bild zurück in ein DOM-Element let canvas = document.createElement('canvas'); cv.imshow(canvas, dst); let manipulatedImageSrc = canvas.toDataURL(); // Füge das bearbeitete Bild dem Overlay-DIV hinzu processedImgElement.src = manipulatedImageSrc; // Texterkennung mit Tesseract.js Tesseract.recognize( manipulatedImageSrc, 'eng', // Sprache einstellen, hier: Englisch { logger: m => console.log("Tesseract Log:", m), psm: 7, oem: 3, tessedit_char_whitelist: "0123456789", tessedit_traineddata: 'eng', // Ändere den Pfad zu deiner trainierten Datenbank, z.B. 'C:/Users/User/Desktop/Projekte/Luckybird Chat Bot/output_model/tec' } ).then(({ data: { text } }) => { console.log("Text from teseract:", text); // Filtere nur Zahlen von 0 bis 9 aus dem erkannten Text const filteredText = text.replace(/[^0-9]/g, ''); console.log('Regonized Numbers:' + filteredText) var textField = document.querySelector("#description > input.captcha-input"); // Überprüfe, ob die Länge des Textes korrekt ist if (filteredText.length === 4) { textField.value = filteredText; } else { location.reload(); } }); // Bereinige Ressourcen src.delete(); dst.delete(); M.delete(); resized.delete(); } // Starte das Laden und Bearbeiten des Bildes loadAndProcessImage(); }; document.head.appendChild(opencvScript); })();