Volver al blog

Agente Hermes + Scrapeless: Integración CDP de 1 línea para agentes web anti-detección

James Thompson
James Thompson

Scraping and Proxy Management Expert

06-May-2026

Puntos Clave:

  • Integración de una línea de configuración. Hermes Agent de Nous Research tiene una herramienta de navegador integrada que ya habla el Protocolo de DevTools de Chrome. Apuntarlo al Navegador de Scraping de Scrapeless es una única línea browser.cdp_url en ~/.hermes/config.yaml. Sin instalación de SDK, sin subproceso de CLI, sin cambio de código en el lado del agente.
  • Cada acción del navegador Hermes se ejecuta en el navegador en la nube de Scrapeless. browser_navigate, browser_snapshot, browser_click, browser_type, browser_scroll, browser_press, browser_get_images y browser_vision se ejecutan dentro del navegador en la nube de Scrapeless, detrás de proxies residenciales, con huellas dactilares de anti-detección en cada sesión.
  • Alcance multicanal. La puerta de enlace de Hermes expone el agente a través de Telegram, Discord, Slack, WhatsApp, Signal, correo electrónico y una CLI. Con Scrapeless integrado, el navegador en la nube se convierte en el backend de cualquier investigación impulsada por chat, generación de leads o flujo de monitoreo sin exponer un punto de finalización de scraping separado.
  • Navegador en la nube anti-detección, proxies residenciales en 195 países. Scrapeless Scraping Browser maneja el renderizado de JavaScript, la salida de proxy residencial, la personalización de huellas dactilares del navegador (agente de usuario, zona horaria, idioma, resolución de pantalla) y la persistencia de sesiones a nivel de plataforma, para que el agente pueda centrarse en la tarea en sí y no en la infraestructura de acceso.
  • Integración directa de CDP. Apuntar la herramienta del navegador de Hermes al punto final WSS de Scrapeless es todo el cableado — sin habilidades de inserción, sin SDK, sin subproceso.

Hermes Agent es un agente autónomo de código abierto con memoria persistente, creación de habilidades autónomas y una puerta de enlace multicanal. Viene con una herramienta de navegador que utiliza un modelo de árbol de accesibilidad: las páginas se renderizan en instantáneas de texto con elementos interactivos etiquetados como @e1, @e2, @e3, y el LLM impulsa la navegación y el llenado de formularios contra esas referencias. Esto funciona bien para búsquedas de documentación y tareas básicas de navegación.

La web comercial es una superficie diferente. Cloudflare Turnstile, reCAPTCHA, Akamai Bot Manager, listas de reputación de IP y SPAs solo en JavaScript se sitúan entre clientes automatizados y muchos minoristas, mercados y SERPs. Un Chromium local que funciona sin ayuda a menudo es identificado como tráfico automatizado por estas capas. Los flujos de trabajo que el agente podría completar de otro modo — obtener precios de una página de categoría, monitorear una página de listados públicos, llenar un formulario autenticado, extraer un conjunto de datos tipado para RAG descendente — se detienen en el primer intersticial.

Scrapeless Scraping Browser es un navegador en la nube anti-detección expuesto sobre el Protocolo de DevTools de Chrome. Tiene una red de proxies residenciales que abarca 195 países (según la documentación de Scrapeless) y aleatoriza las huellas dactilares del navegador por sesión. La herramienta del navegador de Hermes ya habla CDP. La integración es una línea de configuración. Este post detalla el cableado, los comandos que el agente aceptará y el patrón de descubrir → extraer que escala la combinación a través de sitios.


Por qué Scrapeless Scraping Browser

