[Premium] Faucet Monitor with Faucetpay ReCaptcha/Antibot Rotator

Elevate your Faucet claiming experience with advanced automation, seamlessly handling form filling, button clicks, and ReCaptcha/Antibot challenges. Boost your efficiency and maximize earnings.

目前为 2024-01-30 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name [Premium] Faucet Monitor with Faucetpay ReCaptcha/Antibot Rotator
  3. // @namespace https://greasyfork.org/users/1162863
  4. // @version 2.6
  5. // @description Elevate your Faucet claiming experience with advanced automation, seamlessly handling form filling, button clicks, and ReCaptcha/Antibot challenges. Boost your efficiency and maximize earnings.
  6. // @author Andrewblood
  7. // @match https://*.coinfinity.top/*
  8. // @match https://*.sollcrypto.com/*
  9. // @match https://*.cryptoclaps.com/*
  10. // @match https://*.baltoniearn.com/claim/tron/*
  11. // @match https://*.vptron.online/TRX/*
  12. // @match https://*.claimcoins.site/reward/*
  13. // @match https://*.bnbminers.site/earns/*
  14. // @match https://*.ltcmines.site/earns/*
  15. // @match https://*.tronxminer.com/rewards/*
  16. // @match https://*.etcoin.site/earn/*
  17. // @match https://*.autofaucet.dutchycorp.space/*
  18. // @match https://*.freebitco.in/*
  19. // @icon https://www.google.com/s2/favicons?sz=64&domain=faucetpay.io
  20. // @grant GM_setValue
  21. // @grant GM_getValue
  22. // @grant GM_deleteValue
  23. // @grant GM_listValues
  24. // @grant window.close
  25. // @antifeature referral-link Referral-Link is in this Script integrated and in the description. (No win decrease for you, it's a thank you to me for the share)
  26. // @antifeature ads Advertisment Button with sites from friends.
  27. // @license Copyright Andrewblood
  28. // ==/UserScript==
  29. /*
  30. Experience the next level of Faucet claiming with unparalleled features:
  31.  
  32. - User Interface: You can use coinfinity.top for the interface for managing websites, installing requirements, saving Faucetpay email address, and handling stored URLs
  33. - Requirements Integration: Provides extension and script recommendations with install buttons for enhanced functionality.
  34. - ReCaptcha/Antibot Handling: Intelligently tackles security challenges, ensuring a smooth claiming process.
  35. - Advanced Automation: Seamlessly fills forms and clicks buttons on Faucetpay Faucet sites, reducing manual effort.
  36. - Efficient Navigation: Automatically moves through supported Faucet URLs, preventing revisits site until next day if it is empty or dayli limit reached for strategic claiming.
  37. - Error Handling: Reloads pages, ensuring up-to-date claiming and avoiding downtime.
  38.  
  39. Unstable ReCaptcha sites that can add advnced users to the var urls list:
  40.  
  41. "https://cryptoclaps.com/earn/dogecoin/",
  42. "https://cryptoclaps.com/earn/tron/",
  43. "https://cryptoclaps.com/earn/litecoin/",
  44. "https://cryptoclaps.com/earn/binance/",
  45. "https://cryptoclaps.com/earn/solana/",
  46. "https://cryptoclaps.com/earn/ethereum/",
  47. "https://cryptoclaps.com/earn/bch/",
  48. "https://cryptoclaps.com/earn/xrp/",
  49. "https://cryptoclaps.com/earn/dash/",
  50. "https://cryptoclaps.com/earn/polygon/",
  51. "https://cryptoclaps.com/earn/usdt/",
  52. "https://cryptoclaps.com/earn/zcash/",
  53. "https://etcoin.site/earn/tron/",
  54. "https://etcoin.site/earn/doge/",
  55. "https://etcoin.site/earn/litecoin/",
  56. "https://etcoin.site/earn/binance/",
  57. "https://etcoin.site/earn/ripple/",
  58. "https://etcoin.site/earn/ethereum/",
  59. "https://etcoin.site/earn/bitcoin/",
  60. "https://sollcrypto.com/home/page/bitcoin/",
  61. "https://sollcrypto.com/home/page/doge/",
  62. "https://sollcrypto.com/home/page/tron/",
  63. "https://sollcrypto.com/home/page/digibyte/",
  64. "https://sollcrypto.com/home/page/litecoin/",
  65. "https://sollcrypto.com/home/page/binance/",
  66. "https://sollcrypto.com/home/page/solana/",
  67. "https://sollcrypto.com/home/page/ethereum/",
  68. "https://sollcrypto.com/home/page/bch/",
  69. "https://sollcrypto.com/home/page/xrp/",
  70. "https://sollcrypto.com/home/page/dash/",
  71. "https://sollcrypto.com/home/page/zcash/",
  72.  
  73. */
  74. (function() {
  75. 'use strict';
  76.  
  77. var urls = [
  78. "https://baltoniearn.com/claim/tron/",
  79. "https://vptron.online/TRX/",
  80. "https://claimcoins.site/reward/tron/",
  81. "https://claimcoins.site/reward/doge/",
  82. "https://claimcoins.site/reward/litecoin/",
  83. "https://claimcoins.site/reward/binance/",
  84. "https://claimcoins.site/reward/ripple/",
  85. "https://claimcoins.site/reward/bitcoin/",
  86. "https://bnbminers.site/earns/tron/",
  87. "https://bnbminers.site/earns/litecoin/",
  88. "https://bnbminers.site/earns/feyorra/",
  89. "https://bnbminers.site/earns/binance/",
  90. "https://bnbminers.site/earns/ripple/",
  91. "https://bnbminers.site/earns/ethereum/",
  92. "https://bnbminers.site/earns/bitcoin/",
  93. "https://ltcmines.site/earns/tron/",
  94. "https://ltcmines.site/earns/doge/",
  95. "https://ltcmines.site/earns/litecoin/",
  96. "https://ltcmines.site/earns/binance/",
  97. "https://ltcmines.site/earns/ripple/",
  98. "https://ltcmines.site/earns/ethereum/",
  99. "https://ltcmines.site/earns/bitcoin/",
  100. "https://tronxminer.com/rewards/tron/",
  101. "https://tronxminer.com/rewards/doge/",
  102. "https://tronxminer.com/rewards/feyorra/",
  103. "https://tronxminer.com/rewards/binance/",
  104. "https://tronxminer.com/rewards/ripple/",
  105. "https://tronxminer.com/rewards/bitcoin/",
  106. ];
  107.  
  108. // Function to click a button
  109. function clickButton(selector) {
  110. var button = document.querySelector(selector);
  111. if (button) {
  112. button.click();
  113. }
  114. }
  115.  
  116. // Function to check if the captcha is activated
  117. function isCaptchaChecked() {
  118. return grecaptcha && grecaptcha.getResponse().length !== 0;
  119. }
  120.  
  121. function visibleCheck(elm) {
  122. if (!elm.offsetHeight && !elm.offsetWidth) { return false; }
  123. if (getComputedStyle(elm).visibility === 'hidden') { return false; }
  124. return true;
  125. }
  126.  
  127. // Function to check if an element is visible
  128. function isElementVisible(selector) {
  129. var element = document.querySelector(selector);
  130. return element && element.offsetWidth > 0 && element.offsetHeight > 0;
  131. }
  132.  
  133. // Function to open a website
  134. function openWebsite(url) {
  135. window.open(url, '_blank');
  136. }
  137.  
  138. // Email overlay creation
  139. var overlay = document.createElement('div');
  140. overlay.id = 'emailInputOverlay';
  141. overlay.style.position = 'fixed';
  142. overlay.style.bottom = '10px';
  143. overlay.style.right = '10px';
  144. overlay.style.zIndex = '10000';
  145.  
  146. // Create a button for other requirements
  147. var otherRequirementsButton = document.createElement('button');
  148. otherRequirementsButton.id = 'otherRequirementsButton';
  149. otherRequirementsButton.style.padding = '5px';
  150. otherRequirementsButton.style.marginLeft = '5px';
  151. otherRequirementsButton.textContent = 'Requirements';
  152.  
  153. var isRequirementsOverlayOpen = false;
  154. var isStoredUrlsOverlayOpen = false;
  155.  
  156. // Event listener for otherRequirementsButton
  157. otherRequirementsButton.addEventListener('click', function() {
  158. // Check if requirements overlay is already open
  159. if (isRequirementsOverlayOpen) {
  160. // Close the overlay
  161. closeOverlay(otherRequirementsOverlay);
  162. isRequirementsOverlayOpen = false;
  163. return;
  164. }
  165.  
  166. // Create an overlay for other requirements
  167. var otherRequirementsOverlay = document.createElement('div');
  168. otherRequirementsOverlay.style.position = 'fixed';
  169. otherRequirementsOverlay.style.top = '50%';
  170. otherRequirementsOverlay.style.left = '50%';
  171. otherRequirementsOverlay.style.transform = 'translate(-50%, -50%)';
  172. otherRequirementsOverlay.style.zIndex = '10001';
  173. otherRequirementsOverlay.style.backgroundColor = '#fff';
  174. otherRequirementsOverlay.style.border = '1px solid #ddd';
  175. otherRequirementsOverlay.style.padding = '20px';
  176. otherRequirementsOverlay.style.maxHeight = '80%';
  177. otherRequirementsOverlay.style.overflowY = 'auto';
  178.  
  179. // Add the heading
  180. var heading = document.createElement('h2');
  181. heading.textContent = 'Requirements';
  182. heading.style.textAlign = 'center';
  183. heading.style.marginBottom = '15px';
  184. otherRequirementsOverlay.appendChild(heading);
  185.  
  186. // Define the list of extensions and scripts with install buttons
  187. var requirementsList = [
  188. { name: '<b>ReCaptcha:</b> hektCaptcha: hCaptcha Solver', installUrl: 'https://github.com/Wikidepia/hektCaptcha-extension' },
  189. { name: '<b>Antibot Words:</b> AB Links Solver', installUrl: 'https://greasyfork.org/de/scripts/459453-ab-links-solver' }
  190. ];
  191.  
  192. // Create a list element
  193. var list = document.createElement('ul');
  194. list.style.listStyleType = 'none';
  195. list.style.padding = '0';
  196.  
  197. // Populate the list with requirements and install buttons
  198. requirementsList.forEach(function(requirement) {
  199. var listItem = document.createElement('li');
  200.  
  201. var installButton = document.createElement('button');
  202. installButton.textContent = 'Install';
  203. installButton.addEventListener('click', function() {
  204. // Open a new tab with the install URL
  205. window.open(requirement.installUrl, '_blank');
  206. });
  207.  
  208. // Create a span element for styling
  209. var styledText = document.createElement('span');
  210. styledText.innerHTML = requirement.name; // Use innerHTML to interpret HTML tags
  211.  
  212. // Append the span and install button to the list item
  213. listItem.appendChild(styledText);
  214. listItem.appendChild(installButton);
  215. list.appendChild(listItem);
  216. });
  217.  
  218. // Create a close button for the overlay
  219. var closeRequirementsButton = document.createElement('button');
  220. closeRequirementsButton.textContent = 'Close';
  221. closeRequirementsButton.style.padding = '8px';
  222. closeRequirementsButton.style.marginTop = '10px';
  223. closeRequirementsButton.addEventListener('click', function() {
  224. // Close the overlay when the close button is clicked
  225. document.body.removeChild(otherRequirementsOverlay);
  226. });
  227.  
  228. // Function to save Faucetpay email
  229. function saveFaucetpayEmail() {
  230. // Save entered email address
  231. var newEmail = emailInput.value;
  232. GM_setValue('storedEmail', newEmail);
  233.  
  234. // Success notification (can be customized)
  235. alert('Faucetpay email address saved successfully!');
  236. }
  237.  
  238. // Add input field and label for Faucetpay email to the requirements overlay
  239. var emailInputLabel = document.createElement('label');
  240. emailInputLabel.textContent = 'Enter Faucetpay Email:';
  241. emailInputLabel.style.display = 'block';
  242. emailInputLabel.style.marginTop = '10px';
  243.  
  244. var emailInput = document.createElement('input');
  245. emailInput.type = 'text';
  246. emailInput.id = 'emailInput';
  247. emailInput.placeholder = 'Faucetpay Email';
  248. emailInput.style.padding = '5px';
  249. emailInput.style.width = '100%';
  250.  
  251. // Abrufen und Einsetzen des gespeicherten Werts
  252. var storedEmail = GM_getValue('storedEmail', '');
  253. emailInput.value = storedEmail;
  254.  
  255. // Add "Save Faucetpay email" button to the requirements overlay
  256. var saveFaucetpayEmailButton = document.createElement('button');
  257. saveFaucetpayEmailButton.id = 'saveFaucetpayEmailButton';
  258. saveFaucetpayEmailButton.style.padding = '5px';
  259. saveFaucetpayEmailButton.style.marginTop = '5px';
  260. saveFaucetpayEmailButton.style.width = '100%';
  261. saveFaucetpayEmailButton.textContent = 'Save Faucetpay Email';
  262.  
  263. // Add event listener for saveFaucetpayEmailButton
  264. saveFaucetpayEmailButton.addEventListener('click', saveFaucetpayEmail);
  265.  
  266.  
  267. // Append the list and close button to the overlay
  268. otherRequirementsOverlay.appendChild(list);
  269. // Append the input field, label, and "Save Faucetpay email" button to the requirements overlay
  270. otherRequirementsOverlay.appendChild(emailInputLabel);
  271. otherRequirementsOverlay.appendChild(emailInput);
  272. otherRequirementsOverlay.appendChild(saveFaucetpayEmailButton);
  273. otherRequirementsOverlay.appendChild(closeRequirementsButton);
  274. var closeButton = createCloseButton(otherRequirementsOverlay);
  275. otherRequirementsOverlay.appendChild(closeButton);
  276.  
  277. // Set flag to indicate that requirements overlay is open
  278. isRequirementsOverlayOpen = true;
  279.  
  280. // Add the overlay to the body
  281. document.body.appendChild(otherRequirementsOverlay);
  282.  
  283. // Add an event listener to reset the flag when the overlay is closed
  284. otherRequirementsOverlay.addEventListener('click', function() {
  285. isRequirementsOverlayOpen = false;
  286. });
  287. });
  288.  
  289. // Create a button to show stored URLs
  290. var showStoredUrlsButton = document.createElement('button');
  291. showStoredUrlsButton.id = 'showStoredUrlsButton';
  292. showStoredUrlsButton.style.padding = '5px';
  293. showStoredUrlsButton.style.marginLeft = '5px';
  294. showStoredUrlsButton.textContent = 'Faucetpay Rotator Sites';
  295.  
  296. showStoredUrlsButton.addEventListener('click', function() {
  297. // Check if stored URLs overlay is already open
  298. if (isStoredUrlsOverlayOpen) {
  299. // Close the overlay
  300. closeOverlay(overlayTable);
  301. isStoredUrlsOverlayOpen = false;
  302. return;
  303. }
  304. // Display stored pages in an overlay
  305. var storedUrls = GM_getValue('storedUrls', []);
  306.  
  307. // Combine stored URLs with the original URLs
  308. var allUrls = urls.map(function(url) {
  309. var storedUrlEntry = storedUrls.find(function(storedUrl) {
  310. return storedUrl.url === url;
  311. });
  312.  
  313. return {
  314. url: url,
  315. timestamp: storedUrlEntry ? storedUrlEntry.timestamp : null
  316. };
  317. });
  318.  
  319. // Create an overlay for the table
  320. var overlayTable = document.createElement('div');
  321. overlayTable.style.position = 'fixed';
  322. overlayTable.style.top = '50%';
  323. overlayTable.style.left = '50%';
  324. overlayTable.style.transform = 'translate(-50%, -50%)';
  325. overlayTable.style.zIndex = '10001';
  326. overlayTable.style.backgroundColor = '#fff';
  327. overlayTable.style.border = '1px solid #ddd';
  328. overlayTable.style.padding = '20px';
  329. overlayTable.style.maxHeight = '80%';
  330. overlayTable.style.overflowY = 'auto';
  331.  
  332. // Add the heading for Faucetpay Rotator Sites
  333. var heading = document.createElement('h2');
  334. heading.textContent = 'Faucetpay Rotator Sites';
  335. heading.style.textAlign = 'center';
  336. heading.style.marginBottom = '15px';
  337. overlayTable.appendChild(heading);
  338.  
  339.  
  340. // Create a close button for the overlay
  341. var closeButton = document.createElement('button');
  342. closeButton.textContent = 'Close';
  343. closeButton.style.padding = '8px';
  344. closeButton.style.marginTop = '10px';
  345. closeButton.addEventListener('click', function() {
  346. // Close the overlay when the close button is clicked
  347. document.body.removeChild(overlayTable);
  348. });
  349.  
  350. // Create a button to delete all stored URLs
  351. var deleteAllButton = document.createElement('button');
  352. deleteAllButton.id = 'deleteAllButton';
  353. deleteAllButton.style.padding = '5px';
  354. deleteAllButton.style.marginLeft = '5px';
  355. deleteAllButton.style.float = 'right'; // Align the button to the right
  356. deleteAllButton.textContent = 'Set All Active';
  357.  
  358. // Add an event listener for the deleteAllButton
  359. deleteAllButton.addEventListener('click', function() {
  360. // Clear all stored URLs
  361. GM_deleteValue('storedUrls');
  362.  
  363. // Refresh the table
  364. showStoredUrlsButton.click();
  365. });
  366.  
  367. // Create a table element
  368. var table = document.createElement('table');
  369. table.style.borderCollapse = 'collapse';
  370. table.style.width = '100%';
  371.  
  372. // Create table headers
  373. var headers = ['Connect', 'URL', 'Status', 'Delete'];
  374. var headerRow = table.insertRow();
  375. for (var i = 0; i < headers.length; i++) {
  376. var headerCell = headerRow.insertCell(i);
  377. headerCell.style.border = '1px solid #ddd';
  378. headerCell.style.padding = '8px';
  379. headerCell.style.textAlign = 'left';
  380. headerCell.textContent = headers[i];
  381.  
  382. // Add click event for sorting
  383. if (i === 1 || i === 2) {
  384. headerCell.addEventListener('click', function() {
  385. sortTable(table, this.cellIndex);
  386. });
  387. }
  388. }
  389.  
  390. // Populate table with all URLs, timestamps, and delete buttons
  391. for (var j = 0; j < allUrls.length; j++) {
  392. var urlEntry = allUrls[j];
  393. var row = table.insertRow();
  394.  
  395. // Add "Connect" button to each row
  396. var connectCell = row.insertCell(0);
  397. connectCell.style.border = '1px solid #ddd';
  398. connectCell.style.padding = '8px';
  399.  
  400. var connectButton = document.createElement('button');
  401. connectButton.textContent = 'Connect';
  402. connectButton.addEventListener('click', createConnectHandler(urlEntry.url)); // Attach a handler with the URL
  403. connectCell.appendChild(connectButton);
  404.  
  405. var urlCell = row.insertCell(1);
  406. urlCell.style.border = '1px solid #ddd';
  407. urlCell.style.padding = '8px';
  408. urlCell.textContent = urlEntry.url;
  409.  
  410. var statusCell = row.insertCell(2);
  411. statusCell.style.border = '1px solid #ddd';
  412. statusCell.style.padding = '8px';
  413. statusCell.style.color = getStatusColor(urlEntry);
  414. statusCell.textContent = getStatusText(urlEntry);
  415.  
  416. var deleteCell = row.insertCell(3);
  417. deleteCell.style.border = '1px solid #ddd';
  418. deleteCell.style.padding = '8px';
  419.  
  420. // Create delete button for each row
  421. var deleteButton = document.createElement('button');
  422. deleteButton.textContent = 'Set Active';
  423. deleteButton.addEventListener('click', createDeleteHandler(urlEntry));
  424.  
  425. deleteCell.appendChild(deleteButton);
  426. }
  427.  
  428. // Append the table and close button to the overlay
  429. overlayTable.appendChild(table);
  430. overlayTable.appendChild(closeButton);
  431. overlayTable.appendChild(deleteAllButton);
  432. var closeButtontop = createCloseButton(overlayTable);
  433. overlayTable.appendChild(closeButtontop);
  434.  
  435. // Set flag to indicate that stored URLs overlay is open
  436. isStoredUrlsOverlayOpen = true;
  437.  
  438. // Add the overlay to the body
  439. document.body.appendChild(overlayTable);
  440.  
  441. // Add an event listener to reset the flag when the overlay is closed
  442. overlayTable.addEventListener('click', function() {
  443. isStoredUrlsOverlayOpen = false;
  444. });
  445. });
  446.  
  447. // Function to close the overlay
  448. function closeOverlay(overlay) {
  449. // Close the overlay when the close button is clicked
  450. document.body.removeChild(overlay);
  451. }
  452.  
  453. // Funktion zum Erstellen des "X"-Buttons
  454. function createCloseButton(overlay) {
  455. var closeButton = document.createElement('button');
  456. closeButton.innerHTML = 'X';
  457. closeButton.style.position = 'absolute';
  458. closeButton.style.top = '5px';
  459. closeButton.style.right = '5px';
  460. closeButton.style.padding = '5px';
  461. closeButton.style.cursor = 'pointer';
  462. closeButton.addEventListener('click', function() {
  463. // Rufe die Funktion zum Schließen des Overlays auf
  464. closeOverlay(overlay);
  465. });
  466. return closeButton;
  467. }
  468.  
  469. // Function to get the status text based on the urlEntry
  470. function getStatusText(urlEntry) {
  471. var currentTime = Date.now();
  472.  
  473. if (urlEntry.timestamp) {
  474. var timestamp = Date.parse(urlEntry.timestamp.replace(/-/g, '/'));
  475. if (timestamp > currentTime) {
  476. // Not Active Until
  477. return 'Not Active Until ' + urlEntry.timestamp;
  478. } else {
  479. // Active
  480. return 'Active';
  481. }
  482. } else {
  483. return 'Active';
  484. }
  485. }
  486.  
  487. // Function to get the status color based on the urlEntry
  488. function getStatusColor(urlEntry) {
  489. var currentTime = Date.now();
  490.  
  491. if (urlEntry.timestamp) {
  492. var timestamp = Date.parse(urlEntry.timestamp.replace(/-/g, '/'));
  493. return (timestamp > currentTime) ? 'red' : 'green';
  494. } else {
  495. return 'green'; // Assuming 'Active' state when timestamp is not present
  496. }
  497. }
  498.  
  499. // Function to create a delete handler with a specific urlEntry
  500. function createDeleteHandler(urlEntry) {
  501. return function() {
  502. // Find the corresponding URL and delete it from stored pages
  503. var urlToDelete = urlEntry.url;
  504. var storedUrls = GM_getValue('storedUrls', []);
  505. storedUrls = storedUrls.filter(function(storedUrl) {
  506. return storedUrl.url !== urlToDelete;
  507. });
  508.  
  509. // Update stored pages
  510. GM_setValue('storedUrls', storedUrls);
  511.  
  512. // Refresh the table
  513. showStoredUrlsButton.click();
  514. };
  515. }
  516.  
  517. // Function to create a connect handler with a specific URL
  518. function createConnectHandler(url) {
  519. return function() {
  520. // Redirect to the selected URL
  521. window.open(url, '_blank');
  522. };
  523. }
  524.  
  525. // Function to sort the table by column index
  526. function sortTable(table, columnIndex) {
  527. var rows = Array.from(table.rows).slice(1); // Exclude header row
  528. var sortOrder = 1;
  529.  
  530. // Determine sorting order based on the current order of the column
  531. if (table.rows[0].cells[columnIndex].classList.contains('ascending')) {
  532. sortOrder = -1;
  533. }
  534.  
  535. // Remove sorting classes from all columns
  536. for (var i = 0; i < table.rows[0].cells.length; i++) {
  537. table.rows[0].cells[i].classList.remove('ascending', 'descending');
  538. }
  539.  
  540. // Sort the rows based on the content of the selected column
  541. rows.sort(function(a, b) {
  542. var textA = a.cells[columnIndex].textContent.trim().toUpperCase();
  543. var textB = b.cells[columnIndex].textContent.trim().toUpperCase();
  544.  
  545. if (textA < textB) {
  546. return -1 * sortOrder;
  547. } else if (textA > textB) {
  548. return 1 * sortOrder;
  549. } else {
  550. return 0;
  551. }
  552. });
  553.  
  554. // Clear and rebuild the table with the sorted rows
  555. while (table.rows.length > 1) {
  556. table.deleteRow(1);
  557. }
  558.  
  559. for (var j = 0; j < rows.length; j++) {
  560. table.appendChild(rows[j]);
  561. }
  562.  
  563. // Add sorting class to the header cell
  564. if (sortOrder === 1) {
  565. table.rows[0].cells[columnIndex].classList.add('ascending');
  566. } else {
  567. table.rows[0].cells[columnIndex].classList.add('descending');
  568. }
  569. }
  570. const websites = [
  571. { name: 'Freebitco.in', url: 'https://freebitco.in', active: GM_getValue('Freebitco.in', true) },
  572. { name: 'Dutchycorp', url: 'https://autofaucet.dutchycorp.space', active: GM_getValue('Dutchycorp', true) },
  573. // Add more websites
  574. ];
  575.  
  576. // Create the menu
  577. const menu = document.createElement('div');
  578. menu.style.position = 'fixed';
  579. menu.style.bottom = '50px';
  580. menu.style.left = '50%'; // Setze den linken Rand auf 50%
  581. menu.style.transform = 'translateX(-50%)'; // Zentriere das Menü
  582. menu.style.backgroundColor = '#fff';
  583. menu.style.padding = '10px';
  584. menu.style.border = '1px solid #ccc';
  585. menu.style.display = 'none';
  586. menu.style.zIndex = '9999';
  587.  
  588. // Create buttons for each website with activation status
  589. websites.forEach(website => {
  590. const button = document.createElement('button');
  591. button.textContent = website.name + (website.active ? ' (Activated)' : ' (Deactivated)');
  592. button.style.display = 'block';
  593. button.style.marginBottom = '5px';
  594. button.style.zIndex = '9999';
  595.  
  596. // Click event for left-click (opens the URL)
  597. button.addEventListener('click', (event) => {
  598. if (event.button === 0) {
  599. openWebsite(website.url);
  600. }
  601. });
  602.  
  603. // Context menu for right-click (activates/deactivates)
  604. button.addEventListener('contextmenu', (event) => {
  605. event.preventDefault();
  606. website.active = !website.active;
  607. GM_setValue(website.name, website.active);
  608. button.textContent = website.name + (website.active ? ' (Activated)' : ' (Deactivated)');
  609. });
  610.  
  611. menu.appendChild(button);
  612. });
  613.  
  614. // Create the main button
  615. const mainButton = document.createElement('button');
  616. mainButton.textContent = "Faucet Monitor";
  617. mainButton.style.position = 'fixed';
  618. mainButton.style.bottom = '10px';
  619. mainButton.style.left = '50%'; // Setze den linken Rand auf 50%
  620. mainButton.style.transform = 'translateX(-50%)'; // Zentriere den Button
  621. mainButton.style.padding = '10px';
  622. mainButton.style.zIndex = '9999';
  623.  
  624. // Show/hide the dropdown menu when the advertisement button is clicked
  625. mainButton.addEventListener('click', () => {
  626. if (menu.style.display === 'none') {
  627. menu.style.display = 'block';
  628. } else {
  629. menu.style.display = 'none';
  630. }
  631. });
  632.  
  633. // Close the menu when a link is clicked
  634. menu.addEventListener('click', (event) => {
  635. if (event.target.tagName === 'BUTTON') {
  636. menu.style.display = 'none';
  637. }
  638. });
  639.  
  640. // Create the advertisement button
  641. const advertisementButton = document.createElement('button');
  642. advertisementButton.textContent = 'Advertisement';
  643. advertisementButton.style.position = 'fixed';
  644. advertisementButton.style.bottom = '10px';
  645. advertisementButton.style.left = '10px';
  646. advertisementButton.style.padding = '7px'; // Kleinerer Padding-Wert für einen kleineren Button
  647. advertisementButton.style.fontSize = '14px'; // Kleinerer Schriftgröße für den kleineren Button
  648. advertisementButton.style.zIndex = '9999';
  649.  
  650. // Create the dropdown menu for the advertisement
  651. const advertisementDropdown = document.createElement('div');
  652. advertisementDropdown.style.position = 'absolute';
  653. advertisementDropdown.style.display = 'none';
  654. advertisementDropdown.style.bottom = '50px'; // Anpassung der Position des Dropdown-Menüs
  655. advertisementDropdown.style.left = '10px';
  656. advertisementDropdown.style.backgroundColor = '#fff';
  657. advertisementDropdown.style.border = '1px solid #ccc';
  658. advertisementDropdown.style.padding = '5px'; // Anpassung des Padding-Werts für das Dropdown-Menü
  659. advertisementDropdown.style.fontSize = '14px'; // Anpassung der Schriftgröße für das Dropdown-Menü
  660. advertisementDropdown.style.zIndex = '9999';
  661.  
  662. // Define the advertisement links
  663. const advertisementLinks = [
  664. { name: 'Advertisement 1', url: 'https://example.com/advertisement1' },
  665. { name: 'Advertisement 2', url: 'https://example.com/advertisement2' },
  666. // Add more advertisement links as needed
  667. ];
  668.  
  669. // Populate the dropdown menu with advertisement links
  670. advertisementLinks.forEach(advertisement => {
  671. const linkItem = document.createElement('div');
  672. linkItem.textContent = advertisement.name;
  673. linkItem.style.cursor = 'pointer';
  674. linkItem.addEventListener('click', () => {
  675. openWebsite(advertisement.url);
  676. advertisementDropdown.style.display = 'none'; // Hide the dropdown after clicking a link
  677. });
  678. advertisementDropdown.appendChild(linkItem);
  679. });
  680.  
  681. // Show/hide the dropdown menu when the advertisement button is clicked
  682. advertisementButton.addEventListener('click', () => {
  683. if (advertisementDropdown.style.display === 'none') {
  684. advertisementDropdown.style.display = 'block';
  685. } else {
  686. advertisementDropdown.style.display = 'none';
  687. }
  688. });
  689.  
  690. // About overlay content
  691. var aboutContent = `
  692. <h2>About Faucet Monitor with Faucetpay Rotator</h2>
  693. <p>This Faucet Monitor is a tool designed to help users manage and monitor various faucets and rotator sites efficiently.</p>
  694. <p>Developed by Andrewblood.</p>
  695. `;
  696.  
  697. // Create About button
  698. var aboutButton = document.createElement('button');
  699. aboutButton.textContent = 'About';
  700. aboutButton.style.padding = '5px';
  701. aboutButton.style.marginLeft = '5px';
  702.  
  703. // Event listener for About button
  704. aboutButton.addEventListener('click', function() {
  705. // Create overlay for About
  706. var aboutOverlay = document.createElement('div');
  707. aboutOverlay.style.position = 'fixed';
  708. aboutOverlay.style.top = '50%';
  709. aboutOverlay.style.left = '50%';
  710. aboutOverlay.style.transform = 'translate(-50%, -50%)';
  711. aboutOverlay.style.zIndex = '10001';
  712. aboutOverlay.style.backgroundColor = '#fff';
  713. aboutOverlay.style.border = '1px solid #ddd';
  714. aboutOverlay.style.padding = '20px';
  715. aboutOverlay.style.maxHeight = '80%';
  716. aboutOverlay.style.overflowY = 'auto';
  717.  
  718. // Add content to About overlay
  719. aboutOverlay.innerHTML = aboutContent;
  720.  
  721. // Create close button for About overlay
  722. var closeButton = createCloseButton(aboutOverlay);
  723. aboutOverlay.appendChild(closeButton);
  724.  
  725. // Add About overlay to the body
  726. document.body.appendChild(aboutOverlay);
  727. });
  728.  
  729.  
  730.  
  731.  
  732.  
  733. // Add elements to the overlay
  734. overlay.appendChild(showStoredUrlsButton);
  735. overlay.appendChild(otherRequirementsButton);
  736. // Add About button to overlay
  737. overlay.appendChild(aboutButton);
  738. // Add overlay to the body
  739. document.body.appendChild(overlay);
  740. // Add buttons to the document
  741. document.body.appendChild(menu);
  742. document.body.appendChild(mainButton);
  743. // Add the advertisement button and dropdown menu to the document
  744. document.body.appendChild(advertisementButton);
  745. document.body.appendChild(advertisementDropdown);
  746.  
  747.  
  748.  
  749. var currentURL = window.location.href;
  750. if (currentURL.includes("https://sollcrypto.com/home/page/") || currentURL.includes("https://cryptoclaps.com/earn/") || currentURL.includes("https://baltoniearn.com/claim/tron/") || currentURL.includes("https://vptron.online/TRX/") || currentURL.includes("https://claimcoins.site/reward/") || currentURL.includes("https://bnbminers.site/earns/") || currentURL.includes("https://ltcmines.site/earns/") || currentURL.includes("https://tronxminer.com/rewards/") || currentURL.includes("https://etcoin.site/earn/")) {
  751.  
  752. setTimeout(function () {
  753. location.reload();
  754. }, 330000);
  755.  
  756. var currentPageUrl = window.location.href;
  757.  
  758. var indexOfRParameter = currentPageUrl.indexOf("?r=");
  759. if (indexOfRParameter !== -1) {
  760. currentPageUrl = currentPageUrl.substring(0, indexOfRParameter);
  761. }
  762.  
  763. var storedUrls = GM_getValue('storedUrls', []) || [];
  764.  
  765. // Erster Selector: The faucet does not have sufficient funds for this transaction
  766. var selector1 = ".alert.alert-danger.fade.show";
  767. if (isElementVisible(selector1) && document.querySelector(selector1)?.innerText === ' The faucet does not have sufficient funds for this transaction.') {
  768. var reason1 = 'sufficient funds';
  769. var timestamp1 = new Date(new Date().getTime() + 24 * 60 * 60 * 1000).toISOString().slice(0, 19).replace('T', ' ');
  770. saveUrl(currentPageUrl, timestamp1, reason1);
  771. }
  772.  
  773. // Zweiter Selector: Your daily claim limit has been reached. Please come back in tomorrow.
  774. var selector2 = ".alert.alert-danger.fade.show";
  775. if (isElementVisible(selector2) && document.querySelector(selector2)?.innerText === ' Your daily claim limit has been reached. Please come back in tomorrow.') {
  776. var reason2 = 'daily claim limit';
  777. // Berechne die Zeit für den nächsten Tag um 01:00 Uhr
  778. var tomorrow = new Date();
  779. tomorrow.setDate(tomorrow.getDate() + 1);
  780. tomorrow.setHours(0, 0, 0, 0);
  781. var timestamp2 = tomorrow.toISOString().slice(0, 19).replace('T', ' ');
  782. saveUrl(currentPageUrl, timestamp2, reason2);
  783. }
  784.  
  785. function saveUrl(url, timestamp, reason) {
  786. var urlWithTimestamp = { url: url, timestamp: timestamp, reason: reason };
  787.  
  788. var existingUrlIndex = storedUrls.findIndex(function (storedUrl) {
  789. return storedUrl.url === url;
  790. });
  791.  
  792. if (existingUrlIndex !== -1) {
  793. storedUrls[existingUrlIndex].timestamp = timestamp;
  794. storedUrls[existingUrlIndex].reason = reason;
  795. } else {
  796. storedUrls.push(urlWithTimestamp);
  797. }
  798.  
  799. GM_setValue('storedUrls', storedUrls);
  800. }
  801.  
  802. // Check if the element with the text "satoshi" or specific error messages is visible
  803. if ((isElementVisible(".alert.alert-success.fade.show") &&
  804. document.querySelector(".alert.alert-success.fade.show").innerText.includes('satoshi')) ||
  805. (isElementVisible(".alert.alert-danger.fade.show") &&
  806. document.querySelector(".alert.alert-danger.fade.show").innerText === ' The faucet does not have sufficient funds for this transaction.') ||
  807. (isElementVisible(".alert.alert-danger.fade.show") &&
  808. document.querySelector(".alert.alert-danger.fade.show").innerText === ' Session invalid, try again') ||
  809. (isElementVisible(".alert.alert-danger.fade.show") &&
  810. document.querySelector(".alert.alert-danger.fade.show").innerText === ' Your daily claim limit has been reached. Please come back in tomorrow.')) {
  811. // Vorhandene URLs mit Timestamps
  812. var storedUrls = GM_getValue('storedUrls', []) || [];
  813. // Funktion zum Überprüfen und Verbinden mit der nächsten gültigen URL
  814. function checkAndConnectNextUrl() {
  815. // Aktuelle URL ohne den Referral-Code
  816. var currentUrl = window.location.href.includes('?r=') ? window.location.href.split('?r=')[0] : window.location.href;
  817.  
  818. console.log("Current URL:", currentUrl);
  819.  
  820. // Suche nach der Position der aktuellen URL in der Liste
  821. var currentIndex = urls.indexOf(currentUrl);
  822.  
  823. console.log("Current Index:", currentIndex);
  824.  
  825. var validUrlFound = false;
  826.  
  827. // Überprüfe die nächste URL in der Liste
  828. for (var i = currentIndex + 1; i < currentIndex + urls.length; i++) {
  829. var nextUrl = urls[i % urls.length]; // Modulo verwendet, um wieder von vorne zu beginnen
  830.  
  831. console.log("Checking next URL:", nextUrl);
  832.  
  833. // Überprüfe, ob die URL bereits in storedUrls vorhanden ist
  834. var storedUrlInfo = storedUrls.find(function (storedUrl) {
  835. return storedUrl.url === nextUrl;
  836. });
  837.  
  838. console.log("Stored URL Info:", storedUrlInfo);
  839.  
  840. // Wenn die URL nicht in storedUrls vorhanden ist oder das Datum in der Zukunft liegt
  841. if (!storedUrlInfo || new Date() > new Date(storedUrlInfo.timestamp)) {
  842. // Verbinde mit der gültigen URL
  843. console.log("Connecting to the next valid URL:", nextUrl);
  844.  
  845. // Führe hier deine Verbindungslogik durch
  846. window.location.href = nextUrl;
  847.  
  848. // Markiere, dass eine gültige URL gefunden wurde
  849. validUrlFound = true;
  850.  
  851. // Verlasse die Schleife, da eine gültige URL gefunden wurde
  852. break;
  853. }
  854. }
  855.  
  856. // Wenn keine gültige URL gefunden wurde, zeige einen Alert
  857. if (!validUrlFound) {
  858. alert("All sites are empty or daily limit reached. Please start the script tomorrow again. You can also change the Faucetpay E-Mail and set all a new time Active");
  859. // Schließe das Fenster nach 3 Sekunden (3000 Millisekunden)
  860. }
  861. }
  862.  
  863. // Beispielaufruf der Funktion
  864. checkAndConnectNextUrl();
  865. } else {
  866. // Element is not visible, so proceed with the actions
  867. // Check if the Referral Code is in the URL, if not, add it
  868. var currentURL = window.location.href;
  869. var referralCode = '?r=m.warchol@gmx.at';
  870.  
  871. if (!currentURL.includes(referralCode)) {
  872. currentURL += referralCode;
  873. window.location.href = currentURL; // Redirect with the updated URL
  874. } else {
  875. // Continue with actions as the Referral Code is already present
  876. // If the Faucetpay email field is found, fill it with the saved email address
  877. var faucetpayEmailInput = document.querySelector("#address");
  878. if (faucetpayEmailInput) {
  879. // Abrufen und Einsetzen des gespeicherten Werts
  880. var storedEmail = GM_getValue('storedEmail', '');
  881. faucetpayEmailInput.value = storedEmail;
  882.  
  883. var loginbutton = document.querySelectorAll('button[data-target="#captchaModal"]');
  884. loginbutton[0].click();
  885.  
  886. if (document.querySelector("#captchaModal").innerText.includes('AntiBot links')) {
  887. // Check if the pop-up/overlay appears and click the login button if conditions are met
  888. var intervalId = setInterval(function() {
  889. var antibotLinksValue = document.querySelector("#antibotlinks").value.length;
  890. var recaptchaResponseValue = document.querySelector("#g-recaptcha-response").value.length;
  891.  
  892. if (antibotLinksValue > 1 && recaptchaResponseValue > 1) {
  893. clearInterval(intervalId);
  894.  
  895. // Click the login button
  896. clickButton("#login");
  897. }
  898. }, 1000);
  899. } else {
  900. // Check if the pop-up/overlay appears and click the login button if conditions are met
  901. var intervalId2 = setInterval(function() {
  902. var recaptchaResponseValue = document.querySelector("#g-recaptcha-response").value.length;
  903.  
  904. if (recaptchaResponseValue > 1) {
  905. clearInterval(intervalId2);
  906.  
  907. // Click the login button
  908. clickButton("#login");
  909. }
  910. }, 1000);
  911. }
  912. }
  913.  
  914. }
  915. }
  916. }
  917.  
  918. // Dutchycorp Script
  919. websites.forEach(website => {
  920. if (website.active && window.location.href.includes(website.url)) {
  921.  
  922. if (window.location.href == "https://autofaucet.dutchycorp.space/signup.php") {
  923. if (window.location.href != "https://autofaucet.dutchycorp.space/signup.php?r=Andrewblood&s=Script") {
  924. window.location.replace("https://autofaucet.dutchycorp.space/signup.php?r=Andrewblood&s=Script");
  925. }
  926. }
  927.  
  928. if (window.location.href.indexOf('login') === -1 && window.location.href.indexOf('register') === -1) {
  929.  
  930. // Überprüfe, ob ein Wert im TamperMonkey-Speicher gespeichert ist
  931. var isRecaptchaEnabled = GM_getValue('recaptchaStatus');
  932.  
  933. // Wenn ein Wert im TamperMonkey-Speicher gespeichert ist
  934. if (isRecaptchaEnabled) {
  935. runScript();
  936. } else {
  937. // Überprüfe, ob wir uns bereits auf der Account-Seite befinden
  938. if (window.location.href !== 'https://autofaucet.dutchycorp.space/account.php') {
  939. // Navigiere zur Seite für die Einstellungen
  940. window.location.href = 'https://autofaucet.dutchycorp.space/account.php';
  941. } else {
  942. // Hier werden die Einstellungen vorgenommen und gespeichert
  943. document.querySelector("#methods > form > font > form:nth-child(16) > div > input").click();
  944. // Finde das Select-Element
  945. var selectElement = document.querySelector('select[name="captcha"]');
  946.  
  947. // Überprüfe, ob das Select-Element gefunden wurde
  948. if (selectElement) {
  949. // Iteriere über alle Optionen im Select-Element
  950. var options = selectElement.options;
  951. for (var i = 0; i < options.length; i++) {
  952. // Überprüfe den Wert der Option
  953. if (options[i].value === '3') { // Wert '3' entspricht Recaptcha
  954. // Wähle die entsprechende Option aus
  955. options[i].selected = true;
  956. // Triggere ein "change"-Event, falls nötig
  957. var event = new Event('change');
  958. selectElement.dispatchEvent(event);
  959. break; // Beende die Schleife, wenn die Option gefunden wurde
  960. }
  961. }
  962. }
  963. // Aktualisiere das Captcha-Formular, um die Änderung zu speichern
  964. var updateButton = document.querySelector('button[name="change-captcha"]');
  965. updateButton.click();
  966.  
  967. // Speichere den Wert im TamperMonkey-Speicher
  968. GM_setValue('recaptchaStatus', 'enabled');
  969. }
  970. }
  971.  
  972. // Funktion zum Ausführen des Skripts
  973. function runScript() {
  974. setTimeout(function(){
  975. location.reload();
  976. }, 180000);
  977.  
  978. if (window.location.href.includes("https://autofaucet.dutchycorp.space/account.php")) {
  979. window.location.replace("https://autofaucet.dutchycorp.space/dashboard.php");
  980. }
  981.  
  982. if (window.location.href == "https://autofaucet.dutchycorp.space/dashboard.php") {
  983. window.location.replace("https://autofaucet.dutchycorp.space/roll.php");
  984. }
  985.  
  986. if (window.location.href.includes("https://autofaucet.dutchycorp.space/roll.php")) {
  987. if (!document.querySelector("#timer")) {
  988. setInterval(function() {
  989. if (isCaptchaChecked()) {
  990. if (document.querySelector(".boost-btn.unlockbutton")) {
  991. document.querySelector(".boost-btn.unlockbutton").click();
  992. }
  993. if (visibleCheck(document.querySelector("#claim_boosted"))) {
  994. document.querySelector("#claim_boosted").click();
  995. }
  996. }
  997. }, 5000);
  998. } else {
  999. setTimeout(function() {
  1000. window.location.replace("https://autofaucet.dutchycorp.space/coin_roll.php");
  1001. }, 5000);
  1002. }
  1003. }
  1004.  
  1005. if (window.location.href.includes("https://autofaucet.dutchycorp.space/coin_roll.php")) {
  1006. if (!document.querySelector("#timer")) {
  1007. setInterval(function() {
  1008. if (isCaptchaChecked()) {
  1009. if (document.querySelector(".boost-btn.unlockbutton")) {
  1010. document.querySelector(".boost-btn.unlockbutton").click();
  1011. }
  1012. if (visibleCheck(document.querySelector("#claim_boosted"))) {
  1013. document.querySelector("#claim_boosted").click();
  1014. }
  1015. }
  1016. }, 5000);
  1017. } else {
  1018. setTimeout(function() {
  1019. window.location.replace("https://autofaucet.dutchycorp.space/ptc/wall.php");
  1020. }, 5000);
  1021. }
  1022. }
  1023.  
  1024. if (window.location.href.includes("https://autofaucet.dutchycorp.space/ptc/wall.php")) {
  1025. var wallLink = document.querySelectorAll(".col.s10.m6.l4 a[name='claim']");
  1026. if (wallLink.length >= 1) {
  1027. wallLink[0].style.backgroundColor = "red";
  1028. let match = wallLink[0].onmousedown.toString().match(/'href', '(.+)'/);
  1029. let hrefValue = match[1];
  1030. setTimeout(function() {
  1031. window.location.replace("https://autofaucet.dutchycorp.space" + hrefValue);
  1032. }, 5000);
  1033. } else {
  1034. setTimeout(function() {
  1035. window.location.replace("https://autofaucet.dutchycorp.space/ptc/");
  1036. }, 5000);
  1037. }
  1038. }
  1039.  
  1040. if (window.location.href.includes("https://autofaucet.dutchycorp.space/ptc/view")) {
  1041. setInterval(function() {
  1042. if (document.querySelector("#sec").innerText === 'Payout in  0 seconds') {
  1043. document.getElementsByClassName("g-recaptcha bordeaux-btn btn-small waves-effect waves-red")[0].click();
  1044. setTimeout(function() {
  1045. console.log("Wait for Captcha");
  1046. }, 30000);
  1047. } else {
  1048. console.log("Wait on timer.");
  1049. }
  1050. }, 5000);
  1051. }
  1052.  
  1053. if (window.location.href == "https://autofaucet.dutchycorp.space/ptc/") {
  1054. setInterval(function() {
  1055. if (document.querySelector("body > div.col.s12 > div.row > div.col.s12.m12.l10 > center:nth-child(1) > h4")) {
  1056. if (document.querySelector("body > div.col.s12 > div.row > div.col.s12.m12.l10 > center:nth-child(1) > h4").innerText == ' All Available Ads Watched') {
  1057. window.close();
  1058. }
  1059. } else if (visibleCheck(document.getElementsByClassName("g-recaptcha gradient-btn btn-small waves-effect waves-purple")[0])) {
  1060. document.getElementsByClassName("g-recaptcha gradient-btn btn-small waves-effect waves-purple")[0].click();
  1061.  
  1062. } else {
  1063. console.log("Wait on timer.");
  1064. }
  1065. }, 5000);
  1066. }
  1067.  
  1068. }
  1069.  
  1070.  
  1071.  
  1072. }
  1073.  
  1074. }
  1075.  
  1076.  
  1077. });
  1078.  
  1079. // Freebitco.in Script
  1080. websites.forEach(website => {
  1081. if (website.active && window.location.href.includes(website.url)) {
  1082. if (window.location.href.includes("https://freebitco.in/signup/?op=s")) {
  1083. if (window.location.href != ("https://freebitco.in/signup/?op=s&r=3595810")) {
  1084. window.location.replace("https://freebitco.in/signup/?op=s&r=3595810");
  1085. }
  1086. }
  1087.  
  1088. if (window.location.href.includes("https://freebitco.in/?op=home")) {
  1089. if (document.querySelector("#free_play_form_button").style.display == "none") {
  1090. console.log("Wait for next Roll.");
  1091. setTimeout(function() {
  1092. window.close();
  1093. }, 1000 * 30);
  1094. } else {
  1095. if (document.querySelector("#free_wof_spins_msg > a:nth-child(3)")) {
  1096. console.log("Make the WoF Spins.");
  1097. window.open("https://freebitco.in/static/html/wof/wof-premium.html");
  1098. }
  1099. console.log("Let's look for Bonus");
  1100. document.querySelector("body > div.large-12.fixed > div > nav > section > ul > li:nth-child(8) > a").click();
  1101. document.querySelector("#rewards_tab > div.row.reward_category_container_main_div > div > div:nth-child(4) > div.reward_category_name").click();
  1102. setTimeout(function() {
  1103. var yourrwp = parseFloat(document.querySelector("#rewards_tab > div:nth-child(2) > div > div.reward_table_box.br_0_0_5_5.user_reward_points.font_bold").innerText.replace(/,/, ''));
  1104. console.log("Your current Reward Points are:");
  1105. console.log(yourrwp);
  1106. var bonuscost = parseFloat(document.querySelector("#fp_bonus_rewards > div:nth-child(2) > div:nth-child(2) > div.large-6.small-12.columns > div").innerText.replace(/,/, ''));
  1107. console.log("The Price for 1000% BTC-Bonus is:");
  1108. console.log(bonuscost);
  1109. if (yourrwp > bonuscost) {
  1110. document.querySelector("#fp_bonus_rewards > div:nth-child(2) > div:nth-child(2) > div:nth-child(3) > button").click();
  1111. } else {
  1112. console.log("Your balance is too low to buy.");
  1113. }
  1114. document.querySelector("#free_play_link_li > a").click();
  1115. }, 1000 * 5);
  1116.  
  1117. // Make the Roll
  1118. setTimeout(function() {
  1119. if (document.querySelector("#anchor")) {
  1120. console.log("Wait for Captcha and.....");
  1121.  
  1122. if (isCaptchaChecked()) {
  1123. document.querySelector("#free_play_form_button").click();
  1124. setTimeout(function() {
  1125. window.close();
  1126. }, 1000 * 30);
  1127. }
  1128. } else {
  1129. document.querySelector("#free_play_form_button").click();
  1130. setTimeout(function() {
  1131. window.close();
  1132. }, 1000 * 10);
  1133. }
  1134. }, 1000 * 10);
  1135. }
  1136. }
  1137.  
  1138. if (window.location.href.includes("https://freebitco.in/static/html/wof/wof-premium.html")) {
  1139. setTimeout(function() {
  1140. document.querySelector("#wofc-section > div > div.wofc-spins > p > button:nth-child(2)").click();
  1141. }, 1000 * 10);
  1142. setTimeout(function() {
  1143. window.close();
  1144. }, 1000 * 30);
  1145. }
  1146. }
  1147. });
  1148.  
  1149. })();