Greasy Fork

Greasy Fork is available in English.

[Premium] Firefaucet Captcha Solver

90% succes rate on Firefaucet and Viefaucet cannot solve the Picture but helps by the other clicks

当前为 2024-08-22 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         [Premium] Firefaucet Captcha Solver
// @namespace    http://greasyfork.icu/users/1162863
// @version      1.2.1
// @description  90% succes rate on Firefaucet and Viefaucet cannot solve the Picture but helps by the other clicks
// @author       Andrewblood
// @icon         https://coinfinity.top/favicon.ico

// @match        *://*.coinfinity.top/faucetlist*

// @match        *://*.firefaucet.win/viewptc*
// @match        *://*.viefaucet.com/*

// @grant        GM_addStyle
// @grant        window.focus
// @license      Copyright Andrewblood
// ==/UserScript==

(function() {
    'use strict';



    var CaptchaSolverStatus = document.createElement('div');
    document.body.appendChild(CaptchaSolverStatus);

    CaptchaSolverStatus.classList.add('captchasolver-status');
    GM_addStyle(`
                .captchasolver-status {
                position: fixed;
                font-size: 20px !important;
                top: 140px !important;
                right: 20px;
                z-index: 9999;
                pointer-events: none;
                }
                `);

    function setCaptchaSolverStatus(html, color) {
        if (color === 'green') {
            CaptchaSolverStatus.style.color = 'green';
        } else if (color === 'red') {
            CaptchaSolverStatus.style.color = 'red';
        } else {
            CaptchaSolverStatus.style.color = 'black';
        }
        CaptchaSolverStatus.innerHTML = html;
    }

    setCaptchaSolverStatus('<p><b>Captcha Solver:</b> Activated.</p>', 'green');


    if (window.location.href.includes('coinfinity.top/faucetlist')) {

        setTimeout(function() {
            if (!document.querySelector(".faucetmonitor-status")) {
                var FaucetMonitorStatus = document.createElement('div');
                GM_addStyle(`
                .faucetmonitor-status {
                position: fixed;
                font-size: 20px !important;
                top: 50px !important;
                right: 20px;
                z-index: 9999;
                }
                `);
                document.body.appendChild(FaucetMonitorStatus);
                FaucetMonitorStatus.classList.add('faucetmonitor-status');
                function setFaucetMonitorStatus(html, color) {
                    if (color === 'green') {
                        FaucetMonitorStatus.style.color = 'green';
                    } else if (color === 'red') {
                        FaucetMonitorStatus.style.color = 'red';
                    } else {
                        FaucetMonitorStatus.style.color = 'black';
                    }
                    FaucetMonitorStatus.innerHTML = html;
                }
                setFaucetMonitorStatus('<p><b>Faucet Monitor:</b> Deactivated. <a href="http://greasyfork.icu/scripts/485334-premium-faucet-monitor" target="_blank">Install Here</a>.</p>', 'red');
            }

            if (!document.querySelector(".shortlinkmaker-status")) {
                var ShortlinkMakerStatus = document.createElement('div');
                document.body.appendChild(ShortlinkMakerStatus);

                ShortlinkMakerStatus.classList.add('shortlinkmaker-status');
                GM_addStyle(`
                .shortlinkmaker-status {
                position: fixed;
                font-size: 20px !important;
                top: 110px !important;
                right: 20px;
                z-index: 9999;
                }
                `);

                function setShortlinkMakerStatus(html, color) {
                    if (color === 'green') {
                        ShortlinkMakerStatus.style.color = 'green';
                    } else if (color === 'red') {
                        ShortlinkMakerStatus.style.color = 'red';
                    } else {
                        ShortlinkMakerStatus.style.color = 'black';
                    }
                    ShortlinkMakerStatus.innerHTML = html;
                }

                setShortlinkMakerStatus('<p><b>Shortlink Maker:</b> Deactivated. <a href="http://greasyfork.icu/scripts/489437-premium-shortlink-maker" target="_blank">Install Here</a>.</p>', 'red');
            }
        }, 1000 * 3);





        var isCaptchaSolverOverlayOpened = false;
        var CaptchaSolverButton = createCaptchaSolverButton('Captcha Solver');

        function createCaptchaSolverButton(text) {
            var CaptchaSolverButton = document.createElement('button');
            CaptchaSolverButton.innerHTML = text;
            CaptchaSolverButton.classList.add('captchasolver-button');
            CaptchaSolverButton.addEventListener('click', function() {
                if (!isCaptchaSolverOverlayOpened) {
                    openCaptchaSolverOverlay();
                    isCaptchaSolverOverlayOpened = true;
                }
            });
            return CaptchaSolverButton;
        }

        function openCaptchaSolverOverlay() {
            var CaptchaSolverOverlay = createCaptchaSolverOverlay();
            var CaptchaSolverOverlayContent = createCaptchaSolverOverlayContent();
            CaptchaSolverOverlay.appendChild(CaptchaSolverOverlayContent);
            document.body.appendChild(CaptchaSolverOverlay);
            CaptchaSolverOverlay.addEventListener('click', function(event) {
                if (event.target === CaptchaSolverOverlay) {
                    CaptchaSolverOverlay.remove();
                    isCaptchaSolverOverlayOpened = false;
                }
            });
        }

        function createCaptchaSolverOverlay() {
            var CaptchaSolverOverlay = document.createElement('div');
            CaptchaSolverOverlay.classList.add('captchasolver-overlay');
            return CaptchaSolverOverlay;
        }

        function createCaptchaSolverOverlayContent() {
            var CaptchaSolverOverlayContent = document.createElement('div');
            CaptchaSolverOverlayContent.classList.add('captchasolver-overlay-content');
            CaptchaSolverOverlayContent.innerHTML = `
            <h2>Download Captcha Solver</h2>
			<ul>
				<li><b>HCaptcha + ReCaptcha:</b> NoCoding Data Scraper and CAPTCHA Solver - <a href="https://chromewebstore.google.com/search/minirpa.net" target="_blank">Install Here</a></li>
				<li><b>Antibot Words:</b> AB Links Solver - <a href="http://greasyfork.icu/de/scripts/459453-ab-links-solver" target="_blank">Install Here</a></li>
				<li><b>Cf-Turnstile:</b> Autopass Cloudflare CAPTCHA - <a href="http://greasyfork.icu/de/scripts/464785-autopass-cloudflare-captcha" target="_blank">Install Here</a></li>
			</ul>
            `;
            return CaptchaSolverOverlayContent;
        }

        document.body.appendChild(CaptchaSolverButton);

        GM_addStyle(`
            .captchasolver-button {
                position: fixed;
                bottom: 20px;
                left: calc(65%);
                transform: translateX(50%);
                padding: 10px;
                background: blue;
                color: white;
                border: none;
                border-radius: 5px;
                cursor: pointer;
                z-index: 9999;
            }

            .captchasolver-overlay {
                position: fixed;
                top: 0;
                left: 0;
                width: 100%;
                height: 100%;
                background: rgba(0, 0, 0, 0.7);
                z-index: 9998;
                display: flex;
                align-items: center;
                justify-content: center;
            }

            .captchasolver-overlay-content {
                width: 95%;
                height: 80%;
                background: white;
                padding: 20px;
                overflow: auto;
                text-align: center;
            }
        `);
    }





    if (window.location.href.includes("firefaucet.win/viewptc")) {

        GM_addStyle(`
    .imageOverlay {
        position: fixed;
        z-index: 9999;
        padding: 10px;
        border-radius: 5px;
    }
    .imageOverlay.original {
        top: 200px;
        right: 10px;
        background-color: rgba(0, 0, 0, 0.8);
        color: white;
    }
    .imageOverlay.processed {
        top: 300px;
        right: 10px;
        background-color: rgba(0, 0, 0, 0.8);
        color: white;
    }
    .imageOverlay img {
        max-width: 200px;
        max-height: 200px;
        width: auto;
        height: auto;
    }
`);

        // Create the original overlay div and add it to the document
        const originalOverlayDiv = document.createElement('div');
        originalOverlayDiv.classList.add('imageOverlay', 'original');
        document.body.appendChild(originalOverlayDiv);

        // Create the processed overlay div and add it to the document
        const processedOverlayDiv = document.createElement('div');
        processedOverlayDiv.classList.add('imageOverlay', 'processed');
        document.body.appendChild(processedOverlayDiv);

        // Create img elements for the original and processed images
        const originalImgElement = document.createElement('img');
        const processedImgElement = document.createElement('img');
        originalOverlayDiv.appendChild(originalImgElement);
        processedOverlayDiv.appendChild(processedImgElement);

        // Load Tesseract.js script
        var tesseractScript = document.createElement('script');
        tesseractScript.src = 'https://cdnjs.cloudflare.com/ajax/libs/tesseract.js/5.0.4/tesseract.min.js';
        tesseractScript.onload = function() {

            // Load Tesseract worker
            var workerScript = document.createElement('script');
            workerScript.src = 'https://cdnjs.cloudflare.com/ajax/libs/tesseract.js/5.0.4/worker.min.js';
            workerScript.onload = function() {
                console.log("Tesseract.js loaded");

                // 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
                                setCaptchaSolverStatus('<p><b>Captcha Solver:</b> Picture found and start to edit the image...</p>', 'green')
                                originalImgElement.src = imgElement.src; // Zeige das Originalbild an
                                processImage(imgElement); // Lade und bearbeite das Bild
                            } else {
                                setCaptchaSolverStatus('<p><b>Captcha Solver:</b> Wait for picture...</p>', 'green')
                            }
                        }, 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',
                            {
                                logger: m => console.log("Tesseract Log:", m),
                                psm: 7,
                                oem: 3,
                                tessedit_char_whitelist: "0123456789"
                            }
                        ).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);
            };
            document.head.appendChild(workerScript);
        };
        document.head.appendChild(tesseractScript);
    }







    if (window.location.href.includes("viefaucet.com")){



/*


        GM_addStyle(`
    .imageOverlay {
        position: fixed;
        z-index: 9999;
        padding: 10px;
        border-radius: 5px;
    }
    .imageOverlay.original {
        top: 200px;
        right: 10px;
        background-color: rgba(0, 0, 0, 0.8);
        color: white;
    }
    .imageOverlay.processed {
        top: 450px;
        right: 10px;
        background-color: rgba(0, 0, 0, 0.8);
        color: white;
    }
    .imageOverlay img {
        max-width: 200px;
        max-height: 200px;
        width: auto;
        height: auto;
    }
`);

        // Create the original overlay div and add it to the document
        const originalOverlayDiv = document.createElement('div');
        originalOverlayDiv.classList.add('imageOverlay', 'original');
        document.body.appendChild(originalOverlayDiv);

        // Create the processed overlay div and add it to the document
        const processedOverlayDiv = document.createElement('div');
        processedOverlayDiv.classList.add('imageOverlay', 'processed');
        document.body.appendChild(processedOverlayDiv);

        // Create img elements for the original and processed images
        const originalImgElement = document.createElement('img');
        const processedImgElement = document.createElement('img');
        originalOverlayDiv.appendChild(originalImgElement);
        processedOverlayDiv.appendChild(processedImgElement);

        // Load Tesseract.js script
        var tesseractScript = document.createElement('script');
        tesseractScript.src = 'https://cdnjs.cloudflare.com/ajax/libs/tesseract.js/5.0.4/tesseract.min.js';
        tesseractScript.onload = function() {

            // Load Tesseract worker
            var workerScript = document.createElement('script');
            workerScript.src = 'https://cdnjs.cloudflare.com/ajax/libs/tesseract.js/5.0.4/worker.min.js';
            workerScript.onload = function() {
                console.log("Tesseract.js loaded");

                // 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(".captcha-image");
                            if (imgElement) {
                                clearInterval(interval); // Stoppe das Intervall, wenn das Bild vorhanden ist
                                setCaptchaSolverStatus('<p><b>Captcha Solver:</b> Picture found and start to edit the image.</p>', 'green')
                                originalImgElement.src = imgElement.src; // Zeige das Originalbild an
                                processImage(imgElement); // Lade und bearbeite das Bild
                            } else {
                                setCaptchaSolverStatus('<p><b>Captcha Solver:</b> Wait for picture.</p>', 'green')
                            }
                        }, 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 schwarz und den Hintergrund auf weiss
                        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, 1, 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;

                        // Bereinige Ressourcen
                        src.delete();
                        dst.delete();
                        M.delete();
                        resized.delete();
                    }

                    // Starte das Laden und Bearbeiten des Bildes
                    loadAndProcessImage();
                };
                document.head.appendChild(opencvScript);
            };
            document.head.appendChild(workerScript);
        };
        document.head.appendChild(tesseractScript);


*/





        function VieCaptcha() {
            const targetElementSelector = '.check-box';
            const targetElement = document.querySelector(targetElementSelector);
            if (targetElement) {
                window.focus();
                setCaptchaSolverStatus('<p><b>Captcha Solver:</b> Captcha found please click the picture.</p>', 'green')
                targetElement.click();
            }
            const dotElement = document.querySelector('div.dot');
            if (dotElement) {
                const buttons = document.querySelectorAll('button');
                buttons.forEach(button => {
                    if (button.textContent.includes('Verify')) {
                        button.click();
                    }
                });
            }
        }
        setInterval(VieCaptcha, 1000);
    }



})();