CAPSOLVER
Blog
Cómo agregar un solucionador de CAPTCHA a chromedp en Go

Cómo agregar un resolvedor de CAPTCHA a chromedp en Go

Logo of CapSolver

Aloísio Vítor

How to use CapSolver

02-Nov-2026

TL;DR

  • chromedp controla Chrome desde Go; un servicio de CAPTCHA separado proporciona el resultado de resolución cuando un flujo permitido lo necesita.
  • Fija la versión de chromedp porque los ejemplos actuales usan APIs que difieren de los tutoriales antiguos.
  • Prueba el acceso del navegador y la conexión con la API del solver por separado antes de ejecutar un reto de pago.
  • Inspecciona tanto los errores de Go como el ErrorId de la API; un error de Go nulo no demuestra que el servicio haya tenido éxito.
  • Mantén juntos los datos de la prueba actual del navegador y luego verifica la página después de aplicar un resultado.

chromedp es una biblioteca de Go para controlar navegadores mediante el Protocolo DevTools de Chrome. Los desarrolladores la usan para pruebas de navegador y automatización sin introducir un controlador en Python o JavaScript. Cuando una tarea de navegador aprobada se encuentra con un CAPTCHA compatible, la aplicación Go puede llamar a un solver y seguir gestionando la misma página.

CapSolver proporciona un SDK oficial para Go y APIs de tareas documentadas para el paso de resolución. Esta guía conecta esas responsabilidades sin presentar la biblioteca de navegador como un solver. La verificación ejecutable usa un fixture de navegador local propio y una petición real a la API con una clave de relleno deliberadamente inválida. Verifica el cableado y el manejo de errores, no una resolución de pago.

¿Dónde encaja la resolución de CAPTCHA en chromedp?

La resolución de CAPTCHA encaja entre la recogida de los parámetros actuales del reto y la continuación de la operación de navegador que necesita el resultado.

El repositorio oficial de chromedp proporciona el controlador del navegador. Tu programa en Go abre la página permitida, lee el estado relevante y decide cuándo un reto compatible necesita tratamiento. El solver aporta su salida documentada; chromedp sigue siendo responsable de las acciones posteriores en la página.

Un CAPTCHA no es prueba de que toda operación de navegador bloqueada requiera una petición de resolución. Un campo ausente, una navegación fallida o un error de aplicación pueden requerir otra corrección. Identifica el reto real antes de elegir un tipo de tarea.

Para un formulario de QA propio, la secuencia es directa: abrir el formulario, identificar su configuración de CAPTCHA, solicitar una solución cuando corresponda, aplicarla mediante la ruta de integración esperada por la aplicación y comprobar la confirmación del formulario. Esta guía no proporciona un callback universal ni un script de envío para sitios web arbitrarios.

Instalar dependencias de Go compatibles

Usa un módulo de Go aislado y dependencias fijadas para que las llamadas de API del artículo coincidan con tu build.

El entorno comprobado usó Go 1.27.3, github.com/chromedp/chromedp@v0.21.0 y github.com/capsolver/capsolver-go@v0.0.0-20251204081438-e4e07af23eae. Chrome estaba instalado localmente y se lanzó en un contexto de navegador temporal separado.

Crea un directorio de trabajo, inicializa su módulo con go mod init captcha-browser-check, y luego ejecuta:

go get github.com/chromedp/chromedp@v0.21.0 github.com/capsolver/capsolver-go@v0.0.0-20251204081438-e4e07af23eae

Las notas de la versión v0.21.0 indican que Go 1.25 y posteriores son compatibles. Usa la documentación de esa versión al adaptar un script de navegador antiguo. Mezclar ejemplos antiguos que devuelven punteros con la API de acciones tipadas más reciente puede producir errores de compilación antes de que se ejecute cualquier petición de navegador o solver.

La documentación oficial de la API de balance incluye el método Balance() del SDK de Go. Una llamada de balance es útil para separar el acceso a cuenta/API de la resolución específica de retos. No crea una tarea de CAPTCHA.

