Pular para o conteúdo
Chromium como uma URL
Spoofing de Fingerprint
Controle de Abas
API de Screenshots
Avaliação de JavaScript
Interceptação de Rede
Chrome DevTools Protocol
Compatível com Puppeteer
Chromium como uma URL
Spoofing de Fingerprint
Controle de Abas
API de Screenshots
Avaliação de JavaScript
Interceptação de Rede
Chrome DevTools Protocol
Compatível com Puppeteer
Chromium como uma URL
Spoofing de Fingerprint
Controle de Abas
API de Screenshots
Avaliação de JavaScript
Interceptação de Rede
Chrome DevTools Protocol
Compatível com Puppeteer
Chromium como uma URL
Spoofing de Fingerprint
Controle de Abas
API de Screenshots
Avaliação de JavaScript
Interceptação de Rede
Chrome DevTools Protocol
Compatível com Puppeteer
BrowserServiço Kit

Chromium em uma URL

Automação de Chrome headless como um endpoint HTTPS. Navegue, faça screenshots, extraia dados, preencha formulários — tudo via HTTP.

abc123-def456-browser-1.node-us-1.containers.hoody.com
GET /start?browser_id=main&stealth=true&timezoneId=America/New_York
200 OK

# Inicie um Chromium stealth com um fingerprint

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

{ "browser_id": "main",

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

"stealth": true }

 

# Navegue — ou passe a URL WS para o Puppeteer

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

200 OK

 

# Capture; já funciona com seu cliente CDP existente

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

1920x1080 PNG

Três classes de endpoint, uma URL

Controle, observe e inspecione um browser de verdade via HTTP

Cada instância do Browser expõe os mesmos primitivos que Puppeteer e Playwright usam — navegação, eval de DOM, screenshots, DevTools Protocol — mas como endpoints HTTP simples. Escolha uma aba abaixo para ver qual endpoint roda por baixo.

01 / 05

Navegação via HTTP

Navegue para qualquer URL, espere pelo carregamento completo e receba metadados da página.

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

Extração de Dados

Extraia HTML, texto visível ou dados estruturados. Execute JavaScript personalizado para lógica de extração complexa.

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

Tire screenshot ou gere PDF da página atual

GET /screenshot retorna PNG, JPEG ou base64 — fullPage ou viewport. GET /pdf renderiza em A4/Carta com paisagem e margens. O binário é devolvido diretamente; sem flags de headless Chrome para manipular.

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

Obtenha as URLs do CDP e repasse para qualquer ferramenta

GET /devtools-url retorna três URLs: o WebSocket do CDP (para Puppeteer / Playwright / qualquer cliente CDP), a API HTTP do DevTools e a UI frontend do DevTools. Abra a URL do frontend em uma aba do navegador para ver o que a instância headless está vendo.

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

Screenshot → decidir → clicar, em loop

O formato que todo modelo de Computer-Use espera: um screenshot, um snapshot do DOM, uma forma de clicar em (x, y). O Browser expõe esses recursos via HTTP simples — conecte ao Claude Computer Use, ao Operator da OpenAI ou ao seu próprio agente.

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

docker run chromium + fonts + fingerprint patches

Depois· Hoody Browser

curl /start?stealth=true → ready

API

Inicie, controle e encerre o Chromium via HTTP

Cada endpoint retorna JSON determinístico ou binário. Sem scraping de stderr, sem arquivos em /tmp, sem race conditions com subprocessos que esqueceram de fazer 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})

Casos de Uso

Construído para automação web real

Uma camada HTTP simples sobre o Chromium abre pontos de integração que um navegador headless instalado localmente não cobre. Seis formatos de implantação que vemos com mais frequência.

{01}

Pipelines de dados

Ingira HTML renderizado e JSON no seu data warehouse. Agende as chamadas /eval via cron e envie os resultados para Snowflake, BigQuery ou Postgres. Sem instalação de Chromium por worker, sem divergência de versões no cluster.

{02}

Frameworks de agentes

Conecte ao Claude Computer Use, ao OpenAI Operator ou às ferramentas de browser do LangChain. Screenshot + eval é o formato que eles já esperam — Browser é um endpoint HTTP plug-and-play para qualquer runtime de agente.

{03}

Fluxos autenticados

Opere dashboards logados — painéis de admin de SaaS, portais bancários, ferramentas internas. POST /cookies persiste a sessão, para que chamadas subsequentes mantenham a identidade sem re-autenticar a cada execução.

{04}

Aplicativos de revisão

Pré-visualizações de browser por PR. Seu CI sobe uma instância do Browser contra o build em staging, retorna o link frontend do /devtools-url no comentário do PR e os revisores clicam uma vez para ver o app ao vivo.

{05}

Monitoramento agendado

Capturas de /screenshot e /network via cron em dashboards de uptime, SLO e performance. Armazene em buffer circular as últimas 500 entradas de console e rede de cada sonda — detecte regressões antes dos usuários.

