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