Ir al contenido
inicio / kit / browser
BrowserServicio Kit

Chromium en una URL

Chromium headless o visible, controlable a través de una API HTTP plana. Stealth activado por defecto, WebSocket CDP disponible en /start: apunta Puppeteer, Playwright o cualquier cliente CDP hacia él.

PROJECT-CONTAINER-browser-1.SERVER.containers.hoody.com
GET /start?browser_id=main&stealth=true&timezoneId=America/New_York
200 OK

# Lanzar un Chromium stealth con una huella digital

$ curl "/start?browser_id=main&stealth=true&timezoneId=America/New_York&locale=en-US"

[ "browser_id": "main",

"webSocketDebuggerUrl": "ws://.../devtools/browser/...",

"stealth": true ]

 

# Navegar — o pasa la URL WS a Puppeteer

$ curl "/browse?browser_id=main&url=https://hoody.com"

200 OK

 

# Capturar; ya funciona con tu cliente CDP existente

$ curl "/screenshot?browser_id=main&format=png" -o shot.png

1920x1080 PNG

inicio / kit / browser / demo
Tres clases de endpoint, una URL

Controla, observa e inspecciona un navegador real por HTTP

Cada instancia de Browser expone los mismos primitivos en los que confían Puppeteer y Playwright — navegación, eval de DOM, capturas, DevTools Protocol — pero como endpoints HTTP planos. Elige una pestaña para ver qué endpoint se ejecuta por debajo.

01 / 05

Inicia una instancia, apúntala a una URL

GET /start lanza un Chromium stealth con tu huella digital. GET /browse?url=… carga una página. Un round-trip HTTP, sin instalar driver, sin imagen Docker que mantener.

curl /start?stealth=true → listo
02 / 05

Evalúa JS en la página, devuelve datos estructurados

POST /eval ejecuta JavaScript arbitrario en el contexto de la página. GET /html y GET /text devuelven el DOM renderizado y el texto visible. Sin librería de selectores, sin SDK headless.

POST /eval → [ "Titular 1", "Titular 2", … ]
03 / 05

Captura o convierte la página actual a PDF

GET /screenshot devuelve PNG, JPEG o base64 — fullPage o viewport. GET /pdf renderiza a A4/Letter con orientación horizontal + márgenes. El binario viene directamente; sin flags de headless-Chrome que gestionar.

GET /screenshot?fullPage=true → binario PNG
04 / 05

Obtén las URLs CDP y pásalas a cualquier herramienta

GET /devtools-url devuelve tres URLs: el WebSocket CDP (para Puppeteer / Playwright / cualquier cliente CDP), la API HTTP de DevTools y la UI frontend de DevTools. Abre la URL del frontend en una pestaña del navegador para ver lo que ve la instancia headless.

GET /devtools-url → [ ws, http, frontend ]
05 / 05

Captura → decide → clic, en un bucle

La forma que espera todo modelo Computer-Use: una captura de pantalla, un snapshot del DOM, una forma de hacer clic en (x, y). Browser expone esto por HTTP simple: ponlo detrás de Claude Computer Use, Operator de OpenAI o tu propio agente.

bucle: screenshot → eval('click(x,y)')
Antes· Headless tradicional

docker run chromium + fonts + fingerprint patches

Después· Hoody Browser

curl /start?stealth=true → listo

inicio / kit / browser / api
API

Inicia, controla y destruye Chromium por HTTP

Cada endpoint devuelve JSON determinista o binario. Sin parsear stderr, sin archivos /tmp, sin condiciones de carrera con un subprocess que olvidó hacer flush.

browser-api.sh

# Flujo completo de Browser — iniciar, navegar, extraer, apagar

 

URL="https://proj-dev-browser-1.hoody.com"

ID="main"

 

# 1. Lanzar un Chromium stealth

curl -s "$URL/start?browser_id=$ID&stealth=true"

 

# 2. Navegar

curl -s "$URL/browse?browser_id=$ID&url=https://hoody.com"

 

# 3. Extraer datos estructurados

curl -s -X POST "$URL/eval?browser_id=$ID" \

-H 'Content-Type: application/json' \

-d '["script":"document.title"]'

# > "Example Domain"

 

# 4. Liberar el slot

curl -s "$URL/shutdown?browser_id=$ID"

browser-api.js

// Flujo completo de Browser — iniciar, navegar, extraer, apagar

const BASE = 'https://proj-dev-browser-1.hoody.com';

const id = 'main';

 

// 1. Lanzar un Chromium stealth

const start = await fetch(`$[BASE]/start?browser_id=$[id]&stealth=true`);

const [ webSocketDebuggerUrl ] = await start.json();

 

// 2. Navegar

await fetch(`$[BASE]/browse?browser_id=$[id]&url=https://hoody.com`);

 

// 3. Extraer datos estructurados

