Automacao Cdp

← início

🤖 Automação de Navegador em Segundo Plano (CDP)

Como operar sites logados sem roubar o foco da máquina (útil quando o usuário está

trabalhando em outro app, ou para rodar verificações automáticas).

Arquitetura

┌──────────────────────┐   WebSocket (CDP)   ┌───────────────────────────┐

│ cdp.mjs (Node puro) │ ──────────────────► │ Chrome headless :9222 │

│ nav/click/type/shot │ │ perfil: /tmp/.../cdp-... │

└──────────────────────┘ │ (cookies copiados!) │

└───────────────────────────┘

1. Subir o Chrome "invisível"

# (opcional, uma vez) copiar a sessão do perfil real para o novo perfil

mkdir -p /tmp/opencode/cdp-profile/Default

cp -a ~/.config/google-chrome/Default/Cookies /tmp/opencode/cdp-profile/Default/

cp -a "$HOME/.config/google-chrome/Local State" /tmp/opencode/cdp-profile/

cp -a ~/.config/google-chrome/Default/Preferences /tmp/opencode/cdp-profile/Default/

subir o Chrome headless com CDP

google-chrome --headless=new --remote-debugging-port=9222 \

--user-data-dir=/tmp/opencode/cdp-profile \

--no-first-run --no-default-browser-check \

--disable-background-timer-throttling --disable-renderer-backgrounding \

--disable-backgrounding-occluded-windows \

--window-size=1920,1020 about:blank &

verificar

curl -s http://127.0.0.1:9222/json/version

Dica: o perfil copiado herda os cookies → a sessão já vem autenticada
(sem precisar de senha). Em contas com keyring, a chave é a mesma do usuário.

2. Usar o script

node cdp.mjs nav "https://site" 10000    # navegar (espera 10s)

node cdp.mjs url # URL atual

node cdp.mjs eval "document.title" # rodar JS (retorna valor)

node cdp.mjs click 500 300 # clicar (coordenadas CSS)

node cdp.mjs type "texto" # digitar texto

node cdp.mjs key ctrl+shift+p # tecla/combo (ctrl+a, tab, enter, escape...)

node cdp.mjs shot print.png # screenshot (PNG)

Seleção de aba (quando há mais de uma):

T=applicationstudio node cdp.mjs shot ide.png   # escolhe a aba cuja URL contém "applicationstudio"

3. Limites conhecidos

LimiteDetalhe
Workbench SAP (BAS/Build Code)Roda em iframes que ignoram eventos sintéticos (CDP e XTEST). Testado com Emulation.setFocusEmulationEnabled e sem device metrics override.
SPA pesadasPrimeira carga pode travar o renderer no headless (aguardar/recarregar)
KeyringSe o Chrome usar keyring bloqueado, os cookies copiados não decifram

4. Bônus: login SSO do Cloud Foundry sem interação

# 1) navegar para a página de passcode (o navegador já está logado)

node cdp.mjs nav "https://login.cf.us10-001.hana.ondemand.com/passcode" 12000

2) clicar na conta e ler o código

node cdp.mjs click <x> <y>

node cdp.mjs eval "document.body.innerText" # → "Temporary Authentication Code \n XXXXX"

3) usar no cf

cf login -a https://api.cf.us10-001.hana.ondemand.com --sso-passcode <CODIGO>

Isso permitiu renovar a sessão do cf sem depender de ação humana.

5. Alternativas quando o CDP não serve