Scrapeless Scraping Browser es un navegador en la nube personalizable y anti-detección diseñado para rastreadores web y agentes de IA. Para Hermes Agent específicamente, ofrece:

  • Interfaz del Protocolo de DevTools de Chrome — La herramienta del navegador de Hermes ya habla CDP. El navegador en la nube se integra detrás de las mismas llamadas de herramienta sin recompilación, expansión de configuración o nuevas rutas de código.
  • Proxies residenciales en 195 países — consultas geobound devuelven los listados que un usuario local vería, con rotación por sesión y sin configuración por solicitud.
  • Renderizado de JavaScript en la nube — las páginas están completamente hidratadas antes de la extracción, por lo que las SPAs, los feeds con desplazamiento infinito y los paneles cargados de manera perezosa son objetivos de primera clase para browser_snapshot y browser_vision.
  • Personalización de huellas dactilares del navegador — parámetros centrales (agente de usuario, zona horaria, idioma, resolución de pantalla) son configurables por sesión según la documentación de Scrapeless; identidades consistentes están disponibles a través de la función de huella dactilar personalizada de Scrapeless cuando la continuidad importa.
  • Persistencia de sesión a través de parámetros de consulta sessionTTL (60–900 segundos) y sessionName en el punto final WSS, para que los flujos multistep de Hermes reutilicen el mismo navegador cálido, cookies y posición de desplazamiento a través de llamadas a las herramientas.
  • Superficie de gestión única — una clave de API, una cuenta en la nube y grabación del lado del panel para reproducción.

Obtén tu clave de API en el plan gratuito en regístrate en Scrapeless y únete a nuestra comunidad oficial.
Comunidad Oficial de Discord de Scrapeless
Comunidad Oficial de Telegram de Scrapeless


Requisitos previos

  • Agente Hermes instalado. El instalador oficial cubre Linux, macOS, WSL2 y Termux en Android: curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash. El asistente de configuración se ejecuta en el primer lanzamiento.
  • Una cuenta y clave API de Scrapeless — regístrate en Scrapeless y copia la clave de Configuración → Gestión de Claves API.
  • Python 3.11 o más reciente — requisito de tiempo de ejecución de Hermes.
  • Una clave API de modelo de chat — Hermes es agnóstico respecto a proveedores (Nous Portal, OpenRouter, NVIDIA NIM, Xiaomi MiMo y cualquier endpoint compatible con OpenAI personalizado). Configura el proveedor al que Hermes ya está conectado.
  • Familiaridad básica con la edición de ~/.hermes/config.yaml o la ejecución de subcomandos CLI de Hermes.

Instalar

La configuración completa consta de cuatro sub-pasos. Cada uno es verificable de manera independiente, por lo que puedes pausar y confirmar antes de continuar.

1. Obtén la clave API de Scrapeless

Regístrate en Scrapeless, abre el panel de control y desde Configuración → Gestión de Claves API crea una clave. Copia el valor; se coloca en la configuración de Hermes en el paso 2.

Abre ~/.hermes/config.yaml (crea el archivo si no existe) y agrega la línea browser.cdp_url. El endpoint CDP de Scrapeless acepta la clave API, el país del proxy y el TTL de la sesión como parámetros de consulta:

yaml Copy
# ~/.hermes/config.yaml
browser:
  cdp_url: "wss://browser.scrapeless.com/api/v2/browser?token=TU_CLAVE_API_SCRAPELESS&proxyCountry=US&sessionTTL=600"

Esa única línea enruta cada llamada a la herramienta del navegador de Hermes — browser_navigate, browser_snapshot, browser_click, browser_type, browser_scroll, browser_press, browser_get_images, browser_vision — a través del navegador en la nube de Scrapeless. La representación del árbol de accesibilidad que usa Hermes para etiquetar @e1, @e2, @e3 se produce a partir del renderizado del navegador en la nube, por lo que los prompts y habilidades existentes siguen funcionando.

Si editar el YAML a mano es inconveniente, la forma CLI /browser connect "wss://browser.scrapeless.com/api/v2/browser?token=TU_CLAVE_API_SCRAPELESS&proxyCountry=US" hace lo mismo para la sesión actual sin persistirlo.

3. Establece la clave API fuera del archivo de configuración (recomendado)

Para repositorios compartidos o shells de múltiples usuarios, mantén el secreto fuera del YAML. La configuración de Hermes es compatible con la sustitución ${VAR}; exporta la clave una vez y haz referencia a ella desde la URL:

