EarnSolana Faucet Auto Claim Loop (All Pages)

Auto-Claim for EarnSolana

// ==UserScript==
// @name         EarnSolana Faucet Auto Claim Loop (All Pages)
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Auto-Claim for EarnSolana
// @author       👽
// @match        https://earnsolana.xyz/*
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    console.log('✅ EarnSolana Auto Claim script loaded on:', window.location.href);

    function delay(ms) {
        return new Promise(resolve => setTimeout(resolve, ms));
    }

    function waitForElement(selector, timeout = 15000) {
        return new Promise((resolve, reject) => {
            const start = Date.now();
            const interval = setInterval(() => {
                const el = document.querySelector(selector);
                if (el) {
                    clearInterval(interval);
                    resolve(el);
                } else if (Date.now() - start > timeout) {
                    clearInterval(interval);
                    console.warn('⏰ Element not found within timeout:', selector);
                    resolve(null);  // Avoid rejecting; allow the loop to continue
                }
            }, 500);
        });
    }

    async function autoClaimCycle() {
        while (true) {
            console.log('🔁 Starting claim cycle...');

            // Step 1: Wait and click "Claim Now"
            await delay(8000);
            const claimButton = document.getElementById('subbutt');
            if (claimButton) {
                claimButton.click();
                console.log('🟢 "Claim Now" button clicked');
            } else {
                console.log('⚠️ "Claim Now" button not found');
            }

            // Step 2: Wait and click SweetAlert "OK"
            await delay(5000);
            const okButton = Array.from(document.querySelectorAll('button.swal2-confirm.swal2-styled'))
                .find(btn => btn.offsetParent !== null);  // visible button
            if (okButton) {
                okButton.click();
                console.log('🟢 "OK" button clicked');
            } else {
                console.log('⚠️ "OK" button not found');
            }

            // Step 3: Wait and click "Go Claim" link
            await delay(5000);
            const goClaimLink = Array.from(document.querySelectorAll('a.btn.btn-primary'))
                .find(link => link.textContent.toLowerCase().includes('go claim'));
            if (goClaimLink) {
                goClaimLink.click();
                console.log('🟢 "Go Claim" link clicked');
            } else {
                console.log('⚠️ "Go Claim" link not found');
            }

            // Optional delay before the next loop
            await delay(3000);
        }
    }

    // Only start loop if we're on a faucet-related page
    if (window.location.href.includes('/faucet')) {
        window.addEventListener('load', () => {
            console.log('🚀 Starting auto claim loop...');
            autoClaimCycle();
        });
    } else {
        console.log('ℹ️ Not a faucet page, script idle.');
    }

})();