Pular para o conteúdo

Navegadores hospedados

Inicie um navegador Clearcote nos nossos servidores com uma única chamada de API e controle-o pelo Chrome DevTools Protocol, a partir do Playwright, do Puppeteer ou de qualquer cliente CDP. Nada para instalar nem para rodar por conta própria. Por padrão, o tráfego sai por IPs residenciais, e você paga por GB a partir de um saldo pré-pago.

  • IPs residenciais, não de datacenter. Os sites veem uma conexão de internet doméstica real, de um provedor para consumidores, e não um endereço de hospedagem ou de nuvem.
  • Hardware real, não uma VPS. Os navegadores rodam nos nossos próprios servidores físicos dedicados, e não em máquinas virtuais compartilhadas na nuvem.
Mais sobre navegadores hospedados: um SDK para local e nuvem (launch(cloud=True)), execuções de agente (entra uma tarefa, sai JSON), gravações e a linha do tempo de eventos, sincronização de cookies, segredos e 2FA e transferência para uma pessoa e webhooks.

GrátisGanhe €5 de tráfego grátis ao conectar o GitHub. Sem cartão.

Uma única vez, um por conta do GitHub. A conta do GitHub precisa ter pelo menos 30 dias.

Resgatar €5

1. Obtenha uma chave de API

Crie uma na página API keys. Ela começa com cc_live_ e é enviada como bearer token. Guarde-a em segredo: qualquer pessoa que tiver a chave pode gastar o seu saldo.

2. Inicie um navegador e conecte-se

POST /api/v1/browsers retorna uma connectUrl: uma URL WebSocket de uso único para aquele navegador. Conecte-se em até dois minutos; ela não pode ser usada duas vezes. O navegador inicia assim que você se conecta, geralmente em poucos segundos, mas com um country pode levar até cerca de meio minuto, porque a localização do IP de saída é consultada primeiro. Por padrão, o Playwright desiste após 30 segundos, então os exemplos passam um timeout de dois minutos.

javascript
// Node.js + Playwright
import { chromium } from "playwright";

const res = await fetch("https://www.clearcotelabs.com/api/v1/browsers", {
  method: "POST",
  headers: { authorization: "Bearer cc_live_...", "content-type": "application/json" },
  body: JSON.stringify({ identity: "account-1", country: "us" }),
});
const { connectUrl, id, error } = await res.json();
if (error) throw new Error(error);

const browser = await chromium.connectOverCDP(connectUrl, { timeout: 120_000 }); // the browser starts as you connect
const context = browser.contexts()[0];
const page = context.pages()[0] ?? (await context.newPage());
await page.goto("https://example.com");
await browser.close(); // ends the session
javascript
// Puppeteer: the same connectUrl
const browser = await puppeteer.connect({ browserWSEndpoint: connectUrl, defaultViewport: null });
python
# Python + Playwright
import requests
from playwright.sync_api import sync_playwright

r = requests.post("https://www.clearcotelabs.com/api/v1/browsers",
                  headers={"authorization": "Bearer cc_live_..."},
                  json={"identity": "account-1", "country": "de"}).json()
with sync_playwright() as p:
    browser = p.chromium.connect_over_cdp(r["connectUrl"], timeout=120_000)
    page = browser.contexts[0].new_page()
    page.goto("https://example.com")
    browser.close()

A chamada de criação responde 201 com tudo o que o seu código precisa para se conectar e saber o preço:

json
{
  "id": "bs_…",                       // use it with GET / DELETE /api/v1/browsers/<id>
  "connectUrl": "wss://…/v1/connect/bs_…?token=…",
  "expiresAt": "2026-09-24T10:02:00.000Z", // connect before this (two minutes)
  "worker": "w_…",
  "pricing": { "eurPerGb": 1, "eurPerHour": 0 },
  "limits": { "maxSeconds": 14400, "idleSeconds": 300 } // plus maxBytes when capped
}

Boas práticas

  1. Conecte-se, nunca faça launch. Use connectOverCDP ou puppeteer.connect com a connectUrl; já o chromium.launch() inicia um navegador na sua própria máquina.
  2. Use o que já existe. Pegue browser.contexts()[0] e a primeira página dele em vez de criar um contexto novo: um contexto novo começa sem os cookies e o armazenamento do perfil, e o Playwright dá a ele uma viewport emulada de 1280×720 que não bate com a janela do navegador.
  3. Defina a persona na criação, não pelo script. País, fuso horário e idioma vão na chamada de criação. Sobrescrever o user agent, a viewport ou propriedades do navigator a partir de um script cria exatamente as inconsistências que a detecção procura.
  4. Mantenha os hooks de CDP enxutos. Listeners amplos, interceptação de todas as requisições e init scripts são o fingerprint da própria automação. O Playwright e o Puppeteer originais funcionam como estão, exceto por duas chamadas (setContent e exposeFunction): o motor mantém os efeitos colaterais do Runtime.enable longe da própria página, então um driver modificado como o Patchright é opcional, e não necessário.
  5. Uma sessão, muitas páginas. Iniciar um navegador é a parte lenta; navegue dentro dele. Faça login uma vez com um perfil em vez de fazer a cada execução.
  6. Sempre encerre. Feche o navegador num finally e ajuste maxGb e idleTimeoutSec ao trabalho, para que um bug não deixe um navegador rodando às custas do seu saldo.
  7. Olhe antes de escrever código. Quando um site se comportar de forma estranha, acompanhe-o na visualização ao vivo (ou assuma o controle) antes de adicionar waits e workarounds.