// ==UserScript==
// @name [Premium] Faucet Monitor with Faucetpay ReCaptcha/Antibot Rotator
// @namespace https://greasyfork.org/users/1162863
// @version 2.1
// @description Elevate your Faucetpay Faucet claiming experience with advanced automation, seamlessly handling form filling, button clicks, and ReCaptcha/Antibot challenges. Boost your efficiency and maximize earnings.
// @author Andrewblood
// @match https://www.coinfinity.top/downloads.php
// @match https://sollcrypto.com/home/page/*
// @match https://cryptoclaps.com/earn/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=faucetpay.io
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_deleteValue
// @grant window.close
// @antifeature referral-code
// @license Andrewblood
// ==/UserScript==
/*
Experience the next level of Faucet claiming with unparalleled features:
- User Interface: Displays an overlay for managing stored URLs, clearing pages, and saving Faucetpay email.
- Requirements Integration: Provides extension and script recommendations with install buttons for enhanced functionality.
- Advanced Automation: Seamlessly fills forms and clicks buttons on Faucetpay Faucet sites, reducing manual effort.
- ReCaptcha/Antibot Handling: Intelligently tackles security challenges, ensuring a smooth claiming process.
- Efficient Navigation: Automatically moves through supported Faucet URLs, preventing revisits window for strategic claiming.
- Error Handling: Reloads pages, ensuring up-to-date claiming and avoiding downtime.
*/
(function() {
'use strict';
var urls = [
"https://sollcrypto.com/home/page/bitcoin/",
"https://sollcrypto.com/home/page/doge/",
"https://sollcrypto.com/home/page/tron/",
"https://sollcrypto.com/home/page/digibyte/",
"https://sollcrypto.com/home/page/litecoin/",
"https://sollcrypto.com/home/page/binance/",
"https://sollcrypto.com/home/page/solana/",
"https://sollcrypto.com/home/page/ethereum/",
"https://sollcrypto.com/home/page/bch/",
"https://sollcrypto.com/home/page/xrp/",
"https://sollcrypto.com/home/page/dash/",
"https://sollcrypto.com/home/page/zcash/",
"https://cryptoclaps.com/earn/dogecoin/",
"https://cryptoclaps.com/earn/tron/",
"https://cryptoclaps.com/earn/digibyte/",
"https://cryptoclaps.com/earn/litecoin/",
"https://cryptoclaps.com/earn/binance/",
"https://cryptoclaps.com/earn/solana/",
"https://cryptoclaps.com/earn/ethereum/",
"https://cryptoclaps.com/earn/bch/",
"https://cryptoclaps.com/earn/xrp/",
"https://cryptoclaps.com/earn/dash/",
"https://cryptoclaps.com/earn/polygon/",
"https://cryptoclaps.com/earn/usdt/",
"https://cryptoclaps.com/earn/feyorra/",
"https://cryptoclaps.com/earn/zcash/",
];
// Function to click a button
function clickButton(selector) {
var button = document.querySelector(selector);
if (button) {
button.click();
}
}
// Function to check if an element is visible
function isElementVisible(selector) {
var element = document.querySelector(selector);
return element && element.offsetWidth > 0 && element.offsetHeight > 0;
}
// Email overlay creation
var overlay = document.createElement('div');
overlay.id = 'emailInputOverlay';
overlay.style.position = 'fixed';
overlay.style.bottom = '10px';
overlay.style.right = '10px';
overlay.style.zIndex = '10000';
// Create a button for other requirements
var otherRequirementsButton = document.createElement('button');
otherRequirementsButton.id = 'otherRequirementsButton';
otherRequirementsButton.style.padding = '5px';
otherRequirementsButton.style.marginLeft = '5px';
otherRequirementsButton.textContent = 'Requirements';
var isRequirementsOverlayOpen = false;
var isStoredUrlsOverlayOpen = false;
// Event listener for otherRequirementsButton
otherRequirementsButton.addEventListener('click', function() {
// Check if requirements overlay is already open
if (isRequirementsOverlayOpen) {
// Close the overlay
closeOverlay(otherRequirementsOverlay);
isRequirementsOverlayOpen = false;
return;
}
// Create an overlay for other requirements
var otherRequirementsOverlay = document.createElement('div');
otherRequirementsOverlay.style.position = 'fixed';
otherRequirementsOverlay.style.top = '50%';
otherRequirementsOverlay.style.left = '50%';
otherRequirementsOverlay.style.transform = 'translate(-50%, -50%)';
otherRequirementsOverlay.style.zIndex = '10001';
otherRequirementsOverlay.style.backgroundColor = '#fff';
otherRequirementsOverlay.style.border = '1px solid #ddd';
otherRequirementsOverlay.style.padding = '20px';
otherRequirementsOverlay.style.maxHeight = '80%';
otherRequirementsOverlay.style.overflowY = 'auto';
// Add the heading
var heading = document.createElement('h2');
heading.textContent = 'Requirements';
heading.style.textAlign = 'center';
heading.style.marginBottom = '15px';
otherRequirementsOverlay.appendChild(heading);
// Define the list of extensions and scripts with install buttons
var requirementsList = [
{ name: '<b>ReCaptcha:</b> hektCaptcha: hCaptcha Solver', installUrl: 'https://github.com/Wikidepia/hektCaptcha-extension' },
{ name: '<b>Antibot Words:</b> AB Links Solver', installUrl: 'https://greasyfork.org/de/scripts/459453-ab-links-solver' }
];
// Create a list element
var list = document.createElement('ul');
list.style.listStyleType = 'none';
list.style.padding = '0';
// Populate the list with requirements and install buttons
requirementsList.forEach(function(requirement) {
var listItem = document.createElement('li');
var installButton = document.createElement('button');
installButton.textContent = 'Install';
installButton.addEventListener('click', function() {
// Open a new tab with the install URL
window.open(requirement.installUrl, '_blank');
});
// Create a span element for styling
var styledText = document.createElement('span');
styledText.innerHTML = requirement.name; // Use innerHTML to interpret HTML tags
// Append the span and install button to the list item
listItem.appendChild(styledText);
listItem.appendChild(installButton);
list.appendChild(listItem);
});
// Create a close button for the overlay
var closeRequirementsButton = document.createElement('button');
closeRequirementsButton.textContent = 'Close';
closeRequirementsButton.style.padding = '8px';
closeRequirementsButton.style.marginTop = '10px';
closeRequirementsButton.addEventListener('click', function() {
// Close the overlay when the close button is clicked
document.body.removeChild(otherRequirementsOverlay);
});
// Function to save Faucetpay email
function saveFaucetpayEmail() {
// Save entered email address
var newEmail = emailInput.value;
GM_setValue('storedEmail', newEmail);
// Success notification (can be customized)
alert('Faucetpay email address saved successfully!');
}
// Add input field and label for Faucetpay email to the requirements overlay
var emailInputLabel = document.createElement('label');
emailInputLabel.textContent = 'Enter Faucetpay Email:';
emailInputLabel.style.display = 'block';
emailInputLabel.style.marginTop = '10px';
var emailInput = document.createElement('input');
emailInput.type = 'text';
emailInput.id = 'emailInput';
emailInput.placeholder = 'Faucetpay Email';
emailInput.style.padding = '5px';
emailInput.style.width = '100%';
// Abrufen und Einsetzen des gespeicherten Werts
var storedEmail = GM_getValue('storedEmail', '');
emailInput.value = storedEmail;
// Add "Save Faucetpay email" button to the requirements overlay
var saveFaucetpayEmailButton = document.createElement('button');
saveFaucetpayEmailButton.id = 'saveFaucetpayEmailButton';
saveFaucetpayEmailButton.style.padding = '5px';
saveFaucetpayEmailButton.style.marginTop = '5px';
saveFaucetpayEmailButton.style.width = '100%';
saveFaucetpayEmailButton.textContent = 'Save Faucetpay Email';
// Add event listener for saveFaucetpayEmailButton
saveFaucetpayEmailButton.addEventListener('click', saveFaucetpayEmail);
// Append the list and close button to the overlay
otherRequirementsOverlay.appendChild(list);
// Append the input field, label, and "Save Faucetpay email" button to the requirements overlay
otherRequirementsOverlay.appendChild(emailInputLabel);
otherRequirementsOverlay.appendChild(emailInput);
otherRequirementsOverlay.appendChild(saveFaucetpayEmailButton);
otherRequirementsOverlay.appendChild(closeRequirementsButton);
var closeButton = createCloseButton(otherRequirementsOverlay);
otherRequirementsOverlay.appendChild(closeButton);
// Set flag to indicate that requirements overlay is open
isRequirementsOverlayOpen = true;
// Add the overlay to the body
document.body.appendChild(otherRequirementsOverlay);
// Add an event listener to reset the flag when the overlay is closed
otherRequirementsOverlay.addEventListener('click', function() {
isRequirementsOverlayOpen = false;
});
});
// Create a button to show stored URLs
var showStoredUrlsButton = document.createElement('button');
showStoredUrlsButton.id = 'showStoredUrlsButton';
showStoredUrlsButton.style.padding = '5px';
showStoredUrlsButton.style.marginLeft = '5px';
showStoredUrlsButton.textContent = 'Faucetpay Rotator Sites';
showStoredUrlsButton.addEventListener('click', function() {
// Check if stored URLs overlay is already open
if (isStoredUrlsOverlayOpen) {
// Close the overlay
closeOverlay(overlayTable);
isStoredUrlsOverlayOpen = false;
return;
}
// Display stored pages in an overlay
var storedUrls = GM_getValue('storedUrls', []);
// Combine stored URLs with the original URLs
var allUrls = urls.map(function(url) {
var storedUrlEntry = storedUrls.find(function(storedUrl) {
return storedUrl.url === url;
});
return {
url: url,
timestamp: storedUrlEntry ? storedUrlEntry.timestamp : null
};
});
// Create an overlay for the table
var overlayTable = document.createElement('div');
overlayTable.style.position = 'fixed';
overlayTable.style.top = '50%';
overlayTable.style.left = '50%';
overlayTable.style.transform = 'translate(-50%, -50%)';
overlayTable.style.zIndex = '10001';
overlayTable.style.backgroundColor = '#fff';
overlayTable.style.border = '1px solid #ddd';
overlayTable.style.padding = '20px';
overlayTable.style.maxHeight = '80%';
overlayTable.style.overflowY = 'auto';
// Add the heading for Faucetpay Rotator Sites
var heading = document.createElement('h2');
heading.textContent = 'Faucetpay Rotator Sites';
heading.style.textAlign = 'center';
heading.style.marginBottom = '15px';
overlayTable.appendChild(heading);
// Create a close button for the overlay
var closeButton = document.createElement('button');
closeButton.textContent = 'Close';
closeButton.style.padding = '8px';
closeButton.style.marginTop = '10px';
closeButton.addEventListener('click', function() {
// Close the overlay when the close button is clicked
document.body.removeChild(overlayTable);
});
// Create a button to delete all stored URLs
var deleteAllButton = document.createElement('button');
deleteAllButton.id = 'deleteAllButton';
deleteAllButton.style.padding = '5px';
deleteAllButton.style.marginLeft = '5px';
deleteAllButton.style.float = 'right'; // Align the button to the right
deleteAllButton.textContent = 'Delete All Times';
// Add an event listener for the deleteAllButton
deleteAllButton.addEventListener('click', function() {
// Clear all stored URLs
GM_deleteValue('storedUrls');
// Refresh the table
showStoredUrlsButton.click();
});
// Create a table element
var table = document.createElement('table');
table.style.borderCollapse = 'collapse';
table.style.width = '100%';
// Create table headers
var headers = ['Connect', 'URL', 'Status', 'Delete'];
var headerRow = table.insertRow();
for (var i = 0; i < headers.length; i++) {
var headerCell = headerRow.insertCell(i);
headerCell.style.border = '1px solid #ddd';
headerCell.style.padding = '8px';
headerCell.style.textAlign = 'left';
headerCell.textContent = headers[i];
// Add click event for sorting
if (i === 1 || i === 2) {
headerCell.addEventListener('click', function() {
sortTable(table, this.cellIndex);
});
}
}
// Populate table with all URLs, timestamps, and delete buttons
for (var j = 0; j < allUrls.length; j++) {
var urlEntry = allUrls[j];
var row = table.insertRow();
// Add "Connect" button to each row
var connectCell = row.insertCell(0);
connectCell.style.border = '1px solid #ddd';
connectCell.style.padding = '8px';
var connectButton = document.createElement('button');
connectButton.textContent = 'Connect';
connectButton.addEventListener('click', createConnectHandler(urlEntry.url)); // Attach a handler with the URL
connectCell.appendChild(connectButton);
var urlCell = row.insertCell(1);
urlCell.style.border = '1px solid #ddd';
urlCell.style.padding = '8px';
urlCell.textContent = urlEntry.url;
var statusCell = row.insertCell(2);
statusCell.style.border = '1px solid #ddd';
statusCell.style.padding = '8px';
statusCell.style.color = getStatusColor(urlEntry);
statusCell.textContent = getStatusText(urlEntry);
var deleteCell = row.insertCell(3);
deleteCell.style.border = '1px solid #ddd';
deleteCell.style.padding = '8px';
// Create delete button for each row
var deleteButton = document.createElement('button');
deleteButton.textContent = 'Delete Time';
deleteButton.addEventListener('click', createDeleteHandler(urlEntry));
deleteCell.appendChild(deleteButton);
}
// Append the table and close button to the overlay
overlayTable.appendChild(table);
overlayTable.appendChild(closeButton);
overlayTable.appendChild(deleteAllButton);
var closeButtontop = createCloseButton(overlayTable);
overlayTable.appendChild(closeButtontop);
// Set flag to indicate that stored URLs overlay is open
isStoredUrlsOverlayOpen = true;
// Add the overlay to the body
document.body.appendChild(overlayTable);
// Add an event listener to reset the flag when the overlay is closed
overlayTable.addEventListener('click', function() {
isStoredUrlsOverlayOpen = false;
});
});
// Function to close the overlay
function closeOverlay(overlay) {
// Close the overlay when the close button is clicked
document.body.removeChild(overlay);
}
// Funktion zum Erstellen des "X"-Buttons
function createCloseButton(overlay) {
var closeButton = document.createElement('button');
closeButton.innerHTML = 'X';
closeButton.style.position = 'absolute';
closeButton.style.top = '5px';
closeButton.style.right = '5px';
closeButton.style.padding = '5px';
closeButton.style.cursor = 'pointer';
closeButton.addEventListener('click', function() {
// Rufe die Funktion zum Schließen des Overlays auf
closeOverlay(overlay);
});
return closeButton;
}
// Function to get the status text based on the urlEntry
function getStatusText(urlEntry) {
var currentTime = Date.now();
if (urlEntry.timestamp) {
var timestamp = Date.parse(urlEntry.timestamp.replace(/-/g, '/'));
if (timestamp > currentTime) {
// Not Active Until
return 'Not Active Until ' + urlEntry.timestamp;
} else {
// Active
return 'Active';
}
} else {
return 'Active';
}
}
// Function to get the status color based on the urlEntry
function getStatusColor(urlEntry) {
var currentTime = Date.now();
if (urlEntry.timestamp) {
var timestamp = Date.parse(urlEntry.timestamp.replace(/-/g, '/'));
return (timestamp > currentTime) ? 'red' : 'green';
} else {
return 'green'; // Assuming 'Active' state when timestamp is not present
}
}
// Function to create a delete handler with a specific urlEntry
function createDeleteHandler(urlEntry) {
return function() {
// Find the corresponding URL and delete it from stored pages
var urlToDelete = urlEntry.url;
var storedUrls = GM_getValue('storedUrls', []);
storedUrls = storedUrls.filter(function(storedUrl) {
return storedUrl.url !== urlToDelete;
});
// Update stored pages
GM_setValue('storedUrls', storedUrls);
// Refresh the table
showStoredUrlsButton.click();
};
}
// Function to create a connect handler with a specific URL
function createConnectHandler(url) {
return function() {
// Redirect to the selected URL
window.open(url, '_blank');
};
}
// Function to sort the table by column index
function sortTable(table, columnIndex) {
var rows = Array.from(table.rows).slice(1); // Exclude header row
var sortOrder = 1;
// Determine sorting order based on the current order of the column
if (table.rows[0].cells[columnIndex].classList.contains('ascending')) {
sortOrder = -1;
}
// Remove sorting classes from all columns
for (var i = 0; i < table.rows[0].cells.length; i++) {
table.rows[0].cells[i].classList.remove('ascending', 'descending');
}
// Sort the rows based on the content of the selected column
rows.sort(function(a, b) {
var textA = a.cells[columnIndex].textContent.trim().toUpperCase();
var textB = b.cells[columnIndex].textContent.trim().toUpperCase();
if (textA < textB) {
return -1 * sortOrder;
} else if (textA > textB) {
return 1 * sortOrder;
} else {
return 0;
}
});
// Clear and rebuild the table with the sorted rows
while (table.rows.length > 1) {
table.deleteRow(1);
}
for (var j = 0; j < rows.length; j++) {
table.appendChild(rows[j]);
}
// Add sorting class to the header cell
if (sortOrder === 1) {
table.rows[0].cells[columnIndex].classList.add('ascending');
} else {
table.rows[0].cells[columnIndex].classList.add('descending');
}
}
// Add elements to the overlay
overlay.appendChild(showStoredUrlsButton);
overlay.appendChild(otherRequirementsButton);
// Add overlay to the body
document.body.appendChild(overlay);
var currentURL = window.location.href;
if (currentURL.includes("https://sollcrypto.com/home/page/") || currentURL.includes("https://cryptoclaps.com/earn/")) {
setTimeout(function () {
location.reload();
}, 300000);
var currentPageUrl = window.location.href;
var indexOfRParameter = currentPageUrl.indexOf("?r=");
if (indexOfRParameter !== -1) {
currentPageUrl = currentPageUrl.substring(0, indexOfRParameter);
}
var storedUrls = GM_getValue('storedUrls', []) || [];
// Erster Selector: The faucet does not have sufficient funds for this transaction
var selector1 = "body > div.container.flex-grow.my-4 > div.row.my-2 > div.col-12.col-md-8.col-lg-8.order-md-2.mb-4.text-center > center > div.form > div.alert.alert-danger.fade.show";
if (isElementVisible(selector1) && document.querySelector(selector1)?.innerText === ' The faucet does not have sufficient funds for this transaction.') {
var reason1 = 'sufficient funds';
var timestamp1 = new Date(new Date().getTime() + 24 * 60 * 60 * 1000).toISOString().slice(0, 19).replace('T', ' ');
saveUrl(currentPageUrl, timestamp1, reason1);
}
// Zweiter Selector: Your daily claim limit has been reached. Please come back in tomorrow.
var selector2 = "body > div.container.flex-grow.my-4 > div.row.my-2 > div.col-12.col-md-8.col-lg-8.order-md-2.mb-4.text-center > center > div.alert.alert-danger.fade.show";
if (isElementVisible(selector2) && document.querySelector(selector2)?.innerText === ' Your daily claim limit has been reached. Please come back in tomorrow.') {
var reason2 = 'daily claim limit';
var timestamp2 = new Date(new Date().getTime() + 8 * 60 * 60 * 1000).toISOString().slice(0, 19).replace('T', ' ');
saveUrl(currentPageUrl, timestamp2, reason2);
}
function saveUrl(url, timestamp, reason) {
var urlWithTimestamp = { url: url, timestamp: timestamp, reason: reason };
var existingUrlIndex = storedUrls.findIndex(function (storedUrl) {
return storedUrl.url === url;
});
if (existingUrlIndex !== -1) {
storedUrls[existingUrlIndex].timestamp = timestamp;
storedUrls[existingUrlIndex].reason = reason;
} else {
storedUrls.push(urlWithTimestamp);
}
GM_setValue('storedUrls', storedUrls);
}
// Check if the element with the text "satoshi" or specific error messages is visible
if ((isElementVisible("body > div.container.flex-grow.my-4 > div.row.my-2 > div.col-12.col-md-8.col-lg-8.order-md-2.mb-4.text-center > center > div.form > div.alert.alert-success.fade.show") &&
document.querySelector("body > div.container.flex-grow.my-4 > div.row.my-2 > div.col-12.col-md-8.col-lg-8.order-md-2.mb-4.text-center > center > div.form > div.alert.alert-success.fade.show").innerText.includes('satoshi')) ||
(isElementVisible("body > div.container.flex-grow.my-4 > div.row.my-2 > div.col-12.col-md-8.col-lg-8.order-md-2.mb-4.text-center > center > div.form > div.alert.alert-danger.fade.show") &&
document.querySelector("body > div.container.flex-grow.my-4 > div.row.my-2 > div.col-12.col-md-8.col-lg-8.order-md-2.mb-4.text-center > center > div.form > div.alert.alert-danger.fade.show").innerText === ' The faucet does not have sufficient funds for this transaction.') ||
(isElementVisible("body > div.container.flex-grow.my-4 > div.row.my-2 > div.col-12.col-md-8.col-lg-8.order-md-2.mb-4.text-center > center > div.form > div.alert.alert-danger.fade.show") &&
document.querySelector("body > div.container.flex-grow.my-4 > div.row.my-2 > div.col-12.col-md-8.col-lg-8.order-md-2.mb-4.text-center > center > div.form > div.alert.alert-danger.fade.show").innerText === ' Session invalid, try again') ||
(isElementVisible("body > div.container.flex-grow.my-4 > div.row.my-2 > div.col-12.col-md-8.col-lg-8.order-md-2.mb-4.text-center > center > div.alert.alert-danger.fade.show") &&
document.querySelector("body > div.container.flex-grow.my-4 > div.row.my-2 > div.col-12.col-md-8.col-lg-8.order-md-2.mb-4.text-center > center > div.alert.alert-danger.fade.show").innerText === ' Your daily claim limit has been reached. Please come back in tomorrow.')) {
// Vorhandene URLs mit Timestamps
var storedUrls = GM_getValue('storedUrls', []) || [];
// Funktion zum Überprüfen und Verbinden mit der nächsten gültigen URL
function checkAndConnectNextUrl() {
// Aktuelle URL ohne den Referral-Code
var currentUrl = window.location.href.includes('?r=') ? window.location.href.split('?r=')[0] : window.location.href;
console.log("Current URL:", currentUrl);
// Suche nach der Position der aktuellen URL in der Liste
var currentIndex = urls.indexOf(currentUrl);
console.log("Current Index:", currentIndex);
var validUrlFound = false;
// Überprüfe die nächste URL in der Liste
for (var i = currentIndex + 1; i < currentIndex + urls.length; i++) {
var nextUrl = urls[i % urls.length]; // Modulo verwendet, um wieder von vorne zu beginnen
console.log("Checking next URL:", nextUrl);
// Überprüfe, ob die URL bereits in storedUrls vorhanden ist
var storedUrlInfo = storedUrls.find(function (storedUrl) {
return storedUrl.url === nextUrl;
});
console.log("Stored URL Info:", storedUrlInfo);
// Wenn die URL nicht in storedUrls vorhanden ist oder der Zeitstempel in der Zukunft liegt
if (!storedUrlInfo || Date.now() < storedUrlInfo.timestamp) {
// Verbinde mit der gültigen URL
console.log("Connecting to the next valid URL:", nextUrl);
// Führe hier deine Verbindungslogik durch
window.location.href = nextUrl;
// Markiere, dass eine gültige URL gefunden wurde
validUrlFound = true;
// Verlasse die Schleife, da eine gültige URL gefunden wurde
break;
}
}
// Wenn keine gültige URL gefunden wurde, zeige einen Alert
if (!validUrlFound) {
console.log("Keine gültige URL gefunden.");
// Schließe das Fenster nach 3 Sekunden (3000 Millisekunden)
setTimeout(function () {
window.close();
}, 30000);
}
}
// Beispielaufruf der Funktion
checkAndConnectNextUrl();
} else {
// Element is not visible, so proceed with the actions
// Check if the Referral Code is in the URL, if not, add it
var currentURL = window.location.href;
var referralCode = '[email protected]';
if (!currentURL.includes(referralCode)) {
currentURL += referralCode;
window.location.href = currentURL; // Redirect with the updated URL
} else {
// Continue with actions as the Referral Code is already present
// If the Faucetpay email field is found, fill it with the saved email address
var faucetpayEmailInput = document.querySelector("#address");
if (faucetpayEmailInput) {
// Abrufen und Einsetzen des gespeicherten Werts
var storedEmail = GM_getValue('storedEmail', '');
faucetpayEmailInput.value = storedEmail;
// Click the button after inserting the email address
clickButton("body > div.container.flex-grow.my-4 > div.row.my-2 > div.col-12.col-md-8.col-lg-8.order-md-2.mb-4.text-center > center > form > div:nth-child(4) > button");
// Check if the pop-up/overlay appears and click the login button if conditions are met
var intervalId = setInterval(function() {
var antibotLinksValue = document.querySelector("#antibotlinks").value.length;
var recaptchaResponseValue = document.querySelector("#g-recaptcha-response").value.length;
if (antibotLinksValue > 1 && recaptchaResponseValue > 1) {
clearInterval(intervalId);
// Click the login button
clickButton("#login");
}
}, 1000);
}
}
}
}
})();