NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name RS Captcha Cryptorotator // @namespace RS Captcha Cryptorotator // @version 0.2 // @description RS Captcha Cryptorotator // @author steamfaucet // @match https://bithub.win/* // @match https://claimtrx.com/* // @match https://feyorra.top/* // @match https://spaceshooter.net/* // @updateURL https://openuserjs.org/meta/steamfaucet/RS_Captcha_Cryptorotator.meta.js // @downloadURL https://openuserjs.org/install/steamfaucet/RS_Captcha_Cryptorotator.user.js // @copyright 2024, steamfaucet (https://openuserjs.org/users/steamfaucet) // @license GPL-3.0-or-later // @noframes // @grant none // ==/UserScript== (function () { 'use strict'; window.open = function () {}; var count = 0; var clicked = false; //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://bithub.win/ptc", login: "", password: "" }, { url: "https://claimtrx.com/ptc", login: "", password: "" }, { url: "https://feyorra.top/ptc", login: "", password: "" }, { url: "https://spaceshooter.net/ptc", login: "", password: "" }, ]; //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 = [{ website: ["bithub.win", "claimtrx.com", "feyorra.top", "spaceshooter.net"], loginSelectors: ["input[type=email]", "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)) { if (window.location.href.includesOneOf(value.website)) { 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 = ""; count = 0; var addressAssigned = false; for (let value of Object.values(websiteData)) { count = count + 1; if (window.location.href.includes("/" + value.regex)) { websiteDataValues.url = value.url; login = value.login; password = value.password; 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; addressAssigned = true; break; } } } function ptcClick() { const regexArray = [ /^visit for \d+ sec$/, /^go$/, /^view$/, /^view now$/, /^visit now$/, /^view ads/, /^view ad/, /^watch$/ ]; let ptcClicked = false; 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)) { 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); 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; } } setTimeout(function () { if (window.location.href.includes("/dashboard")) { window.location.href = "/ptc"; } if (!window.location.href.includes("/ptc") && !window.location.href.includes("/dashboard") && !window.location.href.includes("/login")) { window.location.href = "/login"; } checkLoginSelectors(); if (websiteDataValues.additionalFunctions) { websiteDataValues.additionalFunctions(); } //Check for all the default button selectors and click //This will only click the first selector found, so mention the selectors with parent element wherever required if (!movingToNextUrl && websiteDataValues.defaultButtonSelectors) { for (var i = 0; i < websiteDataValues.defaultButtonSelectors.length; i++) { if (document.querySelector(websiteDataValues.defaultButtonSelectors[i])) { document.querySelector(websiteDataValues.defaultButtonSelectors[i]).click(); break; } } } //Input the address and click the login button if (!movingToNextUrl && document.querySelector(websiteDataValues.inputTextSelector)) { document.querySelector(websiteDataValues.inputTextSelector).value = websiteDataValues.address; setTimeout(function () { if (websiteDataValues.inputTextSelectorButton && document.querySelector(websiteDataValues.inputTextSelectorButton)) { document.querySelector(websiteDataValues.inputTextSelectorButton).click(); } }, 5000); } //Click the form button after solving captcha //Works for both recaptcha and hcaptcha var clicked = false; var captchaInterval = setInterval(function () { if (!stopSolvingCaptcha || !window.location.href.includes("login")) { try { if (!clicked && document.querySelector("#captcha-solve > div")?.style?.display == '') { 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 && window?.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); } } } } catch (e) { } } }, 5000); }, 5000); })();