Ejecuta una pequeña comprobación que demuestre que Chrome puede leer una página propia y que el SDK de Go puede recibir una respuesta real de la API.

Guarda esto como main.go y ejecuta go run . desde el módulo inicializado. El atributo local FIXTURE_ONLY es datos de prueba, no un sitekey real. La clave de la API es deliberadamente inválida y el programa espera que el servicio la rechace.

go Copy
package main

import (
    "context"
    "fmt"
    "log"
    "net/http"
    "net/http/httptest"
    "time"
    "github.com/chromedp/chromedp"
    capsolver "github.com/capsolver/capsolver-go"
)

func main() {
    // Un fixture local comprueba el cableado del navegador. No es un CAPTCHA real.
    fixture := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprint(w, `<title>Owned QA fixture</title><div id="widget" data-sitekey="FIXTURE_ONLY"></div>`)
    }))
    defer fixture.Close()
    ctx, cancel := chromedp.NewContext(context.Background())
    defer cancel()
    ctx, deadline := context.WithTimeout(ctx, 30*time.Second)
    defer deadline()
    if err := chromedp.Do(ctx, chromedp.Navigate(fixture.URL)); err != nil { log.Fatal(err) }
    sitekey, err := chromedp.Run(ctx, chromedp.AttributeValue("#widget", "data-sitekey"))
    if err != nil { log.Fatal(err) }
    if !sitekey.Exists || sitekey.Value != "FIXTURE_ONLY" { log.Fatal("Fixture key not found") }; fmt.Println("Fixture key:", sitekey.Value)
    // Credencial deliberadamente inválida: comprueba un error real de API, no una cuenta.
    solver := capsolver.CapSolver{ApiKey: "YOUR_API_KEY"}
    result, err := solver.Balance()
    if err != nil { log.Fatal(err) }
    fmt.Println("API error:", result.ErrorId, result.ErrorCode)
    if result.ErrorId == 0 { log.Fatal("Expected the placeholder credential to be rejected") }
}

La ejecución verificada imprimió Fixture key: FIXTURE_ONLY, seguida de un error de API con ErrorId igual a 1 y ERROR_KEY_DOES_NOT_EXIST. Trata ese código exacto como la respuesta observada en esta comprobación de relleno, no como una respuesta garantizada para toda credencial inválida.

Esto establece el acceso local al navegador y una ruta real de petición-respuesta hacia la API. No se consultó ninguna cuenta real, no se resolvió ningún reto y no se realizó ningún envío de formulario.

Inspeccionar explícitamente el atributo devuelto

La acción AttributeValue actual devuelve un AttributeResult que contiene el valor del atributo y un indicador de existencia.

El ejemplo comprueba ambos campos antes de continuar. Un atributo ausente debería detener la recopilación de parámetros, en vez de convertirse en un sitekey vacío en una petición de pago. Un selector que funciona en este fixture propio no es un selector universal para todas las integraciones de CAPTCHA.

Comprobar los errores de negocio por separado de los errores de Go

El SDK comprobado puede devolver una respuesta de servicio parseada sin devolver un error de Go.

Por eso el ejemplo comprueba result.ErrorId después de manejar err. Un fallo de red, un fallo de parseo JSON y una respuesta válida que describe un error de cuenta son condiciones distintas. Lee la respuesta exacta devuelta en lugar de asumir que err == nil significa que la cuenta o la tarea tuvieron éxito.

Canjea tu código de bono de CapSolver

Aumenta tu presupuesto de automatización al instante.
Usa el código de bono CAP26 al recargar tu cuenta de CapSolver para obtener un 5% de bono adicional en cada recarga, sin límites.
Canjéalo ahora en tu Panel de CapSolver
Promoción de recarga de CapSolver que muestra el código de bono CAP26

Mapear el reto actual a una tarea documentada

Usa la referencia de tarea actual del CAPTCHA seleccionado para construir la petición de resolución desde la página que realmente inspeccionaste.

