Typescript helpers

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);

})();