[Premium] Faucet Monitor with Faucetpay ReCaptcha/Antibot Rotator

Elevate your Faucet claiming experience with advanced automation, seamlessly handling form filling, button clicks, and ReCaptcha/Antibot challenges. Boost your efficiency and maximize earnings.

目前為 2024-01-27 提交的版本,檢視 最新版本

// ==UserScript==
// @name         [Premium] Faucet Monitor with Faucetpay ReCaptcha/Antibot Rotator
// @namespace    https://greasyfork.org/users/1162863
// @version      2.4.3
// @description  Elevate your Faucet claiming experience with advanced automation, seamlessly handling form filling, button clicks, and ReCaptcha/Antibot challenges. Boost your efficiency and maximize earnings.
// @author       Andrewblood
// @match        https://coinfinity.top/*
// @match        https://sollcrypto.com/*
// @match        https://cryptoclaps.com/*
// @match        https://baltoniearn.com/claim/tron/*
// @match        https://vptron.online/TRX/*
// @match        https://claimcoins.site/reward/*
// @match        https://bnbminers.site/earns/*
// @match        https://ltcmines.site/earns/*
// @match        https://tronxminer.com/rewards/*
// @match        https://etcoin.site/earn/*
// @match        https://autofaucet.dutchycorp.space/*
// @match        https://freebitco.in/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=faucetpay.io
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_deleteValue
// @grant        window.close
// @antifeature  referal-link     Referal-Link is in this Script integrated and in the description. (No win decrease for you, it's a thank you to me for the share)
// @license      Copyright Andrewblood
// ==/UserScript==
/*
Experience the next level of Faucet claiming with unparalleled features:

- User Interface: Displays an overlay for managing stored URLs, clearing pages, and saving Faucetpay email.
- Requirements Integration: Provides extension and script recommendations with install buttons for enhanced functionality.
- Advanced Automation: Seamlessly fills forms and clicks buttons on Faucetpay Faucet sites, reducing manual effort.
- ReCaptcha/Antibot Handling: Intelligently tackles security challenges, ensuring a smooth claiming process.
- Efficient Navigation: Automatically moves through supported Faucet URLs, preventing revisits window for strategic claiming.
- Error Handling: Reloads pages, ensuring up-to-date claiming and avoiding downtime.

        "https://cryptoclaps.com/earn/dogecoin/",
        "https://cryptoclaps.com/earn/tron/",
        "https://cryptoclaps.com/earn/litecoin/",
        "https://cryptoclaps.com/earn/binance/",
        "https://cryptoclaps.com/earn/solana/",
        "https://cryptoclaps.com/earn/ethereum/",
        "https://cryptoclaps.com/earn/bch/",
        "https://cryptoclaps.com/earn/xrp/",
        "https://cryptoclaps.com/earn/dash/",
        "https://cryptoclaps.com/earn/polygon/",
        "https://cryptoclaps.com/earn/usdt/",
        "https://cryptoclaps.com/earn/zcash/",
        "https://etcoin.site/earn/tron/",
        "https://etcoin.site/earn/doge/",
        "https://etcoin.site/earn/litecoin/",
        "https://etcoin.site/earn/binance/",
        "https://etcoin.site/earn/ripple/",
        "https://etcoin.site/earn/ethereum/",
        "https://etcoin.site/earn/bitcoin/",

*/
(function() {
    'use strict';

    var urls = [
        "https://sollcrypto.com/home/page/bitcoin/",
        "https://sollcrypto.com/home/page/doge/",
        "https://sollcrypto.com/home/page/tron/",
        "https://sollcrypto.com/home/page/digibyte/",
        "https://sollcrypto.com/home/page/litecoin/",
        "https://sollcrypto.com/home/page/binance/",
        "https://sollcrypto.com/home/page/solana/",
        "https://sollcrypto.com/home/page/ethereum/",
        "https://sollcrypto.com/home/page/bch/",
        "https://sollcrypto.com/home/page/xrp/",
        "https://sollcrypto.com/home/page/dash/",
        "https://sollcrypto.com/home/page/zcash/",
        "https://baltoniearn.com/claim/tron/",
        "https://vptron.online/TRX/",
        "https://claimcoins.site/reward/tron/",
        "https://claimcoins.site/reward/doge/",
        "https://claimcoins.site/reward/litecoin/",
        "https://claimcoins.site/reward/binance/",
        "https://claimcoins.site/reward/ripple/",
        "https://claimcoins.site/reward/bitcoin/",
        "https://bnbminers.site/earns/tron/",
        "https://bnbminers.site/earns/litecoin/",
        "https://bnbminers.site/earns/feyorra/",
        "https://bnbminers.site/earns/binance/",
        "https://bnbminers.site/earns/ripple/",
        "https://bnbminers.site/earns/ethereum/",
        "https://bnbminers.site/earns/bitcoin/",
        "https://ltcmines.site/earns/tron/",
        "https://ltcmines.site/earns/doge/",
        "https://ltcmines.site/earns/litecoin/",
        "https://ltcmines.site/earns/binance/",
        "https://ltcmines.site/earns/ripple/",
        "https://ltcmines.site/earns/ethereum/",
        "https://ltcmines.site/earns/bitcoin/",
        "https://tronxminer.com/rewards/tron/",
        "https://tronxminer.com/rewards/doge/",
        "https://tronxminer.com/rewards/feyorra/",
        "https://tronxminer.com/rewards/binance/",
        "https://tronxminer.com/rewards/ripple/",
        "https://tronxminer.com/rewards/bitcoin/",
    ];

    // Function to click a button
    function clickButton(selector) {
        var button = document.querySelector(selector);
        if (button) {
            button.click();
        }
    }

    // Function to check if the captcha is activated
    function isCaptchaChecked() {
        return grecaptcha && grecaptcha.getResponse().length !== 0;
    }

    function visibleCheck(elm) {
        if (!elm.offsetHeight && !elm.offsetWidth) { return false; }
        if (getComputedStyle(elm).visibility === 'hidden') { return false; }
        return true;
    }

    // Function to check if an element is visible
    function isElementVisible(selector) {
        var element = document.querySelector(selector);
        return element && element.offsetWidth > 0 && element.offsetHeight > 0;
    }

    // Function to open a website
    function openWebsite(url) {
        window.open(url, '_blank');
    }

    // Email overlay creation
    var overlay = document.createElement('div');
    overlay.id = 'emailInputOverlay';
    overlay.style.position = 'fixed';
    overlay.style.bottom = '10px';
    overlay.style.right = '10px';
    overlay.style.zIndex = '10000';

    // Create a button for other requirements
    var otherRequirementsButton = document.createElement('button');
    otherRequirementsButton.id = 'otherRequirementsButton';
    otherRequirementsButton.style.padding = '5px';
    otherRequirementsButton.style.marginLeft = '5px';
    otherRequirementsButton.textContent = 'Requirements';

    var isRequirementsOverlayOpen = false;
    var isStoredUrlsOverlayOpen = false;

    // Event listener for otherRequirementsButton
    otherRequirementsButton.addEventListener('click', function() {
        // Check if requirements overlay is already open
        if (isRequirementsOverlayOpen) {
            // Close the overlay
            closeOverlay(otherRequirementsOverlay);
            isRequirementsOverlayOpen = false;
            return;
        }

        // Create an overlay for other requirements
        var otherRequirementsOverlay = document.createElement('div');
        otherRequirementsOverlay.style.position = 'fixed';
        otherRequirementsOverlay.style.top = '50%';
        otherRequirementsOverlay.style.left = '50%';
        otherRequirementsOverlay.style.transform = 'translate(-50%, -50%)';
        otherRequirementsOverlay.style.zIndex = '10001';
        otherRequirementsOverlay.style.backgroundColor = '#fff';
        otherRequirementsOverlay.style.border = '1px solid #ddd';
        otherRequirementsOverlay.style.padding = '20px';
        otherRequirementsOverlay.style.maxHeight = '80%';
        otherRequirementsOverlay.style.overflowY = 'auto';

        // Add the heading
        var heading = document.createElement('h2');
        heading.textContent = 'Requirements';
        heading.style.textAlign = 'center';
        heading.style.marginBottom = '15px';
        otherRequirementsOverlay.appendChild(heading);

        // Define the list of extensions and scripts with install buttons
        var requirementsList = [
            { name: '<b>ReCaptcha:</b> hektCaptcha: hCaptcha Solver', installUrl: 'https://github.com/Wikidepia/hektCaptcha-extension' },
            { name: '<b>Antibot Words:</b> AB Links Solver', installUrl: 'https://greasyfork.org/de/scripts/459453-ab-links-solver' }
        ];

        // Create a list element
        var list = document.createElement('ul');
        list.style.listStyleType = 'none';
        list.style.padding = '0';

        // Populate the list with requirements and install buttons
        requirementsList.forEach(function(requirement) {
            var listItem = document.createElement('li');

            var installButton = document.createElement('button');
            installButton.textContent = 'Install';
            installButton.addEventListener('click', function() {
                // Open a new tab with the install URL
                window.open(requirement.installUrl, '_blank');
            });

            // Create a span element for styling
            var styledText = document.createElement('span');
            styledText.innerHTML = requirement.name; // Use innerHTML to interpret HTML tags

            // Append the span and install button to the list item
            listItem.appendChild(styledText);
            listItem.appendChild(installButton);
            list.appendChild(listItem);
        });

        // Create a close button for the overlay
        var closeRequirementsButton = document.createElement('button');
        closeRequirementsButton.textContent = 'Close';
        closeRequirementsButton.style.padding = '8px';
        closeRequirementsButton.style.marginTop = '10px';
        closeRequirementsButton.addEventListener('click', function() {
            // Close the overlay when the close button is clicked
            document.body.removeChild(otherRequirementsOverlay);
        });



        // Function to save Faucetpay email
        function saveFaucetpayEmail() {
            // Save entered email address
            var newEmail = emailInput.value;
            GM_setValue('storedEmail', newEmail);

            // Success notification (can be customized)
            alert('Faucetpay email address saved successfully!');
        }

        // Add input field and label for Faucetpay email to the requirements overlay
        var emailInputLabel = document.createElement('label');
        emailInputLabel.textContent = 'Enter Faucetpay Email:';
        emailInputLabel.style.display = 'block';
        emailInputLabel.style.marginTop = '10px';

        var emailInput = document.createElement('input');
        emailInput.type = 'text';
        emailInput.id = 'emailInput';
        emailInput.placeholder = 'Faucetpay Email';
        emailInput.style.padding = '5px';
        emailInput.style.width = '100%';

        // Abrufen und Einsetzen des gespeicherten Werts
        var storedEmail = GM_getValue('storedEmail', '');
        emailInput.value = storedEmail;

        // Add "Save Faucetpay email" button to the requirements overlay
        var saveFaucetpayEmailButton = document.createElement('button');
        saveFaucetpayEmailButton.id = 'saveFaucetpayEmailButton';
        saveFaucetpayEmailButton.style.padding = '5px';
        saveFaucetpayEmailButton.style.marginTop = '5px';
        saveFaucetpayEmailButton.style.width = '100%';
        saveFaucetpayEmailButton.textContent = 'Save Faucetpay Email';

        // Add event listener for saveFaucetpayEmailButton
        saveFaucetpayEmailButton.addEventListener('click', saveFaucetpayEmail);


        // Append the list and close button to the overlay
        otherRequirementsOverlay.appendChild(list);
        // Append the input field, label, and "Save Faucetpay email" button to the requirements overlay
        otherRequirementsOverlay.appendChild(emailInputLabel);
        otherRequirementsOverlay.appendChild(emailInput);
        otherRequirementsOverlay.appendChild(saveFaucetpayEmailButton);
        otherRequirementsOverlay.appendChild(closeRequirementsButton);
        var closeButton = createCloseButton(otherRequirementsOverlay);
        otherRequirementsOverlay.appendChild(closeButton);

        // Set flag to indicate that requirements overlay is open
        isRequirementsOverlayOpen = true;

        // Add the overlay to the body
        document.body.appendChild(otherRequirementsOverlay);

        // Add an event listener to reset the flag when the overlay is closed
        otherRequirementsOverlay.addEventListener('click', function() {
            isRequirementsOverlayOpen = false;
        });
    });

    // Create a button to show stored URLs
    var showStoredUrlsButton = document.createElement('button');
    showStoredUrlsButton.id = 'showStoredUrlsButton';
    showStoredUrlsButton.style.padding = '5px';
    showStoredUrlsButton.style.marginLeft = '5px';
    showStoredUrlsButton.textContent = 'Faucetpay Rotator Sites';

    showStoredUrlsButton.addEventListener('click', function() {
        // Check if stored URLs overlay is already open
        if (isStoredUrlsOverlayOpen) {
            // Close the overlay
            closeOverlay(overlayTable);
            isStoredUrlsOverlayOpen = false;
            return;
        }
        // Display stored pages in an overlay
        var storedUrls = GM_getValue('storedUrls', []);

        // Combine stored URLs with the original URLs
        var allUrls = urls.map(function(url) {
            var storedUrlEntry = storedUrls.find(function(storedUrl) {
                return storedUrl.url === url;
            });

            return {
                url: url,
                timestamp: storedUrlEntry ? storedUrlEntry.timestamp : null
            };
        });

        // Create an overlay for the table
        var overlayTable = document.createElement('div');
        overlayTable.style.position = 'fixed';
        overlayTable.style.top = '50%';
        overlayTable.style.left = '50%';
        overlayTable.style.transform = 'translate(-50%, -50%)';
        overlayTable.style.zIndex = '10001';
        overlayTable.style.backgroundColor = '#fff';
        overlayTable.style.border = '1px solid #ddd';
        overlayTable.style.padding = '20px';
        overlayTable.style.maxHeight = '80%';
        overlayTable.style.overflowY = 'auto';

        // Add the heading for Faucetpay Rotator Sites
        var heading = document.createElement('h2');
        heading.textContent = 'Faucetpay Rotator Sites';
        heading.style.textAlign = 'center';
        heading.style.marginBottom = '15px';
        overlayTable.appendChild(heading);


        // Create a close button for the overlay
        var closeButton = document.createElement('button');
        closeButton.textContent = 'Close';
        closeButton.style.padding = '8px';
        closeButton.style.marginTop = '10px';
        closeButton.addEventListener('click', function() {
            // Close the overlay when the close button is clicked
            document.body.removeChild(overlayTable);
        });

        // Create a button to delete all stored URLs
        var deleteAllButton = document.createElement('button');
        deleteAllButton.id = 'deleteAllButton';
        deleteAllButton.style.padding = '5px';
        deleteAllButton.style.marginLeft = '5px';
        deleteAllButton.style.float = 'right'; // Align the button to the right
        deleteAllButton.textContent = 'Delete All Times';

        // Add an event listener for the deleteAllButton
        deleteAllButton.addEventListener('click', function() {
            // Clear all stored URLs
            GM_deleteValue('storedUrls');

            // Refresh the table
            showStoredUrlsButton.click();
        });

        // Create a table element
        var table = document.createElement('table');
        table.style.borderCollapse = 'collapse';
        table.style.width = '100%';

        // Create table headers
        var headers = ['Connect', 'URL', 'Status', 'Delete'];
        var headerRow = table.insertRow();
        for (var i = 0; i < headers.length; i++) {
            var headerCell = headerRow.insertCell(i);
            headerCell.style.border = '1px solid #ddd';
            headerCell.style.padding = '8px';
            headerCell.style.textAlign = 'left';
            headerCell.textContent = headers[i];

            // Add click event for sorting
            if (i === 1 || i === 2) {
                headerCell.addEventListener('click', function() {
                    sortTable(table, this.cellIndex);
                });
            }
        }

        // Populate table with all URLs, timestamps, and delete buttons
        for (var j = 0; j < allUrls.length; j++) {
            var urlEntry = allUrls[j];
            var row = table.insertRow();

            // Add "Connect" button to each row
            var connectCell = row.insertCell(0);
            connectCell.style.border = '1px solid #ddd';
            connectCell.style.padding = '8px';

            var connectButton = document.createElement('button');
            connectButton.textContent = 'Connect';
            connectButton.addEventListener('click', createConnectHandler(urlEntry.url)); // Attach a handler with the URL
            connectCell.appendChild(connectButton);

            var urlCell = row.insertCell(1);
            urlCell.style.border = '1px solid #ddd';
            urlCell.style.padding = '8px';
            urlCell.textContent = urlEntry.url;

            var statusCell = row.insertCell(2);
            statusCell.style.border = '1px solid #ddd';
            statusCell.style.padding = '8px';
            statusCell.style.color = getStatusColor(urlEntry);
            statusCell.textContent = getStatusText(urlEntry);

            var deleteCell = row.insertCell(3);
            deleteCell.style.border = '1px solid #ddd';
            deleteCell.style.padding = '8px';

            // Create delete button for each row
            var deleteButton = document.createElement('button');
            deleteButton.textContent = 'Delete Time';
            deleteButton.addEventListener('click', createDeleteHandler(urlEntry));

            deleteCell.appendChild(deleteButton);
        }

        // Append the table and close button to the overlay
        overlayTable.appendChild(table);
        overlayTable.appendChild(closeButton);
        overlayTable.appendChild(deleteAllButton);
        var closeButtontop = createCloseButton(overlayTable);
        overlayTable.appendChild(closeButtontop);

        // Set flag to indicate that stored URLs overlay is open
        isStoredUrlsOverlayOpen = true;

        // Add the overlay to the body
        document.body.appendChild(overlayTable);

        // Add an event listener to reset the flag when the overlay is closed
        overlayTable.addEventListener('click', function() {
            isStoredUrlsOverlayOpen = false;
        });
    });

    // Function to close the overlay
    function closeOverlay(overlay) {
        // Close the overlay when the close button is clicked
        document.body.removeChild(overlay);
    }

    // Funktion zum Erstellen des "X"-Buttons
    function createCloseButton(overlay) {
        var closeButton = document.createElement('button');
        closeButton.innerHTML = 'X';
        closeButton.style.position = 'absolute';
        closeButton.style.top = '5px';
        closeButton.style.right = '5px';
        closeButton.style.padding = '5px';
        closeButton.style.cursor = 'pointer';
        closeButton.addEventListener('click', function() {
            // Rufe die Funktion zum Schließen des Overlays auf
            closeOverlay(overlay);
        });
        return closeButton;
    }

    // Function to get the status text based on the urlEntry
    function getStatusText(urlEntry) {
        var currentTime = Date.now();

        if (urlEntry.timestamp) {
            var timestamp = Date.parse(urlEntry.timestamp.replace(/-/g, '/'));
            if (timestamp > currentTime) {
                // Not Active Until
                return 'Not Active Until ' + urlEntry.timestamp;
            } else {
                // Active
                return 'Active';
            }
        } else {
            return 'Active';
        }
    }

    // Function to get the status color based on the urlEntry
    function getStatusColor(urlEntry) {
        var currentTime = Date.now();

        if (urlEntry.timestamp) {
            var timestamp = Date.parse(urlEntry.timestamp.replace(/-/g, '/'));
            return (timestamp > currentTime) ? 'red' : 'green';
        } else {
            return 'green'; // Assuming 'Active' state when timestamp is not present
        }
    }

    // Function to create a delete handler with a specific urlEntry
    function createDeleteHandler(urlEntry) {
        return function() {
            // Find the corresponding URL and delete it from stored pages
            var urlToDelete = urlEntry.url;
            var storedUrls = GM_getValue('storedUrls', []);
            storedUrls = storedUrls.filter(function(storedUrl) {
                return storedUrl.url !== urlToDelete;
            });

            // Update stored pages
            GM_setValue('storedUrls', storedUrls);

            // Refresh the table
            showStoredUrlsButton.click();
        };
    }

    // Function to create a connect handler with a specific URL
    function createConnectHandler(url) {
        return function() {
            // Redirect to the selected URL
            window.open(url, '_blank');
        };
    }

    // Function to sort the table by column index
    function sortTable(table, columnIndex) {
        var rows = Array.from(table.rows).slice(1); // Exclude header row
        var sortOrder = 1;

        // Determine sorting order based on the current order of the column
        if (table.rows[0].cells[columnIndex].classList.contains('ascending')) {
            sortOrder = -1;
        }

        // Remove sorting classes from all columns
        for (var i = 0; i < table.rows[0].cells.length; i++) {
            table.rows[0].cells[i].classList.remove('ascending', 'descending');
        }

        // Sort the rows based on the content of the selected column
        rows.sort(function(a, b) {
            var textA = a.cells[columnIndex].textContent.trim().toUpperCase();
            var textB = b.cells[columnIndex].textContent.trim().toUpperCase();

            if (textA < textB) {
                return -1 * sortOrder;
            } else if (textA > textB) {
                return 1 * sortOrder;
            } else {
                return 0;
            }
        });

        // Clear and rebuild the table with the sorted rows
        while (table.rows.length > 1) {
            table.deleteRow(1);
        }

        for (var j = 0; j < rows.length; j++) {
            table.appendChild(rows[j]);
        }

        // Add sorting class to the header cell
        if (sortOrder === 1) {
            table.rows[0].cells[columnIndex].classList.add('ascending');
        } else {
            table.rows[0].cells[columnIndex].classList.add('descending');
        }
    }
    const websites = [
        { name: 'Freebitco.in', url: 'https://freebitco.in', active: GM_getValue('Freebitco.in', true) },
        { name: 'Dutchycorp', url: 'https://autofaucet.dutchycorp.space', active: GM_getValue('Dutchycorp', true) },
        // Add more websites
    ];

    // Create the menu
    const menu = document.createElement('div');
    menu.style.position = 'fixed';
    menu.style.bottom = '50px';
    menu.style.left = '50%'; // Setze den linken Rand auf 50%
    menu.style.transform = 'translateX(-50%)'; // Zentriere das Menü
    menu.style.backgroundColor = '#fff';
    menu.style.padding = '10px';
    menu.style.border = '1px solid #ccc';
    menu.style.display = 'none';
    menu.style.zIndex = '9999';

    // Create buttons for each website with activation status
    websites.forEach(website => {
        const button = document.createElement('button');
        button.textContent = website.name + (website.active ? ' (Activated)' : ' (Deactivated)');
        button.style.display = 'block';
        button.style.marginBottom = '5px';
        button.style.zIndex = '9999';

        // Click event for left-click (opens the URL)
        button.addEventListener('click', (event) => {
            if (event.button === 0) {
                openWebsite(website.url);
            }
        });

        // Context menu for right-click (activates/deactivates)
        button.addEventListener('contextmenu', (event) => {
            event.preventDefault();
            website.active = !website.active;
            GM_setValue(website.name, website.active);
            button.textContent = website.name + (website.active ? ' (Activated)' : ' (Deactivated)');
        });

        menu.appendChild(button);
    });

    // Create the main button
    const mainButton = document.createElement('button');
    mainButton.textContent = "Faucet Monitor by Andrewblood";
    mainButton.style.position = 'fixed';
    mainButton.style.bottom = '10px';
    mainButton.style.left = '50%'; // Setze den linken Rand auf 50%
    mainButton.style.transform = 'translateX(-50%)'; // Zentriere den Button
    mainButton.style.padding = '10px';
    mainButton.style.zIndex = '9999';

    // Click event for the main button
    mainButton.addEventListener('click', () => {
        // Toggle menu visibility
        menu.style.display = menu.style.display === 'none' ? 'block' : 'none';
    });



    // Add elements to the overlay
    overlay.appendChild(showStoredUrlsButton);
    overlay.appendChild(otherRequirementsButton);

    // Add overlay to the body
    document.body.appendChild(overlay);
    // Add buttons to the document
    document.body.appendChild(menu);
    document.body.appendChild(mainButton);


    var currentURL = window.location.href;
    if (currentURL.includes("https://sollcrypto.com/home/page/") || currentURL.includes("https://cryptoclaps.com/earn/") || currentURL.includes("https://baltoniearn.com/claim/tron/") || currentURL.includes("https://vptron.online/TRX/") || currentURL.includes("https://claimcoins.site/reward/") || currentURL.includes("https://bnbminers.site/earns/") || currentURL.includes("https://ltcmines.site/earns/") || currentURL.includes("https://tronxminer.com/rewards/") || currentURL.includes("https://etcoin.site/earn/")) {

        setTimeout(function () {
            location.reload();
        }, 330000);

        var currentPageUrl = window.location.href;

        var indexOfRParameter = currentPageUrl.indexOf("?r=");
        if (indexOfRParameter !== -1) {
            currentPageUrl = currentPageUrl.substring(0, indexOfRParameter);
        }

        var storedUrls = GM_getValue('storedUrls', []) || [];

        // Erster Selector: The faucet does not have sufficient funds for this transaction
        var selector1 = ".alert.alert-danger.fade.show";
        if (isElementVisible(selector1) && document.querySelector(selector1)?.innerText === ' The faucet does not have sufficient funds for this transaction.') {
            var reason1 = 'sufficient funds';
            var timestamp1 = new Date(new Date().getTime() + 24 * 60 * 60 * 1000).toISOString().slice(0, 19).replace('T', ' ');
            saveUrl(currentPageUrl, timestamp1, reason1);
        }

        // Zweiter Selector: Your daily claim limit has been reached. Please come back in tomorrow.
        var selector2 = ".alert.alert-danger.fade.show";
        if (isElementVisible(selector2) && document.querySelector(selector2)?.innerText === ' Your daily claim limit has been reached. Please come back in tomorrow.') {
            var reason2 = 'daily claim limit';
            // Berechne die Zeit für den nächsten Tag um 01:00 Uhr
            var tomorrow = new Date();
            tomorrow.setDate(tomorrow.getDate() + 1);
            tomorrow.setHours(4, 0, 0, 0);
            var timestamp2 = tomorrow.toISOString().slice(0, 19).replace('T', ' ');
            saveUrl(currentPageUrl, timestamp2, reason2);
        }

        function saveUrl(url, timestamp, reason) {
            var urlWithTimestamp = { url: url, timestamp: timestamp, reason: reason };

            var existingUrlIndex = storedUrls.findIndex(function (storedUrl) {
                return storedUrl.url === url;
            });

            if (existingUrlIndex !== -1) {
                storedUrls[existingUrlIndex].timestamp = timestamp;
                storedUrls[existingUrlIndex].reason = reason;
            } else {
                storedUrls.push(urlWithTimestamp);
            }

            GM_setValue('storedUrls', storedUrls);
        }

        // Check if the element with the text "satoshi" or specific error messages is visible
        if ((isElementVisible(".alert.alert-success.fade.show") &&
             document.querySelector(".alert.alert-success.fade.show").innerText.includes('satoshi')) ||
            (isElementVisible(".alert.alert-danger.fade.show") &&
             document.querySelector(".alert.alert-danger.fade.show").innerText === ' The faucet does not have sufficient funds for this transaction.') ||
            (isElementVisible(".alert.alert-danger.fade.show") &&
             document.querySelector(".alert.alert-danger.fade.show").innerText === ' Session invalid, try again') ||
            (isElementVisible(".alert.alert-danger.fade.show") &&
             document.querySelector(".alert.alert-danger.fade.show").innerText === ' Your daily claim limit has been reached. Please come back in tomorrow.')) {
            // Vorhandene URLs mit Timestamps
            var storedUrls = GM_getValue('storedUrls', []) || [];
            // Funktion zum Überprüfen und Verbinden mit der nächsten gültigen URL
            function checkAndConnectNextUrl() {
                // Aktuelle URL ohne den Referral-Code
                var currentUrl = window.location.href.includes('?r=') ? window.location.href.split('?r=')[0] : window.location.href;

                console.log("Current URL:", currentUrl);

                // Suche nach der Position der aktuellen URL in der Liste
                var currentIndex = urls.indexOf(currentUrl);

                console.log("Current Index:", currentIndex);

                var validUrlFound = false;

                // Überprüfe die nächste URL in der Liste
                for (var i = currentIndex + 1; i < currentIndex + urls.length; i++) {
                    var nextUrl = urls[i % urls.length]; // Modulo verwendet, um wieder von vorne zu beginnen

                    console.log("Checking next URL:", nextUrl);

                    // Überprüfe, ob die URL bereits in storedUrls vorhanden ist
                    var storedUrlInfo = storedUrls.find(function (storedUrl) {
                        return storedUrl.url === nextUrl;
                    });

                    console.log("Stored URL Info:", storedUrlInfo);

                    // Wenn die URL nicht in storedUrls vorhanden ist oder das Datum in der Zukunft liegt
                    if (!storedUrlInfo || new Date() > new Date(storedUrlInfo.timestamp)) {
                        // Verbinde mit der gültigen URL
                        console.log("Connecting to the next valid URL:", nextUrl);

                        // Führe hier deine Verbindungslogik durch
                        window.location.href = nextUrl;

                        // Markiere, dass eine gültige URL gefunden wurde
                        validUrlFound = true;

                        // Verlasse die Schleife, da eine gültige URL gefunden wurde
                        break;
                    }
                }

                // Wenn keine gültige URL gefunden wurde, zeige einen Alert
                if (!validUrlFound) {
                    alert("All sites are empty or daily limit reached. Please start the script tomorrow again.");
                    // Schließe das Fenster nach 3 Sekunden (3000 Millisekunden)
                }
            }

            // Beispielaufruf der Funktion
            checkAndConnectNextUrl();
        } else {
            // Element is not visible, so proceed with the actions
            // Check if the Referral Code is in the URL, if not, add it
            var currentURL = window.location.href;
            var referralCode = '[email protected]';

            if (!currentURL.includes(referralCode)) {
                currentURL += referralCode;
                window.location.href = currentURL; // Redirect with the updated URL
            } else {
                // Continue with actions as the Referral Code is already present
                // If the Faucetpay email field is found, fill it with the saved email address
                var faucetpayEmailInput = document.querySelector("#address");
                if (faucetpayEmailInput) {
                    // Abrufen und Einsetzen des gespeicherten Werts
                    var storedEmail = GM_getValue('storedEmail', '');
                    faucetpayEmailInput.value = storedEmail;

                    var loginbutton = document.querySelectorAll('button[data-target="#captchaModal"]');
                    loginbutton[0].click();

                    if (document.querySelector("#captchaModal").innerText.includes('AntiBot links')) {
                        // Check if the pop-up/overlay appears and click the login button if conditions are met
                        var intervalId = setInterval(function() {
                            var antibotLinksValue = document.querySelector("#antibotlinks").value.length;
                            var recaptchaResponseValue = document.querySelector("#g-recaptcha-response").value.length;

                            if (antibotLinksValue > 1 && recaptchaResponseValue > 1) {
                                clearInterval(intervalId);

                                // Click the login button
                                clickButton("#login");
                            }
                        }, 1000);
                    } else {
                        // Check if the pop-up/overlay appears and click the login button if conditions are met
                        var intervalId2 = setInterval(function() {
                            var recaptchaResponseValue = document.querySelector("#g-recaptcha-response").value.length;

                            if (recaptchaResponseValue > 1) {
                                clearInterval(intervalId2);

                                // Click the login button
                                clickButton("#login");
                            }
                        }, 1000);
                    }
                }

            }
        }
    }

    // Dutchycorp Script
    websites.forEach(website => {
        if (website.active && window.location.href.includes(website.url)) {
            setTimeout(function(){
                location.reload();
            }, 180000);

            if (window.location.href == "https://autofaucet.dutchycorp.space/signup.php") {
                if (window.location.href != "https://autofaucet.dutchycorp.space/signup.php?r=Andrewblood&s=Script") {
                    window.location.replace("https://autofaucet.dutchycorp.space/signup.php?r=Andrewblood&s=Script");
                }
            }

            if (window.location.href == "https://autofaucet.dutchycorp.space/dashboard.php") {
                window.location.replace("https://autofaucet.dutchycorp.space/roll.php");
            }

            if (window.location.href.includes("https://autofaucet.dutchycorp.space/roll.php")) {
                if (!document.querySelector("#timer")) {
                    setInterval(function() {
                        if (isCaptchaChecked()) {
                            if (document.querySelector(".boost-btn.unlockbutton")) {
                                document.querySelector(".boost-btn.unlockbutton").click();
                            }
                            if (visibleCheck(document.querySelector("#claim_boosted"))) {
                                document.querySelector("#claim_boosted").click();
                            }
                        }
                    }, 5000);
                } else {
                    setTimeout(function() {
                        window.location.replace("https://autofaucet.dutchycorp.space/coin_roll.php");
                    }, 5000);
                }
            }

            if (window.location.href.includes("https://autofaucet.dutchycorp.space/coin_roll.php")) {
                if (!document.querySelector("#timer")) {
                    setInterval(function() {
                        if (isCaptchaChecked()) {
                            if (document.querySelector(".boost-btn.unlockbutton")) {
                                document.querySelector(".boost-btn.unlockbutton").click();
                            }
                            if (visibleCheck(document.querySelector("#claim_boosted"))) {
                                document.querySelector("#claim_boosted").click();
                            }
                        }
                    }, 5000);
                } else {
                    setTimeout(function() {
                        window.location.replace("https://autofaucet.dutchycorp.space/ptc/wall.php");
                    }, 5000);
                }
            }

            if (window.location.href.includes("https://autofaucet.dutchycorp.space/ptc/wall.php")) {
                var wallLink = document.querySelectorAll(".col.s10.m6.l4 a[name='claim']");
                if (wallLink.length >= 1) {
                    wallLink[0].style.backgroundColor = "red";
                    let match = wallLink[0].onmousedown.toString().match(/'href', '(.+)'/);
                    let hrefValue = match[1];
                    setTimeout(function() {
                        window.location.replace("https://autofaucet.dutchycorp.space" + hrefValue);
                    }, 5000);
                } else {
                    setTimeout(function() {
                        window.location.replace("https://autofaucet.dutchycorp.space/ptc/");
                    }, 5000);
                }
            }

            if (window.location.href.includes("https://autofaucet.dutchycorp.space/ptc/view")) {
                setInterval(function() {
                    if (document.querySelector("#sec").innerText === 'Payout in  0 seconds') {
                        document.getElementsByClassName("g-recaptcha bordeaux-btn btn-small waves-effect waves-red")[0].click();
                        setTimeout(function() {
                            console.log("Wait for Captcha");
                        }, 30000);
                    } else {
                        console.log("Wait on timer.");
                    }
                }, 5000);
            }

            if (window.location.href === "https://autofaucet.dutchycorp.space/ptc/") {
                setInterval(function() {
                    if (document.querySelector("body > div.col.s12 > div.row > div.col.s12.m12.l10 > center:nth-child(1) > h4")) {
                        if (document.querySelector("body > div.col.s12 > div.row > div.col.s12.m12.l10 > center:nth-child(1) > h4").innerText == ' All Available Ads Watched') {
                            window.close();
                        }
                    } else if (document.querySelector("#sec").innerText == 'Payout in  0 seconds') {
                        document.getElementsByClassName("g-recaptcha gradient-btn btn-small waves-effect waves-purple")[0].click();
                        setTimeout(function() {
                            console.log("Wait for Captcha");
                        }, 30000);
                    } else {
                        console.log("Wait on timer.");
                    }
                }, 5000);
            }

        }
    });

    // Freebitco.in Script
    websites.forEach(website => {
        if (website.active && window.location.href.includes(website.url)) {
            if (window.location.href.includes("https://freebitco.in/signup/?op=s")) {
                if (window.location.href != ("https://freebitco.in/signup/?op=s&r=3595810")) {
                    window.location.replace("https://freebitco.in/signup/?op=s&r=3595810");
                }
            }

            if (window.location.href.includes("https://freebitco.in/?op=home")) {
                if (document.querySelector("#free_play_form_button").style.display == "none") {
                    console.log("Wait for next Roll.");
                    setTimeout(function() {
                        window.close();
                    }, 1000 * 30);
                } else {
                    if (document.querySelector("#free_wof_spins_msg > a:nth-child(3)")) {
                        console.log("Make the WoF Spins.");
                        window.open("https://freebitco.in/static/html/wof/wof-premium.html");
                    }
                    console.log("Let's look for Bonus");
                    document.querySelector("body > div.large-12.fixed > div > nav > section > ul > li:nth-child(8) > a").click();
                    document.querySelector("#rewards_tab > div.row.reward_category_container_main_div > div > div:nth-child(4) > div.reward_category_name").click();
                    setTimeout(function() {
                        var yourrwp = parseFloat(document.querySelector("#rewards_tab > div:nth-child(2) > div > div.reward_table_box.br_0_0_5_5.user_reward_points.font_bold").innerText.replace(/,/, ''));
                        console.log("Your current Reward Points are:");
                        console.log(yourrwp);
                        var bonuscost = parseFloat(document.querySelector("#fp_bonus_rewards > div:nth-child(2) > div:nth-child(2) > div.large-6.small-12.columns > div").innerText.replace(/,/, ''));
                        console.log("The Price for 1000% BTC-Bonus is:");
                        console.log(bonuscost);
                        if (yourrwp > bonuscost) {
                            document.querySelector("#fp_bonus_rewards > div:nth-child(2) > div:nth-child(2) > div:nth-child(3) > button").click();
                        } else {
                            console.log("Your balance is too low to buy.");
                        }
                        document.querySelector("#free_play_link_li > a").click();
                    }, 1000 * 5);

                    // Make the Roll
                    setTimeout(function() {
                        if (document.querySelector("#anchor")) {
                            console.log("Wait for Captcha and.....");

                            if (isCaptchaChecked()) {
                                document.querySelector("#free_play_form_button").click();
                                setTimeout(function() {
                                    window.close();
                                }, 1000 * 30);
                            }
                        } else {
                            document.querySelector("#free_play_form_button").click();
                            setTimeout(function() {
                                window.close();
                            }, 1000 * 10);
                        }
                    }, 1000 * 10);
                }
            }

            if (window.location.href.includes("https://freebitco.in/static/html/wof/wof-premium.html")) {
                setTimeout(function() {
                    document.querySelector("#wofc-section > div > div.wofc-spins > p > button:nth-child(2)").click();
                }, 1000 * 10);
                setTimeout(function() {
                    window.close();
                }, 1000 * 30);
            }
        }
    });

})();