FaucetPay Automation with Captcha Solving

Automates captcha solving, claim tasks, and sends rewards directly to your FaucetPay wallet.

  1. // ==UserScript==
  2. // @name FaucetPay Automation with Captcha Solving
  3. // @namespace Violentmonkey Scripts
  4. // @match *://*.example.com/*
  5. // @grant none
  6. // @version 1.0
  7. // @author Your Name
  8. // @run-at document-start
  9. // @description Automates captcha solving, claim tasks, and sends rewards directly to your FaucetPay wallet.
  10. // @require https://code.jquery.com/jquery-3.6.0.min.js
  11. // ==/UserScript==
  12.  
  13. (function () {
  14. 'use strict';
  15.  
  16. // ================================
  17. // FaucetPay Wallet Configuration
  18. // ================================
  19.  
  20. const FAUCETPAY_WALLET = {
  21. BTC: 'bc1qhflqvgn7543d9gu8fhsvxetnc2nn4nj9j8l57d', // Bitcoin
  22. DOGE: 'DSwknjsucHaXwLxFbGX78YKGssJMhFuiag', // Dogecoin
  23. LTC: 'MN7S2CzpbNZoLscBiAtUnQuvoWZuwjpggW', // Litecoin
  24. ETH: '0x69761A44B42B6dAd336e653d3bd12c265b41603E', // Ethereum
  25. DASH: 'XnNAUXRcJ79yRLpy2MjDNwAjTxCqGzQcNv', // Dash
  26. TRX: 'TBENFAimdPqAi3Dd2MMeN8JkK2VBq8zQ4D', // Tron
  27. SOL: '86y1pKBKH5wU18C7CqK436kaZj3JqZFD3dmLEEBhq8ex', // Solana
  28. };
  29.  
  30. const DEFAULT_CURRENCY = 'DOGE'; // Moneda predeterminada
  31.  
  32. // ================================
  33. // Helper Functions
  34. // ================================
  35.  
  36. const waitForElement = (selector, callback) => {
  37. const observer = new MutationObserver(() => {
  38. const element = document.querySelector(selector);
  39. if (element) {
  40. observer.disconnect();
  41. callback(element);
  42. }
  43. });
  44. observer.observe(document.body, { childList: true, subtree: true });
  45. };
  46.  
  47. const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
  48.  
  49. const redirect = (url, customRedirect = false) => {
  50. location.href = customRedirect ? url : `https://rotator.nurul-huda.sch.id/?BypassResults=${url}`;
  51. };
  52.  
  53. const blockEvents = (events) => {
  54. events.forEach((event) => {
  55. document.addEventListener(event, (e) => e.stopPropagation(), true);
  56. });
  57. };
  58.  
  59. const handleCaptcha = (captchaType, selector, time) => {
  60. const captchaSelectors = {
  61. 'g-recaptcha': () => window.grecaptcha?.getResponse()?.length !== 0,
  62. 'h-captcha': () => window.hcaptcha?.getResponse()?.length !== 0,
  63. 'cf-turnstile': () => window.turnstile?.getResponse()?.length !== 0,
  64. };
  65. if (captchaSelectors[captchaType]?.()) {
  66. submitForm(selector, time);
  67. }
  68. };
  69.  
  70. const submitForm = (selector, time) => {
  71. setTimeout(() => {
  72. const form = typeof selector === 'string' ? document.querySelector(selector)?.closest('form') : selector;
  73. form?.requestSubmit();
  74. }, time * 1000);
  75. };
  76.  
  77. // ================================
  78. // Core Logic
  79. // ================================
  80.  
  81. const initializeScript = () => {
  82. // Block sensitive events
  83. blockEvents([
  84. 'contextmenu',
  85. 'visibilitychange',
  86. 'cut',
  87. 'paste',
  88. 'blur',
  89. 'mouseleave',
  90. 'keyup',
  91. 'drag',
  92. 'dragstart',
  93. 'hasFocus',
  94. 'focus',
  95. 'select',
  96. 'selectstart',
  97. 'webkitvisibilitychange',
  98. 'mozvisibilitychange',
  99. ]);
  100.  
  101. // Handle specific sites
  102. handleBlog24();
  103. handleFreeOseoCheck();
  104. handleDiudemy();
  105. };
  106.  
  107. const handleBlog24 = () => {
  108. if (!location.host.includes('blog24.me')) return;
  109.  
  110. // Custom messages
  111. $('h2:nth-of-type(1)').text('On this page, BYPASS Script Allowed 100%');
  112. $('h2:nth-of-type(2)').text('In order for the link to function smoothly, You Must TURN ON the Bypass Script.');
  113.  
  114. // Wait for captcha and submit
  115. waitForElement('.h-captcha', (captcha) => {
  116. handleCaptcha('h-captcha', '#overlay', 1);
  117. });
  118.  
  119. // Wait for countdown and click
  120. waitForElement("div[id^='count']", (countdown) => {
  121. if (countdown.innerHTML === '0') {
  122. waitForElement('input:nth-of-type(3)', (button) => button.click());
  123. }
  124. });
  125.  
  126. // Insert FaucetPay wallet address
  127. waitForElement('#wallet-address-input', (input) => {
  128. input.value = FAUCETPAY_WALLET[DEFAULT_CURRENCY];
  129. console.log(`Dirección de FaucetPay (${DEFAULT_CURRENCY}) ingresada.`);
  130. });
  131. };
  132.  
  133. const handleFreeOseoCheck = () => {
  134. if (!/(freeoseocheck|greenenez|wiki-topia).com|(coinsvalue|cookinguide|cryptowidgets|webfreetools|carstopia|makeupguide|carsmania).net|insurancegold.in|coinscap.info/.test(location.host)) return;
  135.  
  136. // Remove unnecessary elements
  137. document.querySelectorAll('.row.text-center').forEach((elem) => elem.remove());
  138.  
  139. // Wait for captcha and submit
  140. waitForElement('#countdown', () => {
  141. handleCaptcha('h-captcha', '#countdown', 29);
  142. });
  143.  
  144. // Insert FaucetPay wallet address
  145. waitForElement('#wallet-address-input', (input) => {
  146. input.value = FAUCETPAY_WALLET[DEFAULT_CURRENCY];
  147. console.log(`Dirección de FaucetPay (${DEFAULT_CURRENCY}) ingresada.`);
  148. });
  149. };
  150.  
  151. const handleDiudemy = () => {
  152. if (!location.host.includes('diudemy.com')) return;
  153.  
  154. // Wait for claim button
  155. waitForElement('#link-button', (button) => {
  156. console.log('Haciendo clic en el botón de Diudemy...');
  157. button.click();
  158. });
  159.  
  160. // Insert FaucetPay wallet address
  161. waitForElement('#wallet-address-input', (input) => {
  162. input.value = FAUCETPAY_WALLET[DEFAULT_CURRENCY];
  163. console.log(`Dirección de FaucetPay (${DEFAULT_CURRENCY}) ingresada en Diudemy.`);
  164. });
  165. };
  166.  
  167. // ================================
  168. // Initialization
  169. // ================================
  170.  
  171. if (['interactive', 'complete'].includes(document.readyState)) {
  172. initializeScript();
  173. } else {
  174. document.addEventListener('DOMContentLoaded', initializeScript);
  175. }
  176. })();