
Aloísio Vítor
Image Processing Expert

Skyvern es responsable de abrir páginas web, completar formularios y avanzar en flujos de trabajo empresariales, mientras que CapSolver se encarga de devolver el token CAPTCHA.
Instala directamente el SDK oficial capsolver y llama a capsolver.solve() para evitar implementar por tu cuenta la lógica de createTask y el sondeo.
Una vez que se obtenga el Token, devuélvelo a la página actual del navegador, luego deja que Skyvern envíe el formulario y verifique los resultados.
Skyvern es una plataforma de automatización de navegadores de inteligencia artificial construida sobre Playwright, modelos de visión y Grandes Modelos de Lenguaje (LLMs). Skyvern puede comprender texto, formularios y elementos interactivos dentro de una página web, completando tareas como navegación entre páginas, clics en botones, entrada de contenido, carga de archivos, extracción de información y flujos de trabajo de varios pasos basados en instrucciones en lenguaje natural. Este enfoque reduce los costos de mantenimiento de scripts causados por cambios en la estructura de la página, siendo ideal para escenarios como inicios de sesión, envío de formularios, operaciones de oficina trasera y recolección de datos.
Cuando un flujo de automatización encuentra un desafío CAPTCHA, puedes llamar al SDK oficial de Python de CapSolver proporcionando parámetros como la URL de la página actual, la clave del sitio y el tipo de CAPTCHA. Una vez que CapSolver complete la tarea, devuelve un token de verificación correspondiente. El programa luego utiliza Playwright para escribir este token en los campos de respuesta de la página actual, en llamadas a funciones JavaScript o en solicitudes empresariales. Una vez que se apruebe la verificación, Skyvern puede continuar ejecutando la tarea original autorizada por el usuario, como enviar el formulario, ingresar a la siguiente página o verificar los resultados finales.
Skyvern actualmente requiere Python 3.11, 3.12 o 3.13. Instala Skyvern, el SDK de CapSolver y Chromium:
pip install "skyvern[local]"
pip install --upgrade capsolver
python -m playwright install chromium
# pip install --upgrade capsolver
# export CAPSOLVER_API_KEY='...'
import capsolver
# capsolver.api_key = "..."
solution = capsolver.solve({
"type": "ReCaptchaV2TaskProxyLess",
"websiteURL": "https://www.google.com/recaptcha/api2/demo",
"websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
})
print(solution)
Al tener éxito, el resultado devuelto principalmente utiliza:
token = solution["gRecaptchaResponse"]
El papel de los parámetros:
websiteURL y websiteKey deben ser consistentes con la configuración real de la página actual.
A continuación, se muestra un ejemplo mínimo de integración. Skyvern primero abre la página y completa el formulario, luego obtiene el Token a través del SDK oficial y finalmente devuelve el Token a la página para su envío.
import asyncio
import capsolver
from skyvern import Skyvern
TARGET_URL = "https://www.google.com/recaptcha/api2/demo"
WEBSITE_KEY = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"
async def inject_token(page, token: str):
await page.evaluate(
"""
(token) => {
const textarea = document.getElementById('g-recaptcha-response');
if (textarea) {
textarea.value = token;
}
}
""",
token,
)
async def main():
skyvern = Skyvern.local()
browser = await skyvern.launch_local_browser(headless=False)
page = await browser.get_working_page()
try:
await page.goto(TARGET_URL)
solution = await asyncio.to_thread(
capsolver.solve,
{
"type": "ReCaptchaV2TaskProxyLess",
"websiteURL": TARGET_URL,
"websiteKey": WEBSITE_KEY,
},
)
token = solution["gRecaptchaResponse"]
await inject_token(page, token)
await page.act("Submit")
await page.validate("Verification successful... Great!")
finally:
await browser.close()
CapSolver solo se encarga de devolver el Token; no envía automáticamente el formulario empresarial del sitio objetivo. Diferentes sitios manejan los Tokens de diversas formas, con métodos comunes incluyendo:
Escribir en el campo oculto g-recaptcha-response;
Llamar a una función JavaScript configurada en la página;
Enviar el Token como parámetro de una interfaz empresarial.
La función inject_token() en el ejemplo intenta ambos, el campo oculto y una prueba de llamada a la función. En el uso real, este fragmento debe ajustarse según la implementación frontend de su propio sitio web.
Verifique los siguientes parámetros:
¿Es websiteURL la dirección de la página actual?
¿Es websiteKey del sitio actual?
¿Se refrescó la página después de obtener el Token?
¿Se entregó el Token a la función de devolución de llamada o interfaz empresarial correcta?
Además de reCAPTCHA, Skyvern también puede trabajar con CapSolver para manejar CAPTCHAS estándar de imagen a texto. Tomando como ejemplo la Demo de CAPTCHA de BotDetect: el ID del elemento de imagen CAPTCHA es demoCaptcha_CaptchaImage, el ID de la caja de entrada del resultado es captchaCode, y el ID del botón de validación es validateCaptchaButton.