macOS / Linux (bash o zsh) — agrega a ~/.zshrc o ~/.bashrc:

bash Copy
export SCRAPELESS_API_KEY="tu_token_api_aqui"
source ~/.zshrc          # o ~/.bashrc

Windows (PowerShell) — persistente, de alcance de usuario:

powershell Copy
[Environment]::SetEnvironmentVariable("SCRAPELESS_API_KEY", "tu_token_api_aqui", "User")

Luego, actualiza la configuración para interpolar la variable:

yaml Copy
browser:
  cdp_url: "wss://browser.scrapeless.com/api/v2/browser?token=${SCRAPELESS_API_KEY}&proxyCountry=US&sessionTTL=600"

4. Verifica la conexión

Reinicia Hermes para que recoja la nueva configuración, luego pregúntale al agente:

"Abre https://example.com y dime el texto del encabezado H1."

Una ejecución exitosa devuelve "Example Domain". Si el agente informa un ERR_TUNNEL_CONNECTION_FAILED, un 401, o se queda atascado en browser_navigate, las causas más comunes son la clave API, la región del proxy, o la URL WSS pegada con un espacio irregular.


Cómo usar esto: pide a tu agente

Después del cambio de línea de configuración, controlas Scrapeless desde Hermes hablando con el agente — no escribiendo un pegamento CDP. El agente posee el bucle de descubrir → extraer y selecciona las herramientas del navegador turno por turno. La puerta de enlace de múltiples canales de Hermes significa que los mismos prompts funcionan desde Telegram, Discord, Slack, WhatsApp, Signal, correo electrónico o la CLI local.

Prompts que puedes pegar

Escribes Lo que hace el agente
"Abre https://news.ycombinator.com y devuelve las cinco principales historias con título, URL, autor, puntaje y conteo de comentarios como JSON." browser_navigatebrowser_snapshot → extracción tipográfica.
"Compara las páginas de precios de estos tres competidores de SaaS y resume las diferencias." Navegación en múltiples pestañas, browser_get_images para niveles de planes, resumen LLM.
"Toma la página de inicio y la página de precios de https://example.com como si estuviera en Tokio." Reinicia la sesión con proxyCountry=JP (ver "Fijar una región" a continuación), luego renderiza.
"Observa esta página de careers de Greenhouse y dime qué roles coinciden con staff engineer o infra." Navega, toma un snapshot del bloque de listados, filtra filas por palabra clave, devuelve filas estructuradas.
"Toma una captura de pantalla de toda la página de https://example.com y analiza qué hay en ella." browser_navigatebrowser_vision (captura + envía al modelo multimodal).
"Completa el formulario de contacto en <URL> con mi nombre, correo electrónico y un mensaje corto, pero detente antes de enviar para que pueda revisar." Captura la forma, mapea los campos del aviso a @e1/@e2/…, tipo_navegador, captura de pantalla, detente en la referencia de envío.
"La extracción volvió vacía ayer, vuelve a ejecutar con la grabación de sesión habilitada para que pueda reproducirla." Reemitir el mismo flujo con sessionRecording=true en la URL de WSS; el enlace de reproducción aparece en el panel de Scrapeless.
"Abre la página del producto en Amazon en <URL> desde un egreso de EE. UU. y devuelve el título, precio, calificación y recuento de reseñas." Sesión de región fija, captura de pantalla, extracción estructurada.

Modelando avisos

Fraseo Efecto
"Usa un egreso alemán." Reinicia la sesión del navegador en la nube con proxyCountry=DE en la URL de WSS.
"Mantén la sesión activa durante los próximos diez minutos." Aumenta sessionTTL=600 para que los flujos de múltiples pasos reutilicen el mismo navegador.
"Habilita la grabación de sesión." Añade sessionRecording=true — el panel expone un video reproducible para la ejecución.
"Devuelve markdown, no HTML bruto." El agente envía la captura a través de su extractor y devuelve la vista en markdown.
"Detente antes de la presentación final." Patrón incorporado de Hermes — dirígete al formulario, captura de pantalla, detente en la referencia de envío.

