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