Usa un servicio de resolución de CAPTCHA con Selenium
Usa solvethree para obtener un token de reCAPTCHA Enterprise y luego usa Selenium para introducir solution.token en el formulario de tu aplicación y enviarlo. El SDK resuelve la tarea; no rellena el formulario del navegador por ti.
El ejemplo usa un formulario HTTPS con un campo de token y un botón de envío. Adapta esos selectores a la aplicación que estés probando.
En esta página
Prepara el formulario y el entorno de Python
- 1.
Instala las dependencias
Usa Python 3.10 o posterior con Chrome. Instala el paquete
seleniummediante pip y luego instala el SDK oficial de Python de solvethree desde su archivo wheel descargable. Sigue las instrucciones de instalación mediante descarga directa de la integración con Python; no las sustituyas por una instalación desde un registro de paquetes que des por supuesta. - 2.
Configura el perfil de destino
Configura el nombre de host del formulario propio en la consola de solvethree y asegúrate de que su perfil esté activo para tu espacio de trabajo. Enviar un nombre de host en una tarea no crea ese perfil. El ejemplo solicita la acción
login; cámbiala si tu aplicación usa otra acción. - 3.
Configura las variables de entorno
Establece
TARGET_URLcon la URL HTTPS completa de tu formulario,SOLVETHREE_PROXYcon la URL de tu proxy HTTP o HTTPS ySOLVETHREE_API_KEYcon la clave de API de tu espacio de trabajo. Mantén la clave en el proceso de Python, no en el JavaScript de la página.
Resuelve primero y luego inicia Chrome con la identidad devuelta
Este ejemplo de Chrome requiere un proxy con una lista de IP permitidas y sin nombre de usuario ni contraseña. Rechaza las URL de proxy que contienen credenciales y no implementa la configuración de un proxy con autenticación.
La tarea usa el nombre de host extraído de TARGET_URL, la acción login y un proxy. Cuando solve devuelve un resultado listo, Chrome se inicia con ese mismo proxy y el valor de userAgent devuelto. Antes de navegar, el ejemplo también establece la cabecera secChUa devuelta.
# Install selenium and the official solvethree Python SDK first.
import os
from urllib.parse import urlsplit
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from solvethree import Solvethree
target = os.environ["TARGET_URL"] # Your configured HTTPS form page.
proxy_url = os.environ["SOLVETHREE_PROXY"]
proxy = urlsplit(proxy_url)
if proxy.username or proxy.password:
raise ValueError("This Chrome example requires an IP-allowlisted proxy without URL credentials")
client = Solvethree(os.environ["SOLVETHREE_API_KEY"])
result = client.solve({"site": urlsplit(target).hostname, "action": "login", "proxy": proxy_url})
solution = result["solution"]
options = webdriver.ChromeOptions()
options.add_argument("--proxy-server=" + proxy_url)
options.add_argument("--user-agent=" + solution["userAgent"])
driver = webdriver.Chrome(options=options)
try:
driver.execute_cdp_cmd("Network.enable", {})
driver.execute_cdp_cmd("Network.setExtraHTTPHeaders", {
"headers": {"sec-ch-ua": solution["secChUa"]}
})
driver.get(target)
# Adapt the field and button to your application's form contract.
field = WebDriverWait(driver, 20).until(
lambda browser: browser.find_element(By.NAME, "g-recaptcha-response")
)
driver.execute_script("""
arguments[0].value = arguments[1];
arguments[0].dispatchEvent(new Event('input', {bubbles:true}));
""", field, solution["token"])
driver.find_element(By.CSS_SELECTOR, 'button[type="submit"]').click()
# Check your application's success response here.
finally:
driver.quit()Solvethree.solve crea la tarea una sola vez y consulta su estado hasta que esté lista o se lance una excepción. Solo entonces el navegador navega al formulario. El script espera al campo de token, asigna solution.token, dispara un evento de entrada y hace clic en el botón de envío. Chrome se cierra en el bloque finally.
Adapta los supuestos del formulario de la demostración
TARGET_URLes la página del formulario de tu aplicación. El valor desitede la tarea es su nombre de host, no la URL completa; las solicitudes de reCAPTCHA no usan un campourlnitype.logines la acción del ejemplo. Sustitúyela por la acción que usan la aplicación y su perfil configurado.By.NAMEcong-recaptcha-responselocaliza el área de texto de la demostración. Usa el campo o parámetro de envío que tu aplicación lee realmente. Asignar el valor y disparar un evento de entrada es el mecanismo de transferencia de la demostración, no un callback universal de reCAPTCHA.button[type="submit"]identifica el botón de envío de la demostración. Sustitúyelo por un selector inequívoco para tu formulario y conserva el comportamiento de sesión, CSRF y callbacks que requiere la aplicación.
La espera explícita de 20 segundos del ejemplo solo comprueba que el área de texto exista. Después de hacer clic en Submit, añade una espera condicional para el resultado real de tu aplicación, como su estado de éxito o un error de validación. Usa un plazo máximo global para el flujo del navegador independiente del tiempo de espera de la resolución; no sustituyas las comprobaciones de estado por pausas fijas ni mezcles esperas implícitas y explícitas sin cuidado.
Comprueba el paso que falla antes de pagar por otra resolución
- La tarea de resolución falla antes de que se inicie Chrome.
Inspecciona errorCode y error de la tarea en estado terminal. Distingue entre una tarea fallida y un error de solicitud HTTP.
Prueba esto: Corrige el problema indicado en los datos de entrada, el perfil o la conectividad antes de reintentar. Deja de consultar el estado de una tarea fallida; los datos de entrada no válidos no mejorarán con otra solicitud si no los modificas.
- Selenium agota el tiempo de espera al buscar el área de texto.
Confirma que Chrome haya llegado al formulario previsto y que la página contenga realmente el campo con el nombre usado en la demostración.
Prueba esto: Sustituye el localizador de la demostración por el mecanismo de transferencia del token de tu aplicación y espera al estado en el que esté disponible. Un tiempo de espera mayor no corregirá un selector incorrecto.
- El token está listo, pero la aplicación rechaza el envío.
Inspecciona primero la solicitud saliente de la aplicación. Comprueba que contenga solution.token, no el ID de la tarea ni un valor antiguo, y que la acción, el proxy, la identidad del navegador y la sesión coincidan con el flujo previsto.
Prueba esto: Corrige el parámetro enviado o los requisitos de la aplicación antes de solicitar otro token. Una tarea lista proporciona una solución; la respuesta de la aplicación determina si se aceptó el envío.
Fuentes y referencia de la API
Ejecuta tu primera tarea.
Empieza con $5 de crédito en tu espacio de trabajo.