Los pasos 1–5 a continuación son la referencia bajo el capó. Léelos una vez para ver cómo se compone el patrón de descubrir → extraer; luego confía en que el agente lo aplique a cualquier solicitud que el operador entregue desde el chat.


La conexión es la URL de WSS del paso de instalación. La herramienta del navegador de Hermes marca esto en el primer uso y reutiliza el mismo socket durante la vida de la sesión.

yaml Copy
# ~/.hermes/config.yaml
navegador:
  cdp_url: "wss://browser.scrapeless.com/api/v2/browser?token=${SCRAPELESS_API_KEY}&proxyCountry=US&sessionTTL=600"

Tres parámetros de consulta hacen la mayor parte del trabajo:

  • token — la clave API de Scrapeless. Requerido.
  • proxyCountry — el país de proxy residencial (ISO-3166 alfa-2, p. ej. US, DE, JP, GB). Por defecto es una piscina global; fije esto para listados geográficamente restringidos.
  • sessionTTL — cuánto tiempo se mantiene vivo el navegador en la nube después del último comando, en segundos. Rango 60–900. TTL más altos son adecuados para flujos de múltiples pasos; el valor predeterminado de 60 es adecuado para extracciones de un solo uso.

Un error transitorio os error 10054, ERR_TUNNEL_CONNECTION_FAILED, o 503 en la primera llamada puede ocurrir cuando la infraestructura anti-bot restablece nuevas sesiones antes de que el navegador se inicialice completamente. Reemita el aviso que falla para reintentar; para flujos de trabajo en producción, la entrada de preguntas frecuentes a continuación cubre un patrón de reintento explícito.


Paso 2 — Descubrir con browser_navigate + browser_snapshot

Abre la página y léela como un árbol de accesibilidad antes de extraer. La captura devuelve etiquetas de texto para cada referencia interactiva (@e1, @e2, @e3, …) y el contenido de texto circundante — suficiente para que el agente elija el elemento correcto sin adivinar selectores CSS.

text Copy
Tú: Abre https://example.com/products y captura la página.
Agente: browser_navigate "https://example.com/products"
        browser_snapshot
        [devuelve árbol de accesibilidad con @e1 = entrada de búsqueda, @e2 = menú desplegable de clasificación,
         @e3..@e22 = tarjetas de productos con referencias de título + precio + calificación]

browser_snapshot es la llamada fundamental. Es lo que convierte una página activa al estilo CDP en algo sobre lo que un LLM puede razonar paso a paso. Si lo omites, el agente tiene que recurrir a cortar HTML crudo, lo cual es más frágil y usa más tokens. La captura es el paso de descubrimiento en el patrón de descubrir → extraer; cada extracción a continuación asume que se ejecutó primero.


Paso 3 — Extraer con avisos estructurados

Con la captura en mano, la extracción es una llamada regular a una herramienta LLM: el agente lee las referencias y el texto circundante, elige los campos que necesita y devuelve un registro tipado. Sin selectores CSS, sin evaluaciones de JS — la captura ya contiene los datos que el modelo necesita.

text Copy
Tú: Desde la captura, devuelve los 10 productos principales como JSON con título, precio, calificación y URL del producto.
Agente: [devuelve un array JSON con 10 filas; los campos faltantes son nulos]

Para páginas no triviales (catálogos de múltiples pestañas, feeds de desplazamiento infinito, variantes renderizadas A/B), complementa la captura con browser_scroll para hidratar paneles cargados perezosamente, luego re-captura. El navegador en la nube maneja el renderizado de JS; Hermes maneja el bucle.


Paso 4 — Realizar una interacción de múltiples pasos

Las mismas herramientas del navegador manejan el llenado de formularios, cadenas de navegación y revisiones por humanos. El patrón: captura → identificar referencia → actuar → captura → referencia siguiente.

