Typescript helpers

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

目前為 2024-09-11 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==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
    };



})();