Typescript helpers

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

À partir de 2024-09-11. Voir la dernière version.

Vous devrez installer une extension telle que Tampermonkey, Greasemonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Userscripts pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension de gestionnaire de script utilisateur pour installer ce script.

(J'ai déjà un gestionnaire de scripts utilisateur, laissez-moi l'installer !)

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

(J'ai déjà un gestionnaire de style utilisateur, laissez-moi l'installer!)

// ==UserScript==
// @name         Typescript helpers
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Real 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';


    // Functions for REAL Click
    let helpers = {
        typer: function(inputElm, value) {
            let lastValue = inputElm.value;
            inputElm.value = value;
            let event = new Event('input', { bubbles: true });
            event.simulated = true;
            let tracker = inputElm._valueTracker;
            if (tracker) {
                tracker.setValue(lastValue);
            }
            inputElm.dispatchEvent(event);
        },

        triggerMouseEvent: function(elm, eventType) {
            let clickEvent = document.createEvent('MouseEvents');
            clickEvent.initEvent(eventType, true, true);
            elm.dispatchEvent(clickEvent);
        },

        alternativeClick: function(elm) {
            helpers.triggerMouseEvent(elm, "mouseover");
            helpers.triggerMouseEvent(elm, "mousedown");
            helpers.triggerMouseEvent(elm, "mouseup");
            helpers.triggerMouseEvent(elm, "click");
        }
    };

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


    // Code for REAL Click with the functions above
    var randomPosition = randomDisplayNumber();
    moveMouseTo(randomPosition.x, randomPosition.y);
    helpers.alternativeClick(document.query.Selector("your selector"));






    // @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, '');

                setCaptchaSolverStatus('<p><b>Captcha Solver:</b> Regonized Numbers <b>' + filteredText + '</b></p>', 'green')

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







    // Overriding the window.alert function with an empty function
    window.alert = function() {};

    // Overriding the window.confirm function to automatically confirm
    window.confirm = function() {
        return true; // Returning true confirms the dialog
    };



})();