text Copy
Tú: Abre https://app.example.com/contact, llena nombre, correo electrónico y mensaje,
     captura de pantalla del formulario y detente antes de enviar para que pueda revisar.
Agente: browser_navigate "https://app.example.com/contact"
        browser_snapshot
        # @e1 [entrada] "Nombre completo", @e2 [entrada] "Correo electrónico",
        # @e3 [texto] "Mensaje", @e4 [botón] "Enviar"
        browser_type @e1 "Jane Doe"
        browser_type @e2 "jane@example.com"
es Copy
tipo_navegador @e3 "Hola, me gustaría hablar sobre ..."
       visión_navegador   # capturar render completo de la página para revisión
       # detener — @e4 no se presiona hasta que el humano aprueba la página capturada

Los eventos de entrada reales se activan en el navegador en la nube, por lo que la validación del lado del cliente se ejecuta exactamente como lo haría para un visitante humano. El patrón de detener antes de enviar mantiene a un humano en el bucle en el último paso, lo que se recomienda como predeterminado para cualquier acción con consecuencias en el mundo real (solicitudes de empleo, incorporación de proveedores, formularios de pago).


Paso 5 — Fijar una región y persistir una sesión a través de turnos

Para cualquier objetivo donde las listas varían según la región de salida (SERPs de Google, Amazon por mercado, reservas de hoteles/vuelos, directorios de negocios locales), fijar proxyCountry a la región deseada por el usuario. Para flujos de varios pasos que necesitan cookies cálidas y posición de desplazamiento a través de múltiples turnos de agentes (SERPs paginados, paneles autenticados, formularios de varias páginas), establecer sessionTTL más alto y reutilizar el mismo sessionName.

yaml Copy
# Salida de Tokio, sesión cálida de 15 minutos, video reproducible
navegador:
  cdp_url: "wss://browser.scrapeless.com/api/v2/browser?token=${SCRAPELESS_API_KEY}&proxyCountry=JP&sessionTTL=900&sessionName=tokyo-research&sessionRecording=true"

Cambiar de regiones a mitad de conversación está a una /browser connect de distancia: Hermes cierra el socket actual, marca la nueva URL y el siguiente browser_navigate se ejecuta a través de la nueva salida. La grabación es la bandera de mayor apalancamiento para un pipeline desatendido: cada ejecución aparece en el tablero de Scrapeless como un video reproducible, por lo que cuando el agente informa de una extracción vacía, el operador puede ver lo que el navegador en la nube realmente renderizó.


Qué esperar cuando esto se ejecuta contra la web en vivo

  • El tiempo de hidratación varía según el sitio. Las SPAs que hidratan contenido a través de un XHR secundario pueden necesitar un browser_scroll o una breve espera antes de que la instantánea refleje el DOM final. Volver a tomar la instantánea una vez si un campo es consistentemente nulo.
  • La extracción sin selectores es más resistente que los selectores CSS, pero no es inmune a la deriva del diseño. El árbol de accesibilidad cambia cuando los sitios añaden una nueva columna o cambian el nombre de un botón; vuelva a solicitar al agente que redescubra los refs en lugar de codificarlos en una habilidad guardada.
  • Los intersticiales anti-bot aparecen como un redireccionamiento en la instantánea. Cuando un sitio carga previamente un desafío de Cloudflare o Akamai que el navegador en la nube no puede completar de forma transparente, la instantánea informa de la página de desafío en lugar de la meta. Ampliar la huella digital o fijar una región de proxy diferente.
  • browser_vision complementa browser_snapshot. Para páginas visualmente complejas (tablas de precios incrustadas como imágenes, gráficos, infografías), la herramienta de visión es la salida adecuada: envía una captura de pantalla al modelo multimodal en lugar del texto de accesibilidad.
  • La grabación de sesiones es de alto apalancamiento. sessionRecording=true en la URL WSS convierte "el agente hizo algo raro" en un video clicable en el tablero de Scrapeless. Consulte la página de precios para saber si su plan incluye grabación.

Preguntas frecuentes