const r = await fetch(`$[BASE]/eval?browser_id=$[id]`, [

method: 'POST',

headers: [ 'Content-Type': 'application/json' ],

body: JSON.stringify([ script: 'document.title' ])

]);

const title = await r.json();

// => "Example Domain"

 

// 4. Liberar el slot

await fetch(`$[BASE]/shutdown?browser_id=$[id]`);

browser_api.py

# Flujo completo de Browser — iniciar, navegar, extraer, apagar

import requests

 

BASE = 'https://proj-dev-browser-1.hoody.com'

id = 'main'

 

# 1. Lanzar un Chromium stealth

start = requests.get(f'[BASE]/start', params=['browser_id': id, 'stealth': 'true'])

ws = start.json()['webSocketDebuggerUrl']

 

# 2. Navegar

requests.get(f'[BASE]/browse', params=['browser_id': id, 'url': 'https://hoody.com'])

 

# 3. Extraer datos estructurados

r = requests.post(f'[BASE]/eval',

params=['browser_id': id],

json=['script': 'document.title'])

title = r.json()

# => "Example Domain"

 

# 4. Liberar el slot

requests.get(f'[BASE]/shutdown', params=['browser_id': id])

inicio / kit / browser / para-qué
Para qué se usa

Dónde los equipos despliegan Browser

Una capa HTTP plana sobre Chromium abre puntos de integración que un navegador headless instalado localmente no puede cubrir. Las seis formas de despliegue que vemos con más frecuencia.

{01}

Pipelines de datos

Ingesta HTML renderizado y JSON en tu warehouse. Programa las llamadas a /eval con cron y pasa los resultados a Snowflake, BigQuery o Postgres. Sin instalar Chromium por worker, sin drift de versiones en tu cluster.

{02}

Frameworks de agentes

Conéctalo a Claude Computer Use, OpenAI Operator o herramientas de browser de LangChain. Screenshot + eval es la forma que ya esperan: Browser es un endpoint HTTP drop-in para cualquier runtime de agente que uses.

{03}

Flujos de trabajo autenticados

Controla dashboards con sesión iniciada: paneles de admin SaaS, portales bancarios, herramientas internas. POST /cookies persiste la sesión, así las llamadas posteriores mantienen la identidad sin re-autenticar en cada ejecución.

{04}

Apps de revisión

Previsualizaciones de browser por PR. Tu CI lanza una instancia de Browser contra el build de staging, devuelve el enlace frontend de /devtools-url en el comentario del PR y los revisores hacen clic una vez para ver la app en vivo.

{05}

Monitoreo programado

Capturas de /screenshot y /network activadas por cron en dashboards de uptime, SLO y rendimiento. Buffer circular de las últimas 500 entradas de consola y red por cada sonda: detecta regresiones antes que los usuarios.

{06}

Snapshots de cumplimiento

Capturas con timestamp y huella digital bloqueada de una página de terceros para flujos de trabajo legales, de auditoría o de evidencia. Fija el canal de Chromium, el viewport, la geolocalización: reproduce el render exacto meses después.

inicio / kit / browser / endpoints
API

23 operaciones, 4 grupos de endpoints

Cada capacidad de Browser es una llamada HTTP plana. Las variantes de método en el mismo path se listan por separado porque se comportan de forma diferente: GET /eval ejecuta un script puntual, POST /eval acepta un body completo.

Interacción

