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.
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.
// 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// Puppeteer: the same connectUrl
const browser = await puppeteer.connect({ browserWSEndpoint: connectUrl, defaultViewport: null });# 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:
{
"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
- Conecte-se, nunca faça launch. Use
connectOverCDPoupuppeteer.connectcom aconnectUrl; já ochromium.launch()inicia um navegador na sua própria máquina. - 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. - 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.
- 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.enablelonge da própria página, então um driver modificado como o Patchright é opcional, e não necessário. - 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.
- Sempre encerre. Feche o navegador num
finallye ajustemaxGbeidleTimeoutSecao trabalho, para que um bug não deixe um navegador rodando às custas do seu saldo. - 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.