Para reCAPTCHA v2, la documentación oficial de la tarea especifica la familia de tareas y campos como websiteURL y websiteKey. Usa la ortografía y capitalización documentadas. No construyas un nombre de tarea de memoria ni copies un ejemplo antiguo del SDK sin comprobar el contrato actual.

El SDK oficial de Go expone Solve() para un mapa de tarea. Una implementación en producción debería proporcionar la credencial real de forma segura, pasar los parámetros actuales de la tarea e inspeccionar el resultado devuelto o el error según la versión fijada del SDK.

La comprobación de conexión anterior no es intencionalmente un programa completo de resolución de pago. Antes de desplegar el paso de resolución, ejecuta un reto permitido con tu propia cuenta financiada y valida el resultado contra la aplicación propia. Ese paso dependiente de credenciales no se ejecutó para este artículo, por lo que no se afirma ninguna tasa de éxito ni finalización de extremo a extremo.

Mantén la URL de la página, la familia del reto, la clave pública y los parámetros opcionales requeridos asociados con la misma operación de navegador. Si la navegación sustituye la página o regenera el reto, vuelve a inspeccionar las entradas antes de iniciar otro intento.

Aplicar el resultado mediante la integración real de la página

Usa la solución de la manera en que la aplicación propia lo espera y luego verifica que el comportamiento de la aplicación cambió como se pretendía.

Un resultado basado en token no es una instrucción para hacer clic en ningún botón de verificación visible. Algunas aplicaciones usan callbacks, otras vinculan el resultado a un formulario, y la validación final del lado del servidor sigue siendo importante. Consulta la implementación de la aplicación en lugar de adivinar el nombre de una callback de JavaScript.

La documentación de verificación de respuestas de Google explica el paso de verificación del lado del servidor para reCAPTCHA. Que la automatización de navegador alcance una línea de código después de la resolución no es lo mismo que que ese servidor acepte la respuesta.

Mantén la condición de éxito de tu prueba específica. Para un formulario propio, inspecciona su confirmación o registro de prueba. Para un flujo de lectura permitido, inspecciona el contenido esperado. Evita tratar un widget que desaparece como la única señal de finalización cuando la aplicación tiene un resultado más fiable.

Diagnosticar un fallo sin repetir todo el flujo

Diagnostica el componente que falló antes de volver a ejecutar navegación, comprobaciones de cuenta y resolución juntos.

Un error de compilación apunta a compatibilidad de código y dependencias. Un fallo al iniciar el navegador apunta al ejecutable o al entorno de ejecución. Una clave ausente apunta a la inspección de página. Un error de servicio apunta a la respuesta documentada de la API. Un formulario rechazado después de una solución apunta a la aplicación del resultado y a la propia aplicación.

Para fallos en el contrato de entrada, la guía de resolución de problemas sobre invalid-task-data muestra cómo comparar la petición real con la tarea seleccionada. Más reintentos de navegador no corregirán un campo mal escrito en esa petición.

Conserva un pequeño registro de diagnóstico con las versiones de los paquetes, la etapa fallida, el identificador de tarea cuando esté disponible y la información de error redactada. No registres la clave real de la cuenta ni el token de solución completo. Al escalar, describe lo que la comprobación del navegador y la comprobación de la API establecieron por separado.

Construye flujos de automatización fiables con CapSolver

Mantén chromedp a cargo del navegador y coloca la llamada al solver documentado en el paso real del CAPTCHA. CapSolver suministra la interfaz de resolución; tu aplicación es responsable del estado de la página, las decisiones de error y la comprobación final de finalización.

FAQ

P: ¿chromedp incluye resolución de CAPTCHA?

chromedp es un controlador de navegador. Este flujo agrega un servicio de resolución separado para retos compatibles encontrados durante tareas permitidas.

P: ¿El ejemplo gasta crédito del solver?

No se crea ninguna tarea de pago. El ejemplo envía una petición de balance con una clave de relleno deliberadamente inválida y comprueba el error resultante.