[count, plural, one [# endpoint] other [# endpoints]]'

curl -X POST /eval -d '["script":"document.title"]' → "Example"

POST
/browseNavegar con body JSON — waitUntil, timeout, referer, headers.
GET
/browse?url=Navegación abreviada para ergonomía de curl en shell.
POST
/evalEjecutar JavaScript (plano o base64) en contexto de página, devolver resultado.
GET
/eval?script=Eval de script en línea para lecturas únicas como document.title.
GET
/htmlDevolver document.documentElement.outerHTML — renderizado, no crudo.
GET
/textDevolver document.body.innerText — lo que lee un humano.
GET
/screenshotPNG / JPEG / base64 — fullPage compatible, calidad JPEG 0-100.
GET
/pdfRenderizar a PDF — A4/Letter, horizontal, márgenes, printBackground.

Estado de sesión

[count, plural, one [# endpoint] other [# endpoints]]'

curl -X POST /cookies -d '[[name,value,domain,...]]' → [ added: 4 ]

GET
/cookiesListar cookies, opcionalmente filtradas por URL.
POST
/cookiesAgregar cookies — name, value, domain, path, httpOnly, secure, sameSite.
DELETE
/cookiesLimpiar todas las cookies de la instancia.
GET
/metadataMetadatos completos de la instancia: sesión, viewport, URLs de DevTools, lista de pestañas.
GET
/tabsLista las pestañas abiertas con id, url, title, isActive.
POST
/tab/closeCierra una pestaña por id, o la pestaña activa si no se especifica ninguna.

Introspección

[count, plural, one [# endpoint] other [# endpoints]]'

curl /devtools-url?browser_id=main → [ ws, http, frontend ]

GET
/devtools-urlDevuelve las URLs de CDP WebSocket, DevTools HTTP y frontend UI.
GET
/consoleÚltimas 500 entradas de consola: log, error, warn, info.
GET
/networkÚltimas 500 entradas de red: método, URL, status, resourceType.
GET
/historyHistorial de navegación persistente paginado con filtros de dominio y tiempo.
DELETE
/historyElimina las entradas del historial que coincidan con el filtro.

Ciclo de vida

[count, plural, one [# endpoint] other [# endpoints]]'

curl /start?browser_id=main&stealth=true → [ ws, stealth: true ]

GET
/startCrear o reanudar una instancia con browser_id, huella digital, stealth, proxy, viewport.
GET
/stopPausar una instancia — el estado persiste. Usa /restart para reanudar.
GET
/restartDetener y relanzar con config opcionalmente actualizada.
GET
/shutdownTerminar la instancia y liberar el slot. ?force=true mata instancias bloqueadas.

Más GET /health y GET /metrics heredados de la plataforma, presentes en todos los servicios de Hoody Kit.

inicio / kit / browser / capacidades
Capacidades

Stealth, fingerprinting y CDP sin el coste de configuración

Browser es una capa fina sobre Chromium: todo lo que instalarías, parchearías y mantendrías está a un parámetro de distancia. Seis capacidades que importan cuando realmente lanzas.

Fingerprint spoofing
Patchright stealth
CDP WebSocket
Proxy (SOCKS5/HTTP)
DNS-over-HTTPS
Chromium channels
Firefox backend
500-entry console ring
500-entry network ring
Persistent history
Fingerprint spoofing
Patchright stealth
CDP WebSocket
Proxy (SOCKS5/HTTP)
DNS-over-HTTPS
Chromium channels
Firefox backend
500-entry console ring
500-entry network ring
Persistent history
Fingerprint spoofing
Patchright stealth
CDP WebSocket
Proxy (SOCKS5/HTTP)
DNS-over-HTTPS
Chromium channels
Firefox backend
500-entry console ring
500-entry network ring
Persistent history
Fingerprint spoofing
Patchright stealth
CDP WebSocket
Proxy (SOCKS5/HTTP)
DNS-over-HTTPS
Chromium channels
Firefox backend
500-entry console ring
500-entry network ring
Persistent history
POST /cookies auth
JS eval in page
PNG / JPEG / PDF capture
Mobile fingerprints
Tablet viewports
Custom UA strings
Geolocation override
QUIC / HTTP3 opt-in
Persistent browser_id
POST /cookies auth
JS eval in page
PNG / JPEG / PDF capture
Mobile fingerprints
Tablet viewports
Custom UA strings
Geolocation override
QUIC / HTTP3 opt-in
Persistent browser_id
POST /cookies auth
JS eval in page
PNG / JPEG / PDF capture
Mobile fingerprints
Tablet viewports
Custom UA strings
Geolocation override
QUIC / HTTP3 opt-in
Persistent browser_id
POST /cookies auth
JS eval in page
PNG / JPEG / PDF capture
Mobile fingerprints
Tablet viewports
Custom UA strings
Geolocation override
QUIC / HTTP3 opt-in
Persistent browser_id

Spoofing de fingerprint

Configura UA, viewport, zona horaria, locale y geolocalización en /start, o apunta a un fingerprintId para cargar un JSON preconfigurado. Canvas y WebGL siguen el perfil automáticamente.

Modo stealth

La antidetección de Patchright está activada por defecto para Chromium. No es infalible ante todos los proveedores de detección; combínala con un proveedor de resolución de CAPTCHA para sitios adversariales.

CDP pass-through

GET /devtools-url devuelve la URL de WebSocket, la API HTTP de DevTools y el frontend UI. El código existente de Puppeteer o Playwright sigue funcionando: conéctate, no reescribas.

Proxy y DoH

Proxies SOCKS5, SOCKS5h, HTTP, HTTPS con autenticación y listas de bypass. DNS over HTTPS via Cloudflare activado por defecto. QUIC/HTTP3 opcional por instancia.

Canales de Chromium

Fija cualquier build de Chromium: string de versión completa, versión mayor o canal (stable / beta / dev / canary). Firefox también compatible via browser=firefox.

Buffers de depuración

Últimas 500 entradas de consola y 500 de red por instancia, más historial de navegación persistente con endpoints de consulta y eliminación. Sin necesidad de conectar una capa de logging externa.

inicio / kit / browser / comenzar

Añade un browser real a tu stack

Browser es uno de los servicios de Hoody Kit incluidos en cada contenedor. Sin instalar drivers, sin scaffolding de Puppeteer, sin parchear fingerprints. Empieza con una URL.

Leer los docs