Ir al contenido
Chromium como URL
Spoofing de huella digital
Control de pestañas
API de capturas
Eval de JavaScript
Interceptación de red
Chrome DevTools Protocol
Compatible con Puppeteer
Chromium como URL
Spoofing de huella digital
Control de pestañas
API de capturas
Eval de JavaScript
Interceptación de red
Chrome DevTools Protocol
Compatible con Puppeteer
Chromium como URL
Spoofing de huella digital
Control de pestañas
API de capturas
Eval de JavaScript
Interceptación de red
Chrome DevTools Protocol
Compatible con Puppeteer
Chromium como URL
Spoofing de huella digital
Control de pestañas
API de capturas
Eval de JavaScript
Interceptación de red
Chrome DevTools Protocol
Compatible con Puppeteer
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.

abc123-def456-browser-1.node-us-1.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

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

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

# Full Browser flow — start, navigate, extract, shutdown

 

URL="https://abc123-def456-browser-1.node-us-1.containers.hoody.com"

ID="main"

 

# 1. Spawn a stealth Chromium (Patchright)

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

 

# 2. Navigate to a page

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

 

# 3. Read the page title back

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

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

-d '{"script":"document.title"}'

# > { "result": "Example Domain" }

 

# 4. Release the slot

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

browser-api.js

// Full Browser flow — start, navigate, extract, shutdown

const BASE = 'https://abc123-def456-browser-1.node-us-1.containers.hoody.com';

const id = 'main';

 

// 1. Spawn a stealth Chromium (Patchright)

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

const { webSocketDebuggerUrl } = await start.json();

 

// 2. Navigate to a page

await fetch(`${BASE}/browse?browser_id=${id}&url=https://example.com`);

 

// 3. Read the page title back

const r = await fetch(`${BASE}/eval?browser_id=${id}`, {

method: 'POST',

headers: { 'Content-Type': 'application/json' },

body: JSON.stringify({ script: 'document.title' })

});

const { result } = await r.json();

// => "Example Domain"

 

// 4. Release the slot

await fetch(`${BASE}/shutdown?browser_id=${id}`);

browser_api.py

# Full Browser flow — start, navigate, extract, shutdown

import requests

 

BASE = 'https://abc123-def456-browser-1.node-us-1.containers.hoody.com'

id = 'main'

 

# 1. Spawn a stealth Chromium (Patchright)

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

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

 

# 2. Navigate to a page

requests.get(f'{BASE}/browse', params={'browser_id': id, 'url': 'https://example.com'})

 

# 3. Read the page title back

r = requests.post(f'{BASE}/eval',

params={'browser_id': id},

json={'script': 'document.title'})

title = r.json()['result']

# => "Example Domain"

 

# 4. Release the slot

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

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.

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

8 endpoints

curl /browse?browser_id=main&url=https://example.com → { tabId, url, created, reused }

GET
/browse?url=Crear o reanudar una instancia con browser_id, huella digital, stealth, proxy, viewport.
POST
/browsePausar una instancia — el estado persiste. Usa /restart para reanudar.
GET
/eval?script=Detener y relanzar con config opcionalmente actualizada.
POST
/evalTerminar la instancia y liberar el slot. ?force=true mata instancias bloqueadas.
GET
/htmlNavegar con body JSON — waitUntil, timeout, referer, headers.
GET
/textNavegación abreviada para ergonomía de curl en shell.
GET
/screenshotEjecutar JavaScript (plano o base64) en contexto de página, devolver resultado.
GET
/pdfEval de script en línea para lecturas únicas como document.title.

Estado de sesión

5 endpoints

curl -X POST /cookies -d '{ cookies: [{ name, value, url }] }' → { added: 2 }

GET
/cookiesDevolver document.documentElement.outerHTML — renderizado, no crudo.
POST
/cookiesDevolver document.body.innerText — lo que lee un humano.
DELETE
/cookiesPNG / JPEG / base64 — fullPage compatible, calidad JPEG 0-100.
GET
/historyRenderizar a PDF — A4/Letter, horizontal, márgenes, printBackground.
DELETE
/historyListar cookies, opcionalmente filtradas por URL.

Introspección

6 endpoints

curl /devtools-url?browser_id=main → { webSocketDebuggerUrl, devtoolsHttpUrl, devtoolsFrontendUrl }

GET
/metadataAgregar cookies — name, value, domain, path, httpOnly, secure, sameSite.
GET
/tabsLimpiar todas las cookies de la instancia.
POST
/tab/closeMetadatos completos de la instancia: sesión, viewport, URLs de DevTools, lista de pestañas.
GET
/devtools-urlLista las pestañas abiertas con id, url, title, isActive.
GET
/consoleCierra una pestaña por id, o la pestaña activa si no se especifica ninguna.
GET
/networkDevuelve las URLs de CDP WebSocket, DevTools HTTP y frontend UI.

Ciclo de vida

5 endpoints

curl /start?browser_id=main&stealth=true → { browser_id, webSocketDebuggerUrl, stealth: true }

GET
/startÚltimas 500 entradas de consola: log, error, warn, info.
GET
/stopÚltimas 500 entradas de red: método, URL, status, resourceType.
GET
/restartHistorial de navegación persistente paginado con filtros de dominio y tiempo.
GET
/shutdownElimina las entradas del historial que coincidan con el filtro.
GET
/api/v1/browser/healthComprobación de liveness y readiness — servida por la API central (api.hoody.com), no por la URL del contenedor.

24 endpoints en cuatro áreas funcionales. 23 funcionan contra la URL de tu contenedor de browser usando las rutas cortas que se muestran; la comprobación de salud es la excepción, servida por la API central en api.hoody.com/api/v1/browser/health. Los métodos siguen los docs: browse y eval aceptan GET y POST; cookies añade GET, POST y DELETE.

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.

Patchright stealth
Fingerprint profiles
CDP WebSocket
Proxy SOCKS5 / HTTP
DNS-over-HTTPS
Chromium channels
Firefox backend
500-entry console ring
500-entry network ring
Persistent history
Patchright stealth
Fingerprint profiles
CDP WebSocket
Proxy SOCKS5 / HTTP
DNS-over-HTTPS
Chromium channels
Firefox backend
500-entry console ring
500-entry network ring
Persistent history
Patchright stealth
Fingerprint profiles
CDP WebSocket
Proxy SOCKS5 / HTTP
DNS-over-HTTPS
Chromium channels
Firefox backend
500-entry console ring
500-entry network ring
Persistent history
Patchright stealth
Fingerprint profiles
CDP WebSocket
Proxy SOCKS5 / HTTP
DNS-over-HTTPS
Chromium channels
Firefox backend
500-entry console ring
500-entry network ring
Persistent history
Cookie injection
JS eval in page
PNG / JPEG / PDF export
Viewport + DPR
Timezone + locale
Custom UA strings
Geolocation override
QUIC / HTTP3 opt-in
Per-instance browser_id
Cookie injection
JS eval in page
PNG / JPEG / PDF export
Viewport + DPR
Timezone + locale
Custom UA strings
Geolocation override
QUIC / HTTP3 opt-in
Per-instance browser_id
Cookie injection
JS eval in page
PNG / JPEG / PDF export
Viewport + DPR
Timezone + locale
Custom UA strings
Geolocation override
QUIC / HTTP3 opt-in
Per-instance browser_id
Cookie injection
JS eval in page
PNG / JPEG / PDF export
Viewport + DPR
Timezone + locale
Custom UA strings
Geolocation override
QUIC / HTTP3 opt-in
Per-instance 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.

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