ImageToTextTask requiere convertir la imagen CAPTCHA a Base64 y enviarla a través del parámetro body. Si la imagen src es una URL de datos, por ejemplo:
data:image/png;base64,iVBORw0KGgoAAA...
Al pasarlo a CapSolver, mantenga solo el contenido Base64 después de la coma, excluyendo el prefijo data:image/...;base64,. A diferencia de las tareas de tipo Token, ImageToTextTask devuelve directamente el resultado de la reconocimiento sin requerir una sondeo adicional de getTaskResult.
A continuación se muestra el ejemplo completo de integración con Skyvern:
import asyncio
import capsolver
from skyvern import Skyvern
TARGET_URL = "https://captcha.com/demos/features/captcha-demo.aspx"
async def main():
skyvern = Skyvern.local()
browser = await skyvern.launch_local_browser(headless=False)
page = await browser.get_working_page()
try:
await page.goto(TARGET_URL)
await page.locator("#demoCaptcha_CaptchaImage").wait_for()
# Leer la URL de datos de la imagen CAPTCHA.
image_src = await page.locator(
"#demoCaptcha_CaptchaImage"
).get_attribute("src")
if not image_src or "," not in image_src:
raise RuntimeError("No se encontró una imagen CAPTCHA en Base64 válida")
# Eliminar el prefijo de URL de datos y mantener solo los datos en Base64.
base64_image = image_src.split(",", 1)[1]
solution = await asyncio.to_thread(
capsolver.solve,
{
"type": "ImageToTextTask",
"websiteURL": TARGET_URL,
"module": "common",
"body": base64_image,
},
)
captcha_text = solution["text"]
print("Resultado de reconocimiento:", captcha_text)
await page.locator("#captchaCode").fill(captcha_text)
await page.locator("#validateCaptchaButton").click()
await page.wait_for_timeout(5000)
finally:
await browser.close()
if __name__ == "__main__":
asyncio.run(main())
El proceso de ejecución del código se puede resumir como:
Skyvern abre la página CAPTCHA
-> Localizar #demoCaptcha_CaptchaImage
-> Extraer y limpiar los datos de imagen en Base64
-> Llamar a capsolver.solve(ImageToTextTask)
-> Leer solution["text"]
-> Rellenar en #captchaCode
-> Hacer clic en #validateCaptchaButton
module es un parámetro opcional; se puede usar common por defecto. Si la CAPTCHA solo contiene números, se puede usar number; para algunos estilos especiales, también se puede seleccionar el modelo correspondiente independiente según la documentación de CapSolver para mejorar la precisión del reconocimiento.