¿Necesito un proxy residencial?
Sí, para cualquier sitio con protección anti-bot significativa, que es la mayoría de los minoristas, mercados y puntos finales de SERP. El punto final WSS de Scrapeless enruta a través de la piscina residencial de forma predeterminada; el parámetro de consulta proxyCountry establece el país de salida.

La primera conexión devolvió ERR_TUNNEL_CONNECTION_FAILED u os error 10054. ¿Qué hago ahora?
Ambos son errores transitorios de inicio de sesión y generalmente se resuelven al reintentar. Vuelva a emitir el aviso que falló; para flujos de trabajo de producción que no deben fallar en el primer intento, envuelva el aviso que falló en un pequeño bucle de reintento con retroceso exponencial (2s, 5s, 15s).

Un sitio devuelve Acceso Denegado. ¿Qué hago ahora?
Primero, vuelva a intentar: las capas anti-bot a menudo se despejan después de reiniciar la sesión. Si la página bloquea persistentemente, cambie proxyCountry a una región diferente, vuelva a emitir /browser connect para generar una nueva huella digital o contacte con el soporte de Scrapeless para confirmar que el bloqueo está a nivel de plataforma y no a nivel de cuenta.

Los selectores siguen rompiéndose. ¿Cómo sobrevivo a la rotación del DOM?
Utilice browser_snapshot en lugar de segmentar HTML en bruto con selectores CSS. La representación del árbol de accesibilidad es más estable ante la deriva del diseño y el agente redescubre los refs en cada turno en lugar de depender de rutas codificadas.

¿Cuántos trabajadores concurrentes por host?
Scrapeless no publica un límite fijo de concurrencia por host; la limitación de tasa se gestiona del lado de la plataforma. Para pipelines de múltiples hosts, ejecute bucles de agentes independientes por host en lugar de concentrarse en un solo dominio, y confirme la concurrencia de su nivel de cuenta en el Tablero de Scrapeless antes de escalar.

¿Puedo usar esto sin un agente de IA?

Copy
Sí. El punto final Scrapeless WSS es un CDP simple: cualquier script de Puppeteer o Playwright se conecta con `puppeteer.connect({ browserWSEndpoint: ... })` o `chromium.connectOverCDP(...)` y obtiene el mismo navegador en la nube. Hermes es el camino recomendado cuando la investigación impulsada por chat o el alcance multicanal son importantes; el punto final CDP es el retroceso de nivel inferior.

**¿Puedo intercambiar Hermes por otro agente?**
Sí. Cualquier agente que soporte un punto final CDP personalizado (integraciones estilo Browserbase, uso de navegador, tuberías personalizadas de Playwright/Puppeteer) se conecta al mismo punto final WSS. La superficie de integración es el protocolo, no el cliente.

**¿Cómo mantengo las cookies y el estado de inicio de sesión a través de múltiples turnos de agente?**
Establezca `sessionTTL` en un valor más largo (300–900 segundos), dé al sesión un `sessionName` estable y evite reiniciar la conexión entre llamadas. El navegador en la nube mantiene el mismo perfil de navegador, cookies y posición de desplazamiento activa a lo largo de la vida útil de la sesión.

**¿Dónde veo lo que el navegador en la nube realmente representó?**
Agregue `sessionRecording=true` a la URL WSS. Cada ejecución aparece en el panel de control Scrapeless como un video reproducible, por lo que una extracción vacía o un intersticial sorpresa son visibles de principio a fin sin instrumentar al agente.

En Scrapeless, solo accedemos a datos disponibles públicamente y cumplimos estrictamente con las leyes, regulaciones y políticas de privacidad del sitio web aplicables. El contenido de este blog es sólo para fines de demostración y no implica ninguna actividad ilegal o infractora. No ofrecemos garantías y renunciamos a toda responsabilidad por el uso de la información de este blog o enlaces de terceros. Antes de realizar cualquier actividad de scraping, consulte a su asesor legal y revise los términos de servicio del sitio web de destino u obtenga los permisos necesarios.

Artículos más populares

Catalogar