// ==UserScript== // @name FreeCryptoRotator-2 // @namespace FreeCryptoRotator-2 // @version 2.2 // @description Script to claim faucets // @author sacko // @match https://faucetbeast.com/* // @match https://get-bitcoin.net/* // @match https://claimbits.net/* // @match https://getdoge.io/* // @match https://cryptowin.io/* // @match https://www.cryptowin.io/* // @match https://earnbitmoon.club/* // @match https://www.minijobwork.com/* // @match https://lunarcrush.com/* // @match https://betfury.io/* // @connect claimbits.net // @connect get-bitcoin.net // @connect cryptowin.io // @connect getdoge.io // @connect faucetbeast.com // @connect earnbitmoon.club // @connect www.minijobwork.com // @connect lunarcrush.com // @connect betfury.io // @grant GM_xmlhttpRequest // @downloadURL none // ==/UserScript== (function() { 'use strict'; //List of the faucet websites //Comment the lines of url if you don't use them var websiteData = [ {url : "https://getdoge.io/faucet.html"}, {url : "https://get-bitcoin.net/faucet.html"}, {url : "https://cryptowin.io/faucet"}, {url : "https://claimbits.net/faucet.html"}, {url : "https://faucetbeast.com/faucet/free-ethereum", regex: "free-ethereum"}, {url : "https://faucetbeast.com/faucet/free-dogecoin", regex: "free-dogecoin"}, {url : "https://earnbitmoon.club/"}, {url : "https://www.minijobwork.com/earn_free_usd"}, {url : "https://betfury.io/boxes/all"}, {url : "https://lunarcrush.com/"}, ]; //Message selectors are for success or failure to move on to the next website //Add only domain name in website as mentioned below. Follow the same pattern. //Use arrays wherever it is required var websiteMap = [ {website : ["get-bitcoin.net","getdoge.io"], defaultButtonSelectors: ["#claimFaucet > a"], toggleCaptchaSelector:[".modal-dialog .form-control"], toggleCaptchaSelectorIndex: 1, captchaButtonSubmitSelector: ".btn-rounded.btn-sm.w-30.mb-0", allMessageSelectors: [".alert.alert-success",".alert.alert-danger", "#main-container h1"], messagesToCheckBeforeMovingToNextUrl: ["can claim again","you won", "Sucuri Website Firewall"], additionalFunctions: getBitcoinDoge}, {website : ["claimbits.net","earnbitmoon.club"], defaultButtonSelectors: ["#claimFaucet > button"], toggleCaptchaSelector:["#toggleCaptcha"], toggleCaptchaSelectorIndex: 1, captchaButtonSubmitSelector: "#rollFaucet > button", allMessageSelectors: [".alert.alert-success",".alert.alert-danger"], messagesToCheckBeforeMovingToNextUrl: ["can claim again","you won"], timeoutbeforeMovingToNextUrl: 60000}, {website : "cryptowin.io", defaultButtonSelectors: [".btn.btn-block.btn-click.btn-lg"], captchaButtonSubmitSelector: ".btn.btn-block.btn-success.btn-lg", allMessageSelectors: [".alert.alert-success",".alert.alert-danger","script",".text-center"], messagesToCheckBeforeMovingToNextUrl: ["claim again in","you won","You reached the maximum"], additionalFunctions: cryptowin}, {website: "faucetbeast.com", defaultButtonSelectors: [".btn-get-started.btn-block.mt-0"], captchaButtonSubmitSelector: ".btn-get-started.mt-0", allMessageSelectors: [".alert.alert-success",".alert.alert-danger",".alert.alert-info"], messagesToCheckBeforeMovingToNextUrl: ["was sent to your","insufficient","claim again"]}, {website: "minex.world", defaultButtonSelectors: ["#get-bonus"], allMessageSelectors: ["#get-bonus"], messagesToCheckBeforeMovingToNextUrl: [":"], timeoutbeforeMovingToNextUrl: 20000}, {website: "minijobwork.com", defaultButtonSelectors: [".btn.btn-info.reward"], captchaButtonSubmitSelector: ".btn.btn-success.btn-sm", allMessageSelectors: [".btn.btn-danger"], messagesToCheckBeforeMovingToNextUrl: [], additionalFunctions : minijobwork, timeoutbeforeMovingToNextUrl: 60000}, {website : ["betfury.io"], captchaButtonSubmitSelector: ["button.button.button_md.button_red.fullwidth"], allMessageSelectors: [".alert.alert-success",".alert.alert-danger",".alert.alert-info", "body", "#timer"], messagesToCheckBeforeMovingToNextUrl: ["There might be Server's Fault", "Next Roll Waiting Time"], additionalFunctions : betfury, timeoutbeforeMovingToNextUrl: 180000}, ]; //HtmlEvents dispatcher 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, index){ if( document.querySelector(selector)){ document.querySelector(selector).selectedIndex = index; var targetNode = document.querySelector(selector); if (targetNode) { setTimeout(function() { triggerEvent(targetNode, 'change'); }, 5000); } } } //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 websiteDataValues = {}; var clicked = false; //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.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.toggleCaptchaSelector = value.toggleCaptchaSelector; websiteDataValues.toggleCaptchaSelectorIndex = value.toggleCaptchaSelectorIndex; websiteDataValues.timeoutbeforeMovingToNextUrl = value.timeoutbeforeMovingToNextUrl; websiteDataValues.additionalFunctions = value.additionalFunctions; break; } } //Identify which coin to input, based on the url input //If the URL does not contain the coin, then use the default from the domain name var count = 0; var addressAssigned = false; for (let value of Object.values(websiteData)) { count = count + 1; if(window.location.href.includes("/" + value.regex)){ 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)){ break; } } } //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){ count = 0; websiteDataValues.nextUrl = websiteData[count].url; }else{ websiteDataValues.nextUrl = websiteData[count].url; } //Ping Test to check if a website is up before proceeding to next url pingTest(websiteDataValues.nextUrl); } var isNextUrlReachable = false; //Get the next Url from the website function pingTest(websiteUrl) { console.log(websiteUrl); GM_xmlhttpRequest({ method: "GET", url: websiteUrl, headers: { "Content-Type": "application/x-www-form-urlencoded" }, timeout: 5000, onload: function(response) { //Website is reachable isNextUrlReachable = true; }, onerror: function(e) { count=count+1; getNextUrl(); }, ontimeout: function() { count=count+1; getNextUrl(); }, }); } async function delay(ms) { return new Promise(resolve => setTimeout(resolve, ms)) } var movingToNextUrl = false; async function goToNextUrl() { console.log("Going to next Url"); if(!movingToNextUrl){ movingToNextUrl = true; getNextUrl(); while (!isNextUrlReachable) { await delay(3000); } window.location.href = websiteDataValues.nextUrl; } } async function goToWithdrawPage() { if(!movingToNextUrl){ movingToNextUrl = true; window.location.href = websiteDataValues.withdrawPageUrl; } } //Default Setting: After 120 seconds go to next Url var delayBeforeMovingToNextUrl = 120000; if(websiteDataValues.timeoutbeforeMovingToNextUrl){ delayBeforeMovingToNextUrl = websiteDataValues.timeoutbeforeMovingToNextUrl; } setTimeout(function(){ goToNextUrl(); },delayBeforeMovingToNextUrl); //Returns true if message selectors are present function messageSelectorsPresent(){ if(websiteDataValues.allMessageSelectors){ for(var j=0;j 127){ if(hashMap.has(rgb)){ hashMap.set(rgb, hashMap.get(rgb)+1) if(maxCount < hashMap.get(rgb)){ maxCount = hashMap.get(rgb); maxRGB = [data[i],data[i+1],data[i+2]]; } } else{ hashMap.set(rgb, 1) } } } return maxRGB; } function getBitcoinDoge(){ try{ var j =0; var leastDifference = 10000; if(document.querySelector("div.modal-body img") && document.querySelectorAll("button[class='btn btn-lg']").length > 3){ let image = document.querySelector("div.modal-body img"); let c = document.createElement("canvas"); c.width = image.width; c.height = image.height; var ctx = c.getContext("2d"); ctx.drawImage(image, 0, 0); var imageData = ctx.getImageData(0, 0, c.width, c.height); var data = imageData.data; var questionRGB = getRGBFromData(data); //compare with the answers for(let i=0;i< document.querySelectorAll("button[class='btn btn-lg']").length;i++){ let canva = document.createElement("canvas"); canva.width = image.width; canva.height = image.height; let canvatx = canva.getContext("2d"); canvatx.fillStyle = document.querySelectorAll("button[class='btn btn-lg']")[i].style.backgroundColor; canvatx.fillRect(0, 0,canva.width,canva.height); let imageData = canvatx.getImageData(0, 0,canva.width,canva.height); let rgb = getRGBFromData(imageData.data); if(Math.abs(questionRGB[0]-rgb[0]) + Math.abs(questionRGB[1]-rgb[1]) + Math.abs(questionRGB[2]-rgb[2]) < leastDifference){ leastDifference = Math.abs(questionRGB[0]-rgb[0]) + Math.abs(questionRGB[1]-rgb[1]) + Math.abs(questionRGB[2]-rgb[2]); j = i; } if(Math.abs(questionRGB[0]-rgb[0])<= 30 && Math.abs(questionRGB[1]-rgb[1]) <= 30 && Math.abs(questionRGB[2]-rgb[2]) <= 30){ break; } } console.log("Closest Matching Colour"); console.log(document.querySelectorAll("button[class='btn btn-lg']")[j].style.backgroundColor); document.querySelectorAll("button[class='btn btn-lg']")[j].click(); setTimeout(function(){ if(document.querySelector("#NXReportButton")){ document.querySelector("#NXReportButton").click(); } setTimeout(function(){ for(var hc=0; hc < document.querySelectorAll("iframe").length; hc++){ if(document.querySelectorAll("iframe")[hc] && document.querySelectorAll("iframe")[hc].hasAttribute("data-hcaptcha-response")){ return; } } if(document.querySelector(".btn-rounded.btn-sm.w-30.mb-0")){ document.querySelector(".btn-rounded.btn-sm.w-30.mb-0").click(); } setTimeout(function(){ if(messageSelectorsPresent()){ goToNextUrl(); } },5000); },5000); },5000); } }catch(e){ //console.log(e); } } function cryptowin(){ if(document.querySelector("#dropdownList")){ document.querySelector("#dropdownList").click(); } if(document.querySelector("#claim div.modal-body > div.ad_box center li > a") && document.querySelector("#claim div.modal-body > div.ad_box center li > a").innerText == "hCAPTCHA"){ document.querySelector("#claim div.modal-body > div.ad_box center li > a").click() } } setTimeout(function(){ if( websiteDataValues.additionalFunctions){ websiteDataValues.additionalFunctions(); } if(websiteDataValues.withdrawEnabled){ if(websiteDataValues.balanceSelector && document.querySelector(websiteDataValues.balanceSelector)){ var currentBalance = document.querySelector(websiteDataValues.balanceSelector).innerText; if(currentBalance > websiteDataValues.withdrawMinAmount && !window.location.href.includes(websiteDataValues.withdrawPageUrl)) { goToWithdrawPage(); } }else{ if(successMessageSelectorsPresent()){ goToWithdrawPage(); } } } //Look for all the default messages or errors before proceeding to next url //For other languages difference in the length of the strings can be compared or visibility of the style element if(!movingToNextUrl && messageSelectorsPresent()){ goToNextUrl(); } //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 0){ document.querySelector(websiteDataValues.captchaButtonSubmitSelector).click(); clicked = true; clearInterval(captchaInterval); setTimeout(function(){ if(messageSelectorsPresent()){ goToNextUrl(); } },5000); } }catch(e){ } for(var hc=0; hc < document.querySelectorAll("iframe").length; hc++){ if(! clicked && document.querySelectorAll("iframe")[hc] && document.querySelectorAll("iframe")[hc].hasAttribute("data-hcaptcha-response") && document.querySelectorAll("iframe")[hc].getAttribute("data-hcaptcha-response").length > 0) { document.querySelector(websiteDataValues.captchaButtonSubmitSelector).click(); clicked = true; clearInterval(captchaInterval); setTimeout(function(){ if(messageSelectorsPresent()){ goToNextUrl(); } },5000); } } },5000); },7000); })();