NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Vie Faucets Cryptorotator // @namespace Vie Faucets Cryptorotator // @version 0.2 // @description Vie Faucets Cryptorotator // @author steamfaucet // @match https://free-bonk.com/* // @match https://criptolia.site/* // @match https://banfaucet.com/* // @match https://cashbux.work/* // @match https://tronpayz.com/* // @match https://litefaucet.in/* // @match https://tartaria-faucet.net/* // @match https://coinarns.com/* // @match https://www.freebnbcoin.com/* // @match https://whoopyrewards.com/* // @match https://99faucet.com/* // @match https://pepy.monster/* // @match https://xtrabits.click/* // @match https://coinymate.com/* // @match https://bchads.io/* // @match https://freeltc.online/* // @match https://claimcrypto.in/* // @match https://claimcoin.in/* // @match https://coinluva.com/* // @match https://bitupdate.info/* // @match https://almasat.net/* // @match https://coinveu.com/* // @match https://adhunterptc.xyz/* // @match https://bullfaucet.in/* // @match https://bdfaucet.com/* // @match https://bitfaucet.pw/* // @match https://claimcash.cc/* // @match https://coinmb.com/* // @match https://cryptobigpay.online/* // @match https://cryptojunkie.net/* // @match https://earnbtc.pw/* // @match https://earnviv.com/* // @match https://faucet4u.com/* // @match https://faucetbazzar.com/* // @match https://freetron.top/* // @match https://hatecoin.me/* // @match https://nobitafc.com/* // @match https://wincrypt2.com/* // @match https://bitsfree.net/* // @match https://buxcoin.io/* // @match https://coinoto.net/* // @match https://crypto-farms.site/* // @match https://cryptomaker.in/* // @match https://cryptoukr.in.ua/* // @match https://faucetenb.com/* // @match https://freebinance.top/* // @match https://freecryptoss.com/* // @match https://freeshib.biz/* // @match https://furyfaucet.com/* // @match https://goldsurferfaucet.de/* // @match https://litecoinline.com/* // @match https://ptc4btc.com/* // @match https://coindoog.com/* // @match https://98faucet.com/* // @match https://spinfaucet.ru/* // @match https://liteonion.online/* // @match https://claimfreetrx.online/* // @match https://claimsatoshi.xyz/* // @match https://cryptoearns.com/* // @match https://kryptofaucet.com/* // @match https://fastfaucet.net/* // @match https://ourcoincash.xyz/* // @noframes // @grant GM_addStyle // @license MIT // @copyright 2024, steamfaucet (https://openuserjs.org/users/steamfaucet) // ==/UserScript== (function() { 'use strict'; // Enable Next button to manually move to next website const ENABLE_NEXT_BUTTON = false; // Enable the withdrawal when you wish to withdraw // The automation is partial as the balances in different wallets is not known and sometimes insufficient. // The forms are filled. You can decide which coin to withdraw when it redirects to withdrawal page. // Make sure you are already logged in when enabling the following option. // You may enable this once a week or once a month to withdraw. // Make sure to disbale it after withdrawing const ENABLE_WITHDRAWAL = false; // Following email and wallet address are required to autofill form when withdrawal is enabled const FAUCET_PAY_EMAIL=""; const FAUCET_PAY_BTC_WALLET_ADDRESS=""; const CWALLET_EMAIL=""; const CWALLET_ID=""; // Set the following to true to enable shortlinks const SHORTLINKS_ENABLED = false; // Add or Remove Shortlinks from the list below // Shortlinks with pre_verify path are skipped due to multi captcha verification const SHORTLINKS_LIST = ["ouo","foary","cuty","cbshort","urlspay","exe","clksh","clk.pw", "linkrex","mitly","tmearn","mgnet","bitspace","shrinkearn","fclc", "fc.lc","droplink"]; // Enter your login and password below, if you like to Autologin. Be careful while providing passwords, // else you may get your accounts locked var websiteData = [ {url : "https://free-bonk.com/ptc", login: "", password: ""}, {url : "https://banfaucet.com/ptc", login: "", password: ""}, {url : "https://criptolia.site/ptc", login: "", password: ""}, {url : "https://cashbux.work/ptc", login: "", password: ""}, {url : "https://tronpayz.com/ptc", login: "", password: ""}, {url : "https://litefaucet.in/ptc", login: "", password: ""}, {url : "https://tartaria-faucet.net/ptc", login: "", password: ""}, {url : "https://coinarns.com/ptc", login: "", password: ""}, {url : "https://bchads.io/ptc", login: "", password: "", withdrawPath: "/dashboard"}, {url : "https://coinluva.com/ptc", login: "", password: "", withdrawPath: "/dashboard"}, {url : "https://whoopyrewards.com/ptc", login: "", password: "", withdrawPath: "/dashboard"}, {url : "https://www.freebnbcoin.com/ptc", login: "", password: "", withdrawPath: "/withdrawtoken"}, {url : "https://99faucet.com/ptc", login: "", password: ""}, {url : "https://pepy.monster/ptc", login: "", password: ""}, {url : "https://coinymate.com/ptc", login: "", password: ""}, {url : "https://xtrabits.click/ptc", login: "", password: ""}, {url : "https://freeltc.online/ptc", login: "", password: "", withdrawPath: "/dashboard"}, {url : "https://bitupdate.info/ptc", login: "", password: "", withdrawPath: "/dashboard"}, {url : "https://almasat.net/ptc", login: "", password: "", withdrawPath: "/dashboard"}, {url : "https://adhunterptc.xyz/ptc", login: "", password: "", withdrawPath: "/dashboard"}, {url : "https://bdfaucet.com/ptc", login: "", password: "", withdrawPath: "/dashboard"}, {url : "https://claimcash.cc/ptc", login: "", password: "", withdrawPath: "/dashboard"}, {url : "https://cryptobigpay.online/ptc", login: "", password: ""}, {url : "https://cryptojunkie.net/ptc", login: "", password: "", withdrawPath: "/dashboard"}, {url : "https://freetron.top/ptc", login: "", password: "", withdrawPath: "/dashboard"}, {url : "https://hatecoin.me/ptc", login: "", password: "", withdrawPath: "/dashboard"}, {url : "https://nobitafc.com/ptc", login: "", password: ""}, {url : "https://wincrypt2.com/ptc", login: "", password: ""}, {url : "https://bitsfree.net/ptc", login: "", password: ""}, {url : "https://buxcoin.io/ptc", login: "", password: "", withdrawPath: "/dashboard"}, {url : "https://coinoto.net/ptc", login: "", password: "", withdrawPath: "/dashboard"}, {url : "https://cryptomaker.in/ptc", login: "", password: "", withdrawPath: "/dashboard"}, {url : "https://cryptoukr.in.ua/ptc", login: "", password: "", withdrawPath: "/dashboard"}, {url : "https://faucetenb.com/ptc", login: "", password: "", withdrawPath: "/dashboard"}, {url : "https://freebinance.top/ptc", login: "", password: "", withdrawPath: "/dashboard"}, {url : "https://freecryptoss.com/ptc", login: "", password: "", withdrawPath: "/dashboard"}, {url : "https://freeshib.biz/ptc", login: "", password: ""}, {url : "https://furyfaucet.com/ptc", login: "", password: "", withdrawPath: "/dashboard"}, {url : "https://litecoinline.com/ptc", login: "", password: "", withdrawPath: "/dashboard"}, {url : "https://ptc4btc.com/ptc", login: "", password: "", withdrawPath: "/dashboard"}, {url : "https://coindoog.com/ptc", login: "", password: ""}, {url : "https://98faucet.com/ptc", login: "", password: ""}, {url : "https://spinfaucet.ru/ptc", login: "", password: "", withdrawPath: "/dashboard"}, {url : "https://liteonion.online/ptc", login: "", password: "", withdrawPath: "/dashboard"}, {url : "https://claimfreetrx.online/ptc", login: "", password: "", withdrawPath: "/dashboard"}, {url : "https://claimsatoshi.xyz/ptc", login: "", password: ""}, {url : "https://cryptoearns.com/ptc", login: "", password: ""}, {url : "https://kryptofaucet.com/ptc", login: "", password: ""}, {url : "https://fastfaucet.net/ptc", login: "", password: "", withdrawPath: "/dashboard"}, {url : "https://ourcoincash.xyz/ptc", login: "", password: "", withdrawPath: "/dashboard"} ]; // ============================================================================================================================================ window.open= function(){}; if(unsafeWindow){ unsafeWindow.open= function(){}; } // Captcha Priority List for switching between different types of captcha const CAPTCHA_PRIORITY_LIST = ["cloudflare","turnstile","recaptcha v2"]; var clicked = false; // Check if a string is present in Array String.prototype.includesOneOf = function(arrayOfStrings) { // If this is not an Array, compare it as a String if (!Array.isArray(arrayOfStrings)) { return this.toLowerCase().includes(arrayOfStrings.toLowerCase()); } for (var i = 0; i < arrayOfStrings.length; i++) { if (this.toLowerCase().includes(arrayOfStrings[i].toLowerCase())) { return true; } } return false; } var websiteMap = [ { loginSelectors: ["input[type=email],input[type=text]", "input[type=password]", "button[type=submit]"], captchaButtonSubmitSelector: ["button[type=submit]"], additionalFunctions: ptcClick, }, ] var websiteDataValues = {}; // Get selector details from the websiteMap for (let value of Object.values(websiteMap)) { websiteDataValues.inputTextSelector = value.inputTextSelector; websiteDataValues.inputTextSelectorButton = value.inputTextSelectorButton; websiteDataValues.defaultButtonSelectors = value.defaultButtonSelectors; websiteDataValues.claimButtonSelector = value.claimButtonSelector; websiteDataValues.captchaButtonSubmitSelector = value.captchaButtonSubmitSelector; websiteDataValues.loginSelectors = value.loginSelectors; websiteDataValues.loginCaptcha = value.loginCaptcha; websiteDataValues.allMessageSelectors = value.allMessageSelectors; websiteDataValues.messagesToCheckBeforeMovingToNextUrl = value.messagesToCheckBeforeMovingToNextUrl; websiteDataValues.withdrawPageUrl = value.withdrawPageUrl; websiteDataValues.withdrawEnabled = value.withdrawEnabled; websiteDataValues.balanceSelector = value.balanceSelector; websiteDataValues.withdrawMinAmount = value.withdrawMinAmount; websiteDataValues.successMessageSelectors = value.successMessageSelectors; websiteDataValues.additionalFunctions = value.additionalFunctions; websiteDataValues.timeoutbeforeMovingToNextUrl = value.timeoutbeforeMovingToNextUrl; break; } var login = ""; var password = ""; var withdrawPath = ""; var count = 0; var addressAssigned = false; for (let value of Object.values(websiteData)){ count = count + 1; if(value.url.includes(window.location.hostname) && (window.location.href.includes("/" + value.regex + "/") || window.location.href.includes("/" + value.regex + "-") || window.location.href.endsWith("/" + value.regex) || window.location.href.endsWith(window.location.hostname) || window.location.href.endsWith(window.location.hostname + "/"))){ websiteDataValues.address = value.address; login = value.login; password = value.password; if(value.withdrawPath){ withdrawPath = value.withdrawPath; } addressAssigned = true; break; } } // If URL does not have coin, check the default from the domain name if(!addressAssigned){ count = 0; for (let value of Object.values(websiteData)) { count = count + 1; if(value.url.includes(window.location.hostname)){ websiteDataValues.url = value.url; login = value.login; password = value.password; if(value.withdrawPath){ withdrawPath = value.withdrawPath } addressAssigned = true; break; } } } async function ptcClick(){ // Shortlinks with preverify are skipped due to different types of captchas // Write your logic here if you wish to solve captchas if (window.location.href.includes("pre_verify")) { goToNextUrl(); return; } if (/links$/.test(window.location.href)) { unsafeWindow.onbeforeunload = function() {}; const links = document.querySelectorAll('a'); // Iterate through the NodeList and set the target attribute links.forEach(link => { link.removeAttribute('target'); // Set the target attribute }); var clicked = false; let buttons = document.querySelectorAll(['h4', 'h5']); loopB: for (let i = 0; i < buttons.length; i++) { if (buttons[i]?.parentNode.querySelector('a') && isAncestorHidden(buttons[i]?.parentNode.querySelector('a')) && !buttons[i]?.parentNode.querySelector('button')?.disabled && !buttons[i]?.parentNode.querySelector('a')?.hasAttribute("disabled")) { for (let j = 0; j < SHORTLINKS_LIST.length; j++) { if (buttons[i]?.innerText.toLowerCase().includes(SHORTLINKS_LIST[j].toLowerCase())) { buttons[i]?.parentNode.querySelector('a')?.click(); clicked = true; console.log("Clicked the element") break loopB; } } } } if (!clicked) { loopC: for (let i = 0; i < buttons.length; i++) { if (buttons[i]?.parentNode?.parentNode?.querySelector('a') && !buttons[i]?.parentNode?.parentNode?.querySelector('a')?.hasAttribute("disabled")) { for (let j = 0; j < SHORTLINKS_LIST.length; j++) { if (buttons[i]?.innerText.toLowerCase().includes(SHORTLINKS_LIST[j].toLowerCase())) { buttons[i]?.parentNode.parentNode.querySelector('a')?.click(); clicked = true; console.log("Clicked the element") break loopC; } } } } } setInterval(function() { if (window.location.href.includes("google_vignette")) { window.location.href = "/links"; } }, 10000) if (!clicked) { goToNextUrl(); } return; } const tabs = document.querySelectorAll('[role="tab"]'); var tabDetected = false; // Iterate over tabs to find the one with "iframe" text inside tabs.forEach(async tab => { if (tab.innerText.toLowerCase().includes('iframe')) { // Select the tab by clicking it tab.click(); tabDetected = true; await delay(2000); } }); if(document.querySelector("#showIframeAds")){ document.querySelector("#showIframeAds").click(); tabDetected = true; await delay(2000); } const regexArray = [ /^visit for \d+ sec$/, /^go$/, /^view$/, /^view now$/, /^visit now$/, /^view ads/, /^view ad/, /^watch$/, /^visit$/ ]; let ptcClicked = false; if(tabDetected == true){ let tabId = document.querySelector('[role="tab"][aria-selected="true"]')?.getAttribute("href"); let tabElement = document.querySelector(tabId) || document.querySelector("#iframeAds"); if(tabElement){ console.log(tabElement.querySelectorAll('button')); for(let i=0; i< regexArray.length;i++){ let button = Array.from(tabElement.querySelectorAll('button')).find(el => regexArray[i].test(el.textContent.toLowerCase().trim())); if(button){ button?.click(); ptcClicked = true; break; } } if(!ptcClicked && /ptc$/.test(window.location.href)){ if(SHORTLINKS_ENABLED){ window.location.href = "/links"; } else { goToNextUrl(); } } } }else{ for(let i=0; i< regexArray.length;i++){ let button = Array.from(document.querySelectorAll('button')).find(el => regexArray[i].test(el.textContent.toLowerCase().trim())); if(button && !isAncestorHidden(button)){ button?.click(); ptcClicked = true; break; } } if(!ptcClicked && /ptc$/.test(window.location.href)){ if(SHORTLINKS_ENABLED){ window.location.href = "/links"; } else { goToNextUrl(); } } } } function isAncestorHidden(element) { let parent = element; while (parent) { const display = getComputedStyle(parent).getPropertyValue('display'); if (display === 'none') { return true; } parent = parent.parentElement; } return false; } // Get the next Url from the website data map async function getNextUrl() { // Go to the beginning if the end of the array is reached if (count >= websiteData.length) { websiteDataValues.nextUrl = websiteData[0].url; } else { websiteDataValues.nextUrl = websiteData[count].url; } // Use case for overrding next Url if (websiteDataValues.overrideNextUrl) { websiteDataValues.nextUrl = websiteDataValues.overrideNextUrl; } } async function delay(ms) { return new Promise(resolve => setTimeout(resolve, ms)) } var movingToNextUrl = false; async function goToNextUrl() { if (!movingToNextUrl) { movingToNextUrl = true; getNextUrl(); await delay(3000); window.location.href = websiteDataValues.nextUrl; } } // Default Setting: After 180 seconds go to next Url var delayBeforeMovingToNextUrl = 180000; if (websiteDataValues.timeoutbeforeMovingToNextUrl) { delayBeforeMovingToNextUrl = websiteDataValues.timeoutbeforeMovingToNextUrl; } setTimeout(function() { goToNextUrl(); }, delayBeforeMovingToNextUrl); function withdraw() { if(document.querySelector("[role=dialog]") && !isAncestorHidden(document.querySelector("[role=dialog]"))){ goToNextUrl(); return; } if (performance.navigation.type == performance.navigation.TYPE_RELOAD) { goToNextUrl(); return; } if(document.querySelector("input[type=text][name=wallet]") && document.querySelector("input[type=text][name=wallet]").value == ""){ document.querySelector("input[type=text][name=wallet]").value=FAUCET_PAY_BTC_WALLET_ADDRESS; } if(document.querySelector("input[type=text][name=wallet]") && document.querySelector("input[type=text][name=wallet]")?.nextElementSibling?.innerText.toLowerCase().includes("email") || document.querySelector("input[type=text][name=wallet]")?.previousElementSibling?.innerText.toLowerCase().includes("email")){ document.querySelector("input[type=text][name=wallet]").value=FAUCET_PAY_EMAIL; } var fpWalletNodes = Array.from(document.querySelectorAll(['span','p'])) .filter(el => /faucetpay/.test(el.textContent.toLowerCase().trim())); var cWalletNodes = Array.from(document.querySelectorAll(['span','p'])) .filter(el => /cwallet/.test(el.textContent.toLowerCase().trim())); function isProgressValid(element) { let parent = element; while (parent) { if (parent.querySelector("[role=progressbar]") && parseInt(parent.querySelector("[role=progressbar]").getAttribute("aria-valuenow")) > 10) { return true; } if (parent.querySelector("[role=progressbar]") && parseInt(parent.querySelector("[role=progressbar]").getAttribute("aria-valuenow")) < 10) { return false; } parent = parent.parentElement; } return true; } function selectRadioButton(element) { let parent = element; while (parent) { if (parent.querySelector("[type=radio]")) { parent.querySelector("[type=radio]").click(); return true; } parent = parent.parentElement; } return false; } var selectedRadio = false; var walletSelected = ""; for(let i=0; i< fpWalletNodes.length;i++){ if(isProgressValid(fpWalletNodes[i])){ let balance = parseFloat(fpWalletNodes[i]?.parentNode?.parentNode?.parentNode?.querySelector(".form-check-label")?.innerText.split('~')[1].trim()); let minWithdraw = parseFloat(fpWalletNodes[i]?.parentNode?.parentNode?.parentNode?.querySelector("h5")?.innerText.split(" ")[0].trim()); if(minWithdraw && balance < minWithdraw) { goToNextUrl(); return; } selectRadioButton( fpWalletNodes[i]); selectedRadio = true; walletSelected = "faucetpay"; break; } } if(selectedRadio == false){ for(let i=0; i< cWalletNodes.length;i++){ if(isProgressValid(cWalletNodes[i])){ let balance = parseFloat(cWalletNodes[i]?.parentNode?.parentNode?.parentNode?.querySelector(".form-check-label")?.innerText.split('~')[1].trim()); let minWithdraw = parseFloat(cWalletNodes[i]?.parentNode?.parentNode?.parentNode?.querySelector("h5")?.innerText.split(" ")[0].trim()); if(minWithdraw && balance < minWithdraw) { goToNextUrl(); return; } selectRadioButton( cWalletNodes[i]); selectedRadio = true; walletSelected = "cwallet"; break; } } } if(selectedRadio == true) { // Update wallet address and solve captcha and click button if(walletSelected == "faucetpay"){ if(document.querySelector("input[type=text][name=wallet]") && document.querySelector("input[type=text][name=wallet]").value == ""){ document.querySelector("input[type=text][name=wallet]").value=FAUCET_PAY_BTC_WALLET_ADDRESS; } if(document.querySelector("input[type=text][name=wallet]")&& document.querySelector("input[type=text][name=wallet]")?.nextElementSibling?.innerText.toLowerCase().includes("email") || document.querySelector("input[type=text][name=wallet]")?.previousElementSibling?.innerText.toLowerCase().includes("email")){ document.querySelector("input[type=text][name=wallet]").value=FAUCET_PAY_EMAIL; } } if(walletSelected == "cwallet"){ if(document.querySelector("input[type=text][name=wallet]").value == ""){ document.querySelector("input[type=text][name=wallet]").value=CWALLET_ID; } if(document.querySelector("input[type=text][name=wallet]") && document.querySelector("input[type=text][name=wallet]")?.nextElementSibling?.innerText.toLowerCase().includes("email") || document.querySelector("input[type=text][name=wallet]")?.previousElementSibling?.innerText.toLowerCase().includes("email")){ document.querySelector("input[type=text][name=wallet]").value=CWALLET_EMAIL; } } const regexArray = [ /^withdraw$/ ]; function clickWithdrawButton(){ for(let i=0; i< regexArray.length;i++){ let button = Array.from(document.querySelectorAll('button')).find(el => regexArray[i].test(el.textContent.toLowerCase().trim())); if(button && !isAncestorHidden(button)){ button?.click(); break; } } } let interval= setInterval(function(){ if(document.querySelector("div.iconcaptcha-modal__body-title")?.innerText?.toLowerCase().includes("verified")){ clickWithdrawButton(); clearInterval(interval); } for (var hc = 0; hc < document.querySelectorAll("iframe").length; hc++) { if (!clicked && document.querySelectorAll("iframe")[hc] && document.querySelectorAll("iframe")[hc].getAttribute("data-hcaptcha-response") && document.querySelectorAll("iframe")[hc].getAttribute("data-hcaptcha-response").length > 0) { clickWithdrawButton(); clearInterval(interval); } } if(unsafeWindow.turnstile?.getResponse?.()?.length >0){ clickWithdrawButton(); clearInterval(interval); } if(unsafeWindow.grecaptcha?.getResponse?.()?.length >0){ clickWithdrawButton(); clearInterval(interval); } },5000); } } var stopSolvingCaptcha = false; function checkLoginSelectors() { if (websiteDataValues.loginSelectors) { // Check if all login selectors are present let count = 0; for (let i = 0; i < websiteDataValues.loginSelectors.length; i++) { if (document.querySelector(websiteDataValues.loginSelectors[i])) { count++; } } if (count == websiteDataValues.loginSelectors.length) { if (login.length > 0 && password.length > 0) { // Input Login document.querySelector(websiteDataValues.loginSelectors[0]).value = login; // Input Password document.querySelector(websiteDataValues.loginSelectors[1]).value = password; } else { stopSolvingCaptcha = true; } } else { stopSolvingCaptcha = true; } } else { stopSolvingCaptcha = true; } } if(ENABLE_NEXT_BUTTON){ var node = document.createElement ('div'); node.setAttribute ('class', 'floatbuttonabc nextabc'); node.innerHTML = '<p>Next</p>'; document.body.appendChild (node); document.querySelector(".floatbuttonabc").addEventListener ( "click", goToNextUrl, false ); GM_addStyle ( ` .floatbuttonabc { position: fixed; right: -77px; top: 270px; transition: all 0.2s ease-in 0s;//this is the key attribute z-index: 9999; cursor: pointer; } .floatbuttonabc:hover { right: -7px;//hide it by pushing it off the screen } .nextabc { position: fixed; width: 20%; } .nextabc p { padding: 8px; margin-bottom: 8px; background-color: #33b5e5; color: #ffffff; } .nextabc p:hover { background-color: #0099cc; } ` ); } setTimeout(function() { if(window.location.href.includes("maintenance") || window.location.href.includes("locked")){ goToNextUrl(); return; } if(document.querySelector("h2")?.innerText.toLowerCase().includes("verify")){ console.log("Turnstile Detected"); return; } if(ENABLE_WITHDRAWAL && withdrawPath && withdrawPath != "" && window.location.href.includes(withdrawPath)){ withdraw(); return; } if(ENABLE_WITHDRAWAL && withdrawPath && withdrawPath != "" && !window.location.href.includes("/login")){ window.location.href = withdrawPath; return; } if(ENABLE_WITHDRAWAL && withdrawPath == "" && !window.location.href.includes("/login") && !window.location.href.includes("/withdraw")) { window.location.href = "/withdraw"; return; } if(ENABLE_WITHDRAWAL && window.location.href.includes("/withdraw")){ withdraw(); return; } if(window.location.href.includes("/dashboard")){ window.location.href="/ptc"; } if(!window.location.href.match(/([a-zA-Z0-9]+)\/ptc/) && !window.location.href.includes("/dashboard") && !window.location.href.includes("/login") && !window.location.href.match(/([a-zA-Z0-9]+)\/links/)){ window.location.href="/login"; } checkLoginSelectors(); if (websiteDataValues.additionalFunctions) { websiteDataValues.additionalFunctions(); } // Click the form button after solving captcha // Works for both recaptcha and hcaptcha var clicked = false; var toogledCaptcha = false; function triggerEvent(el, type) { try{ var e = document.createEvent('HTMLEvents'); e.initEvent(type, false, true); el.dispatchEvent(e); }catch(exception){ console.log(exception); } } function toggleCaptcha(selector, captchaTypes){ if( document.querySelector(selector)){ const select = document.querySelector(selector); var captchaSelected = false; for(let i=0; i< captchaTypes.length; i++){ const optionTextToSelect = captchaTypes[i]; for (let i = 0; i < select.options.length; i++) { const option = select.options[i]; if (option.text.toLowerCase().includes(optionTextToSelect)) { if(option.selected == true){ captchaSelected = true; break; } option.selected = true; captchaSelected = true; setTimeout(function() { triggerEvent(document.querySelector(selector), 'change'); }, 2000); break; } } if(captchaSelected){ break; } } } } var captchaInterval = setInterval(function() { document.hasFocus=function(){return true}; if (!stopSolvingCaptcha || !window.location.href.includes("login")) { try { if(document.querySelector("button[type='submit']") && (isAncestorHidden(document.querySelector("button[type='submit']")) || document.querySelector("button[type='submit']")?.disabled == true )){ return; } if(!toogledCaptcha && document.querySelector("button[type='submit']") && !isAncestorHidden(document.querySelector("button[type='submit']"))){ toggleCaptcha("#selectCaptcha",CAPTCHA_PRIORITY_LIST); toogledCaptcha = true; } if(!clicked && document.querySelector(".iconcaptcha-modal__body .iconcaptcha-modal__body-checkmark") && document.querySelector("button[type='submit']") && !isAncestorHidden(document.querySelector("button[type='submit']"))){ document.querySelector("button[type='submit']")?.click(); clicked = true; clearInterval(captchaInterval); } if(!clicked && document.querySelector("#captcha-container .captcha-icon")?.classList[2] && document.querySelector("button[type='submit']") && !isAncestorHidden(document.querySelector("button[type='submit']"))){ let className = "." + document.querySelector("#captcha-container .captcha-icon").classList[2] ; document.querySelector("#icon-options " + className)?.click(); setTimeout(function(){ if(document.querySelector("#captcha-result")?.innerText?.toLowerCase().includes("verified")){ document.querySelector("button[type='submit']")?.click(); clicked = true; clearInterval(captchaInterval); } },5000); } if(!clicked && unsafeWindow?.hcaptcha?.getResponse?.()?.length >0){ for (let i = 0; i < websiteDataValues.captchaButtonSubmitSelector.length; i++) { if (document.querySelector(websiteDataValues.captchaButtonSubmitSelector[i]) && !isAncestorHidden(document.querySelector(websiteDataValues.captchaButtonSubmitSelector[i]))) { document.querySelector(websiteDataValues.captchaButtonSubmitSelector[i])?.click(); clicked = true; clearInterval(captchaInterval); } } } if(!clicked && unsafeWindow?.turnstile?.getResponse?.()?.length >0){ for (let i = 0; i < websiteDataValues.captchaButtonSubmitSelector.length; i++) { if (document.querySelector(websiteDataValues.captchaButtonSubmitSelector[i]) && !isAncestorHidden(document.querySelector(websiteDataValues.captchaButtonSubmitSelector[i]))) { document.querySelector(websiteDataValues.captchaButtonSubmitSelector[i])?.click(); clicked = true; clearInterval(captchaInterval); } } } if(!clicked && unsafeWindow?.grecaptcha?.getResponse?.()?.length >0){ for (let i = 0; i < websiteDataValues.captchaButtonSubmitSelector.length; i++) { if (document.querySelector(websiteDataValues.captchaButtonSubmitSelector[i]) && !isAncestorHidden(document.querySelector(websiteDataValues.captchaButtonSubmitSelector[i]))) { document.querySelector(websiteDataValues.captchaButtonSubmitSelector[i])?.click(); clicked = true; clearInterval(captchaInterval); } } } for (var hc = 0; hc < document.querySelectorAll("iframe").length; hc++) { if (!clicked && document.querySelectorAll("iframe")[hc] && document.querySelectorAll("iframe")[hc].getAttribute("data-hcaptcha-response") && document.querySelectorAll("iframe")[hc].getAttribute("data-hcaptcha-response").length > 0) { for (let i = 0; i < websiteDataValues.captchaButtonSubmitSelector.length; i++) { if (document.querySelector(websiteDataValues.captchaButtonSubmitSelector[i]) && !isAncestorHidden(document.querySelector(websiteDataValues.captchaButtonSubmitSelector[i]))) { document.querySelector(websiteDataValues.captchaButtonSubmitSelector[i]).click(); clicked = true; clearInterval(captchaInterval); } } } } } catch (e){ // console.log(e); } } }, 5000); }, 5000); })();