O que é o Protocolo DevTools do Chrome (CDP)?
Senior Web Scraping Engineer
TL;DR:
- O Protocolo DevTools do Chrome (CDP) é o protocolo que permite que ferramentas externas instrumentem, inspecionem, depurem e perfilam navegadores baseados em Chromium. O próprio DevTools do Chrome se comunica com o navegador através do CDP, assim como Puppeteer, Playwright e chromedp.
- O CDP é organizado em domínios. Cada domínio —
Page,Network,DOM,Runtime,Target,Browser,Inpute mais de 60 outros — define os comandos que aceita e os eventos que emite. - O transporte é mensagens JSON sobre um WebSocket. Um cliente envia um comando como um objeto JSON com um
id, ummethodeparams; o navegador responde com um resultado correspondente e transmite eventos à medida que acontecem. - Ele vem em duas versões. A versão tip-of-tree (
tot) muda frequentemente sem garantia de compatibilidade; a versão estável1.3(do Chrome 64) é um subconjunto suportado. - O CDP é como a automação moderna se conecta a um navegador — incluindo os remotos. Aponte um cliente CDP para um ponto de extremidade WebSocket e ele controla esse navegador, onde quer que esteja rodando.
- O Navegador de Scraping sem Resíduos é um ponto de extremidade CDP. Puppeteer, Playwright ou chromedp conectam-se a uma URL WebSocket e operam contra o verdadeiro Chromium na nuvem, inalterado.
- Gratuito para começar. Novas contas Scrapeless incluem tempo de execução gratuito do Navegador de Scraping — registre-se em app.scrapeless.com.
Introdução: a linguagem que a automação fala ao Chrome
O Protocolo DevTools do Chrome é a interface que um navegador expõe para que ferramentas externas possam controlá-lo e observá-lo. Quando você abre o painel DevTools do Chrome e observa requisições de rede ou passa por códigos JavaScript, o painel não está acessando o navegador diretamente — ele está enviando comandos CDP e recebendo eventos CDP através de uma conexão. Cada biblioteca de automação de navegador construída sobre o Chromium usa o mesmo protocolo por baixo.
Isso é importante para scraping e testes porque o CDP é o que permite que um script faça o que um humano com DevTools pode fazer: navegar, ler o DOM após a renderização, interceptar requisições, capturar capturas de tela e avaliar JavaScript na página. Este guia explica o que é o CDP, como seus domínios e mensagens funcionam e por que um ponto de extremidade CDP é exatamente o que você se conecta quando controla um navegador na nuvem.
O que é o CDP, precisamente
O Protocolo DevTools do Chrome permite que ferramentas instrumentem, inspecionem, depurem e perfilam Chromium, Chrome e outros navegadores baseados em Blink. É uma interface de controle remoto para os internos do navegador, mantida pela equipe do DevTools do Chrome. A definição oficial do protocolo lista todos os domínios, comandos e eventos, e o navegador expõe a mesma definição em seu ponto de extremidade /json/protocol/.
O CDP não é uma ferramenta de scraping por si só — é a camada abaixo das ferramentas. Puppeteer, Playwright, chromedp e Lighthouse todos traduzem suas chamadas de nível superior em comandos CDP, que é por isso que podem controlar qualquer navegador que o suporte.
Como o CDP é organizado: domínios, comandos e eventos
O CDP divide a superfície do navegador em domínios, e cada domínio possui um conjunto de comandos e eventos. Existem mais de 60 domínios; os que um scraper mais toca são um pequeno subconjunto:
| Domínio | O que controla |
|---|---|
Page |
navegação, ciclo de vida, capturas de tela, print-to-PDF |
Network |
requisições, respostas, cabeçalhos, interceptação |
DOM |
a árvore do documento, nós, atributos |
Runtime |
avaliando JavaScript no contexto da página |
Target |
abas, frames e criação de novos contextos de navegador |
Input |
eventos sintéticos de mouse, teclado e toque |
Browser |
ações em nível de navegador e gerenciamento de janelas |
Um comando é uma solicitação que você envia a um domínio (por exemplo, Page.navigate). Um evento é uma mensagem que o navegador envia a você quando algo acontece (por exemplo, Network.responseReceived). Uma chamada de alto nível como page.goto() do Puppeteer é um comando Page.navigate mais uma espera por eventos de ciclo de vida abaixo.
O transporte: mensagens JSON sobre um WebSocket
A comunicação CDP é composta por objetos JSON serializados de uma estrutura fixa, transportados por uma conexão WebSocket. Um cliente conecta-se ao WebSocket de depuração do navegador, trocando mensagens definidas pelo formato de dados JSON.
Um comando transporta um id, um method que nomeia o domínio e o comando, e um objeto params:
json
// Comando enviado ao navegador
{ "id": 1, "method": "Page.navigate", "params": { "url": "https://example.com" } }
// Resultado retornado com o id correspondente
{ "id": 1, "result": { "frameId": "…", "loaderId": "…" } }
// Um evento enviado pelo navegador (sem id)
{ "method": "Page.loadEventFired", "params": { "timestamp": 12345.6 } }
O id correlaciona um resultado com o comando que o produziu; eventos chegam sem um id porque o navegador os emite de acordo com sua própria programação. Um cliente normalmente abre o WebSocket, ativa os domínios que lhe interessam (Network.enable, Page.enable), e então intercala comandos e eventos pelo resto da sessão.
Versões do protocolo: ponta de árvore e estável
O CDP é disponibilizado em duas vertentes. A versão ponta de árvore (tot) acompanha o Chromium mais recente e muda frequentemente, sem garantia de compatibilidade retroativa. A versão estável 1.3, introduzida no Chrome 64, é um subconjunto suportado que ferramentas podem mirar para estabilidade. Uma superfície separada v8-inspector expõe o mesmo estilo de protocolo para depuração e perfilamento do Node.js. A maioria das bibliotecas de automação se vincula a uma versão do Chromium e usa o protocolo correspondente, que é o motivo pelo qual uma biblioteca e uma versão do navegador são esperadas para se movimentar juntas.
O que usa o CDP
O CDP é a base compartilhada sob um amplo conjunto de ferramentas:
- Chrome DevTools — o painel no navegador é um cliente do CDP.
- Puppeteer — conecta-se via CDP por padrão.
- Playwright — controla o Chromium via CDP (e implementa seus próprios protocolos para Firefox e WebKit).
- chromedp — uma biblioteca Go que fala diretamente com o CDP.
- Lighthouse — coleta dados de desempenho e auditoria via CDP.
Como todos eles falam o mesmo protocolo, qualquer um deles pode se conectar a um navegador que não lançou — desde que esse navegador exponha um ponto de extremidade do CDP. O emergente padrão de múltiplos navegadores, WebDriver BiDi, é construído sobre o mesmo modelo bidirecional de comando e evento que o CDP pioneiro.
CDP e navegadores na nuvem
Um ponto de extremidade do CDP não precisa estar na sua máquina. Como o protocolo roda sobre um WebSocket, um cliente pode se conectar a um navegador que está rodando em qualquer lugar — que é exatamente como um navegador na nuvem funciona. O Scrapeless Scraping Browser expõe um ponto de extremidade do CDP em uma única URL de WebSocket, então um cliente CDP se conecta ao verdadeiro Chromium na nuvem em vez de a uma versão local:
- Puppeteer conecta-se com
puppeteer.connect({ browserWSEndpoint }). - Playwright conecta-se com
chromium.connectOverCDP(). - chromedp conecta-se com
NewRemoteAllocator.
O código não muda; apenas o ponto de extremidade se move. O navegador roda na nuvem com uma verdadeira impressão digital do Chromium e saída residencial, e sua biblioteca que fala CDP o controla exatamente como faria com um navegador local.
O mesmo ponto de extremidade também responde a alguns domínios além do protocolo padrão — Captcha.* para detecção e resolução de CAPTCHA, Agent.* para cliques e digitação simulados — documentados na referência da API CDP do Scrapeless. Um cliente que já fala CDP pode chamar esses da mesma forma que chama Page.navigate.
Obtenha sua chave de API no plano gratuito em app.scrapeless.com.
Obtenha sua chave de API no plano gratuito: app.scrapeless.com
Conclusão: um protocolo sob cada ferramenta do Chromium
O CDP é a camada comum sob a automação do navegador: um conjunto de domínios, trocados como comandos e eventos JSON sobre um WebSocket, que permite a uma ferramenta controlar e observar um navegador Chromium. Compreendê-lo explica por que Puppeteer, Playwright e chromedp parecem semelhantes por baixo, por que uma biblioteca e uma versão do navegador viajam juntas, e por que conectar-se a um navegador remoto é tão simples quanto apontar para uma URL de WebSocket diferente. Para um exemplo prático de como controlar um navegador na nuvem via CDP a partir do Python, consulte o guia de scraper de produção do Scrapling e compare planos na página de preços do Scrapeless.
Pronto para controlar um navegador na nuvem via CDP?
Junte-se à nossa comunidade para reivindicar um plano gratuito e se conectar com desenvolvedores que estão construindo automação baseada em CDP: Discord · Telegram.
Registre-se em app.scrapeless.com para obter o tempo de execução gratuito do Scraping Browser e aponte seu cliente CDP para um navegador em nuvem através de um URL WebSocket.
FAQ
P: CDP é o mesmo que WebDriver?
Não. CDP é o próprio protocolo de baixo nível e bidirecional do Chromium (comandos e eventos através de um WebSocket); o WebDriver clássico é um protocolo HTTP de solicitação-resposta padronizado pelo W3C. O novo padrão WebDriver BiDi traz um modelo bidirecional estilo CDP entre navegadores.
P: Eu uso CDP diretamente quando escrevo um scraper?
Normalmente não. Você usa uma biblioteca — Puppeteer, Playwright ou chromedp — que traduz suas chamadas em comandos CDP. Você só recorre ao CDP bruto para capacidades que uma biblioteca não expõe.
P: Playwright usa CDP?
Para o Chromium, sim. Playwright controla o Chromium via CDP; para Firefox e WebKit, usa seus próprios protocolos, razão pela qual alguns recursos específicos do CDP são exclusivos do Chromium.
P: Como uma ferramenta se conecta a um navegador via CDP?
O navegador expõe um URL WebSocket de depuração. O cliente abre esse WebSocket e troca comandos e eventos JSON. Um navegador em nuvem como o Scrapeless fornece esse URL WebSocket diretamente, para que o mesmo cliente se conecte a um navegador remoto.
P: Qual é a diferença entre tip-of-tree e CDP estável?
Tip-of-tree acompanha o Chromium mais recente e pode mudar sem aviso; 1.3 estável (do Chrome 64) é um subconjunto fixo do qual as ferramentas podem depender. As bibliotecas geralmente fixam em uma versão de build do Chromium e na versão do protocolo que a acompanha.
Na Scorretless, acessamos apenas dados disponíveis ao público, enquanto cumprem estritamente as leis, regulamentos e políticas de privacidade do site aplicáveis. O conteúdo deste blog é apenas para fins de demonstração e não envolve atividades ilegais ou infratoras. Não temos garantias e negamos toda a responsabilidade pelo uso de informações deste blog ou links de terceiros. Antes de se envolver em qualquer atividade de raspagem, consulte seu consultor jurídico e revise os termos de serviço do site de destino ou obtenha as permissões necessárias.