{06}

Snapshots de conformidade

Capturas com carimbo de tempo e fingerprint fixado de páginas de terceiros para fluxos jurídicos, de auditoria ou de evidência. Fixe o canal do Chromium, o viewport e a geolocalização — reproduza o render exato meses depois.

API

21 endpoints, controle total do browser

Toda capacidade do Browser é uma chamada HTTP simples. Variantes de método no mesmo caminho são listadas separadamente porque se comportam de forma diferente — GET /eval executa um script pontual, POST /eval aceita um body completo.

Interação

8 endpoints

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

GET
/browse?url=Cria ou retoma uma instância com browser_id, fingerprint, stealth, proxy, viewport.
POST
/browsePausa uma instância — estado persiste. Use /restart para retomar.
GET
/eval?script=Para e recria a instância com config opcionalmente atualizada.
POST
/evalEncerra a instância e libera o slot. ?force=true mata instâncias travadas.
GET
/htmlNavega com um body JSON — waitUntil, timeout, referer, headers.
GET
/textNavegação rápida para ergonomia de curl na linha de comando.
GET
/screenshotExecuta JavaScript (simples ou base64) no contexto da página e retorna o resultado.
GET
/pdfEval de script inline para leituras pontuais como document.title.

Estado da sessão

5 endpoints

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

GET
/cookiesRetorna document.documentElement.outerHTML — renderizado, não o HTML bruto.
POST
/cookiesRetorna document.body.innerText — o que um humano lê.
DELETE
/cookiesPNG / JPEG / base64 — fullPage suportado, qualidade JPEG 0-100.
GET
/historyRenderiza em PDF — A4/Letter, paisagem, margens, printBackground.
DELETE
/historyLista cookies, opcionalmente filtrados por URL.

Introspecção

6 endpoints

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

GET
/metadataAdiciona cookies — name, value, domain, path, httpOnly, secure, sameSite.
GET
/tabsLimpa todos os cookies da instância.
POST
/tab/closeMetadados completos da instância — sessão, viewport, URLs do DevTools, lista de abas.
GET
/devtools-urlLista abas abertas com id, url, title, isActive.
GET
/consoleFecha uma aba pelo id — ou a aba ativa se nenhum for especificado.
GET
/networkRetorna URLs do CDP WebSocket + DevTools HTTP + interface frontend.

Ciclo de vida

5 endpoints

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

GET
/startÚltimas 500 entradas do console — log, error, warn, info.
GET
/stopÚltimas 500 entradas de rede — método, URL, status, resourceType.
GET
/restartHistórico de navegação persistente paginado com filtros de domínio e tempo.
GET
/shutdownExcluir entradas do histórico que correspondem ao filtro.
GET
/api/v1/browser/healthVerificação de liveness e readiness — servida pela API central (api.hoody.com), não pela URL do contêiner.

24 endpoints em quatro áreas funcionais. 23 funcionam contra a URL do seu contêiner de browser usando os caminhos curtos mostrados; a verificação de saúde é a única exceção, servida pela API central em api.hoody.com/api/v1/browser/health. Os métodos seguem os docs: browse e eval aceitam GET e POST; cookies adiciona GET, POST e DELETE.

Capacidades

Stealth, fingerprinting e CDP — sem o custo de configuração

Browser é uma camada fina sobre o Chromium — tudo que você instalaria, patchearia e monitoraria fica a um parâmetro de distância. Seis capacidades que importam quando você realmente coloca em produção.

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

Configure UA, viewport, fuso horário, idioma e geolocalização no /start — ou aponte para um fingerprintId para carregar um JSON predefinido. Canvas e WebGL seguem o perfil automaticamente.

Modo stealth

O anti-detecção do Patchright está ativo por padrão no Chromium. Não é infalível contra todos os provedores de detecção — combine com um serviço de resolução de CAPTCHA para sites adversariais.

CDP pass-through

GET /devtools-url retorna a URL do WebSocket, a API HTTP do DevTools e a UI frontend. O código existente em Puppeteer ou Playwright continua funcionando — conecte, não reescreva.

Proxy & DoH

Proxies SOCKS5, SOCKS5h, HTTP e HTTPS com autenticação e listas de bypass. DNS-over-HTTPS via Cloudflare ativado por padrão. QUIC/HTTP3 disponível por instância.

Canais do Chromium

Fixe qualquer build do Chromium — string de versão completa, versão principal ou canal (stable / beta / dev / canary). Firefox também suportado via browser=firefox.

Buffers circulares de depuração

Últimas 500 entradas de console e 500 entradas de rede por instância, além de histórico de navegação persistente com endpoints de consulta e exclusão. Sem necessidade de conectar uma camada de log externa.

Adicione um browser de verdade ao seu stack

Browser é um dos serviços do Hoody Kit incluídos em todo contêiner. Sem instalação de driver, sem scaffolding do Puppeteer, sem patches de fingerprint. Comece com uma URL.

Ler a Documentação