P: ¿Por qué la API puede rechazar una petición cuando el error de Go es nulo?

El SDK puede haber recibido y parseado correctamente una respuesta que contiene un error a nivel de servicio. Inspecciona los campos de error de la respuesta además del error de Go.

P: ¿Puedo usar FIXTURE_ONLY como mi sitekey?

No. Son datos de prueba locales usados para verificar la lectura de atributos del navegador. Una tarea de resolución real necesita la clave pública actual de la página permitida.

P: ¿Se ha probado aquí una resolución completa de CAPTCHA de pago?

No. El alcance verificado es el fixture de navegador de chromedp y un rechazo real de la API. La resolución de pago y la aceptación por una aplicación propia requieren tu cuenta y una prueba de extremo a extremo separada.

Aviso de Cumplimiento: La información proporcionada en este blog es solo para fines informativos. CapSolver se compromete a cumplir con todas las leyes y regulaciones aplicables. El uso de la red de CapSolver para actividades ilegales, fraudulentas o abusivas está estrictamente prohibido y será investigado. Nuestras soluciones para la resolución de captcha mejoran la experiencia del usuario mientras garantizan un 100% de cumplimiento al ayudar a resolver las dificultades de captcha durante el rastreo de datos públicos. Fomentamos el uso responsable de nuestros servicios. Para obtener más información, visite nuestros Términos de Servicio y Política de Privacidad.

Máse

Arquitectura de Raspado Web para Extracción de Datos Escalable
Arquitectura de raspado de web para extracción de datos escalable

Aprende una arquitectura de raspado web escalable en Rust con reqwest, scraper, raspado asíncrono, raspado con navegador sin cabeza, rotación de proxies y manejo de CAPTCHA conforme.

web scraping
Logo of CapSolver

Aloísio Vítor

22-Apr-2026

Resolver Captcha en Nanobot con CapSolver
Cómo resolver Captcha en Nanobot con CapSolver

Automatiza la resolución de CAPTCHA con Nanobot y CapSolver. Utiliza Playwright para resolver reCAPTCHA y Cloudflare autónomamente.

web scraping
Logo of CapSolver

Adélia Cruz

26-Feb-2026

Datos como Servicio (DaaS): ¿Qué es y por qué es importante en 2026
Datos como Servicio (DaaS): ¿Qué es y por qué es importante en 2026

Comprender Datos como Servicio (DaaS) en 2026. Explora sus beneficios, casos de uso y cómo transforma los negocios con insights en tiempo real y escalabilidad.

web scraping
Logo of CapSolver

Sora Fujimoto

12-Feb-2026

Cómo solucionar errores comunes de raspado de web en 2026
Cómo arreglar errores comunes de raspado de web en 2026

Dominar la resolución de diversos errores de scrapers web como 400, 401, 402, 403, 429, 5xx y Cloudflare 1001 en 2026. Aprender estrategias avanzadas para la rotación de IPs, encabezados y limitación de tasa adaptativa con CapSolver.

web scraping
Logo of CapSolver

Emma Foster

05-Feb-2026

RoxyBrowser con integración de CapSolver
Cómo resolver un Captcha en RoxyBrowser con la integración de CapSolver

Integrar CapSolver con RoxyBrowser para automatizar tareas del navegador y evadir reCAPTCHA, Turnstile y otros CAPTCHAs.

web scraping
Logo of CapSolver

Emma Foster

04-Feb-2026

Easyspider CapSolver Integración de Captcha
Cómo resolver captcha en EasySpider con la integración de CapSolver

EasySpider es una herramienta visual de scraping web y automatización de navegadores, y cuando se combina con CapSolver, puede resolver de manera confiable los CAPTCHAs como reCAPTCHA v2 y Cloudflare Turnstile, facilitando la extracción de datos automatizada sin interrupciones en todo tipo de sitios web.

web scraping
Logo of CapSolver

Adélia Cruz

04-Feb-2026