Por ejemplo, al reconocer solo CAPTCHAS numéricas, se puede cambiar los parámetros de la tarea a:
solution = capsolver.solve({
"type": "ImageToTextTask",
"module": "number",
"images": [base64_image],
})
answers = solution["answers"]
El modelo number admite enviar múltiples imágenes a la vez, y images puede contener hasta 9 cadenas en Base64. Para otros nombres de modelo y tipos de imagen aplicables, consulte la Documentación oficial de ImageToTextTask de CapSolver.
Elegir la solución técnica adecuada para la automatización de navegadores de inteligencia artificial depende de la complejidad de la tarea, la frecuencia de los cambios en la estructura de la página y el mecanismo de verificación del sitio web objetivo. Herramientas tradicionales como Selenium y Playwright son adecuadas para flujos de automatización con estructuras estables y caminos de operación claros. Skyvern se basa en esto al introducir modelos de visión y LLMs, haciéndolo más adecuado para tareas web donde la estructura de la página cambia con frecuencia, requiere comprensión semántica o involucra operaciones de varios pasos. Al controlar el navegador basado en Playwright, puede completar la navegación entre páginas, rellenar formularios, hacer clic en botones y extraer datos a través de lenguaje natural. Cuando el proceso encuentra un desafío CAPTCHA, los desarrolladores pueden combinar el SDK oficial de CapSolver para obtener un token de verificación y luego llenar el resultado de vuelta en la página actual, permitiendo que Skyvern continúe con operaciones posteriores como el envío del formulario, transiciones de página y verificación de resultados. Al combinar Skyvern y CapSolver, los desarrolladores pueden construir flujos de automatización de navegadores más flexibles, mantenibles y escalables, reduciendo los costos de mantenimiento de selectores tradicionales mientras mejora la eficiencia y estabilidad de tareas web complejas. Definir claramente el alcance de la autorización, proteger las claves de API y verificar y registrar los resultados de la automatización son requisitos previos importantes para la operación estable de proyectos relacionados.
Redimir su código de bonificación de CapSolver
¡Aumente su presupuesto de automatización instantáneamente!
Utilice el código de bonificación CAP26 al recargar su cuenta de CapSolver para obtener un 5% adicional de bonificación en cada recarga — sin límites.
Redímalo ahora en su Panel de CapSolver
P1: ¿Cómo manejar CAPTCHAS dentro de iframes?
R1: Cambie al contexto del iframe primero usando page.frame_locator('iframe_selector') antes de inyectar el token. Asegúrese de que la websiteURL enviada a CapSolver sea la URL de la página principal, no la URL del iframe.
P2: ¿Qué hacer si el sitio web utiliza una función JavaScript personalizada?
R2: Identifique el nombre de la función de devolución de llamada (por ejemplo, onCaptchaResolved) y ejecútela a través de Playwright: await page.evaluate("onCaptchaResolved(token)", token).
P3: ¿Cómo mejorar las tasas de reconocimiento de ImageToText?
R3: Use parámetros module específicos (como number para CAPTCHAS numéricas) y asegúrese de que la imagen en Base64 extraída sea clara y de alta resolución.
P4: ¿Cómo manejar la seguridad de la clave de API?
R4: Nunca codifique en el código su clave de API. Use variables de entorno (por ejemplo, os.getenv("CAPSOLVER_API_KEY")) para cargarla de forma segura.
P5: ¿Debo implementar un mecanismo de reintentos?
R5: Sí, use bibliotecas como tenacity para implementar reintentos con retroalimentación exponencial para capsolver.solve() para manejar problemas temporales de red o servicio.
P6: ¿Qué pasa con la caducidad del token?
R6: Los tokens CAPTCHA caducan rápidamente (por ejemplo, en 2 minutos). Inyecte y envíe el token inmediatamente después de recibirlo de CapSolver.
P7: ¿Puede Skyvern enrutar automáticamente diferentes tipos de CAPTCHA?
R7: Sí, puede usar las capacidades de visión de Skyvern para identificar primero el tipo de CAPTCHA, luego construir dinámicamente el payload adecuado de CapSolver (por ejemplo, cambiar entre ReCaptchaV2TaskProxyLess y ImageToTextTask).
P8: ¿Cómo ayuda la visión de Skyvern de otra manera?
R8: Permite localizar elementos dinámicamente (encontrar CAPTCHAS sin IDs fijos), validar visualmente después del envío (verificar mensajes de éxito) y detectar errores visuales para reintentos más inteligentes.
Mejorar el manejo de CAPTCHA en la automatización de presentaciones en tribunales para LegalTech: flujos de trabajo compatibles y herramientas para agilizar la presentación electrónica, reducir errores y acelerar las presentaciones.

Aprende a resolver CAPTCHA en el seguimiento de inventario de comercio electrónico con métodos prácticos, consejos de automatización y cumplimiento para mantener los datos de inventario precisos y escalables.
