// ==UserScript== // @name Recaptcha Solver (Slower and Human-Like) // @namespace Recaptcha Solver // @version 2.2 // @description Recaptcha Solver in Browser | Automatically solves Recaptcha in a slower and human-like manner // @author engageub // @match *://*/recaptcha/* // @connect engageub.pythonanywhere.com // @connect engageub1.pythonanywhere.com // @grant GM_xmlhttpRequest // ==/UserScript== (function () { 'use strict'; var solved = false; var checkBoxClicked = false; var waitingForAudioResponse = false; //Node Selectors const CHECK_BOX = ".recaptcha-checkbox-border"; const AUDIO_BUTTON = "#recaptcha-audio-button"; const PLAY_BUTTON = ".rc-audiochallenge-play-button .rc-button-default"; const AUDIO_SOURCE = "#audio-source"; const IMAGE_SELECT = "#rc-imageselect"; const RESPONSE_FIELD = ".rc-audiochallenge-response-field"; const AUDIO_ERROR_MESSAGE = ".rc-audiochallenge-error-message"; const AUDIO_RESPONSE = "#audio-response"; const RELOAD_BUTTON = "#recaptcha-reload-button"; const RECAPTCHA_STATUS = "#recaptcha-accessible-status"; const DOSCAPTCHA = ".rc-doscaptcha-body"; const VERIFY_BUTTON = "#recaptcha-verify-button"; const MAX_ATTEMPTS = 5; var requestCount = 0; var recaptchaLanguage = qSelector("html").getAttribute("lang"); var audioUrl = ""; var recaptchaInitialStatus = qSelector(RECAPTCHA_STATUS) ? qSelector(RECAPTCHA_STATUS).innerText : ""; var serversList = ["https://engageub.pythonanywhere.com", "https://engageub1.pythonanywhere.com"]; var latencyList = Array(serversList.length).fill(10000); function qSelector(selector) { return document.querySelector(selector); } function isHidden(el) { return el.offsetParent === null; } async function delay(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } async function getTextFromAudio(URL) { await delay(1000 + Math.random() * 1000); // Añadir pausa de 1-2 segundos antes de enviar la solicitud var minLatency = 100000; var url = ""; for (let k = 0; k < latencyList.length; k++) { if (latencyList[k] <= minLatency) { minLatency = latencyList[k]; url = serversList[k]; } } requestCount += 1; URL = URL.replace("recaptcha.net", "google.com"); GM_xmlhttpRequest({ method: "POST", url: url, headers: { "Content-Type": "application/x-www-form-urlencoded" }, data: "input=" + encodeURIComponent(URL) + "&lang=" + recaptchaLanguage, timeout: 60000, onload: function (response) { try { if (response && response.responseText) { const responseText = response.responseText; if ( responseText == "0" || responseText.includes("<") || responseText.includes(">") || responseText.length < 2 || responseText.length > 50 ) { qSelector(RELOAD_BUTTON).click(); // Intentar nuevamente si la respuesta no es válida } else if ( qSelector(AUDIO_SOURCE) && qSelector(AUDIO_SOURCE).src && audioUrl == qSelector(AUDIO_SOURCE).src && qSelector(AUDIO_RESPONSE) && !qSelector(AUDIO_RESPONSE).value && qSelector(AUDIO_BUTTON).style.display == "none" && qSelector(VERIFY_BUTTON) ) { qSelector(AUDIO_RESPONSE).value = responseText; qSelector(VERIFY_BUTTON).click(); } } waitingForAudioResponse = false; } catch (err) { console.error(err.message); waitingForAudioResponse = false; } }, onerror: function () { waitingForAudioResponse = false; }, ontimeout: function () { waitingForAudioResponse = false; } }); } var startInterval = setInterval(async function () { try { await delay(300 + Math.random() * 300); // Pausa de 300-600ms entre cada iteración del intervalo if (!checkBoxClicked && qSelector(CHECK_BOX) && !isHidden(qSelector(CHECK_BOX))) { qSelector(CHECK_BOX).click(); checkBoxClicked = true; } if (qSelector(RECAPTCHA_STATUS) && qSelector(RECAPTCHA_STATUS).innerText !== recaptchaInitialStatus) { solved = true; clearInterval(startInterval); } if (requestCount > MAX_ATTEMPTS) { solved = true; clearInterval(startInterval); } if (!solved) { if (qSelector(AUDIO_BUTTON) && !isHidden(qSelector(AUDIO_BUTTON)) && qSelector(IMAGE_SELECT)) { qSelector(AUDIO_BUTTON).click(); } if ( !waitingForAudioResponse && qSelector(AUDIO_SOURCE) && qSelector(AUDIO_SOURCE).src && audioUrl !== qSelector(AUDIO_SOURCE).src && requestCount <= MAX_ATTEMPTS ) { waitingForAudioResponse = true; audioUrl = qSelector(AUDIO_SOURCE).src; await getTextFromAudio(audioUrl); } } if (qSelector(DOSCAPTCHA) && qSelector(DOSCAPTCHA).innerText.length > 0) { clearInterval(startInterval); } } catch (err) { console.error(err.message); clearInterval(startInterval); } }, 500); // Pausa mínima de 500ms entre cada iteración del intervalo })(); Mejora este script
Please keep input under 1000 characters