ae39e45460
NOVAS SKILLS: - next-best-practices v0.1.0 (CLEAN) — Next.js App Router, RSC, caching, data - nextjs-patterns v1.0.0 (CLEAN) — Next.js 15: Server Actions, route handlers - vite v1.0.0 (CLEAN) — env vars, aliases, proxy, CJS compat - uncle-bob v1.0.0 (CLEAN) — Clean Code, SOLID, Clean Architecture - clean-code-review v1.0.0 (CLEAN) — naming, guard clauses, anti-patterns, refactoring - vue v1.0.0 (CLEAN) — Vue framework - vue-composition-api-best-practices v1.0.0 (CLEAN) — composables, Pinia, reactivity BIBLIOTECA INTELIGENTE libs/ (10 dominios, 11 arquivos): - typescript/ — TS safe + generics gotchas - react/ — Next.js App Router + Vite config - vue/ — Composition API + Pinia - linux/ — System diagnostic cheatsheet - database/ — PostgreSQL + MySQL patterns - browser/ — Chromium CLI + E2E testing - security/ — SAST audit (OWASP Top 10) - best-practices/ — Clean Code + SOLID + Clean Architecture - deploy/ — Docker multi-stack + OpenClaw ops - + INDEX.md como guia de navegacao .learnings/ — LRN-20260519-003 criado (biblioteca compartilhada)
92 lines
2.5 KiB
Markdown
92 lines
2.5 KiB
Markdown
# Browser Automation — Chromium CLI (agent-browser)
|
|
|
|
> CLI headless Chromium para navegação, login, raspagem e screenshots.
|
|
|
|
## Fluxo Padrão
|
|
```bash
|
|
agent-browser open https://exemplo.com/form
|
|
agent-browser snapshot -i # Descobre elementos → @e1, @e2, @e3
|
|
agent-browser fill @e1 "user@exemplo.com"
|
|
agent-browser fill @e2 "senha123"
|
|
agent-browser click @e3
|
|
agent-browser wait --load networkidle
|
|
agent-browser snapshot -i # Re-snapshot após mudança de DOM
|
|
```
|
|
|
|
## Comandos Essenciais
|
|
```bash
|
|
# Navegação
|
|
agent-browser open <url>
|
|
agent-browser close
|
|
|
|
# Snapshot (sempre primeiro)
|
|
agent-browser snapshot -i # Elementos interativos + @refs
|
|
agent-browser snapshot -i -C # + cursor-interactive elements
|
|
|
|
# Interação com @refs
|
|
agent-browser click @e1
|
|
agent-browser fill @e2 "text" # Clear + type
|
|
agent-browser type @e2 "text" # Type sem limpar
|
|
agent-browser select @e1 "option"
|
|
agent-browser check @e1
|
|
agent-browser press Enter
|
|
agent-browser scroll down 500
|
|
agent-browser hover @e1
|
|
|
|
# Extração
|
|
agent-browser get text @e1
|
|
agent-browser get text body > page.txt
|
|
agent-browser get html @e1
|
|
agent-browser get url
|
|
agent-browser get title
|
|
|
|
# Espera
|
|
agent-browser wait @e1
|
|
agent-browser wait --load networkidle
|
|
agent-browser wait --url "**/dashboard"
|
|
|
|
# Captura
|
|
agent-browser screenshot page.png
|
|
agent-browser screenshot --full # Página inteira
|
|
agent-browser pdf relatorio.pdf
|
|
|
|
# Download
|
|
agent-browser download @e1 ./file.pdf
|
|
agent-browser wait --download ./output.zip
|
|
```
|
|
|
|
## 🔐 Login + Persistência de Sessão
|
|
```bash
|
|
# Login
|
|
agent-browser open https://app.exemplo.com/login
|
|
agent-browser fill @e1 "$USERNAME" && agent-browser fill @e2 "$PASSWORD"
|
|
agent-browser click @e3
|
|
agent-browser wait --url "**/dashboard"
|
|
agent-browser state save ~/auth.json # Salva cookies + sessão
|
|
|
|
# Reutilizar
|
|
agent-browser state load ~/auth.json
|
|
agent-browser open https://app.exemplo.com/dashboard
|
|
```
|
|
|
|
## 🔒 Segurança (ambiente)
|
|
```bash
|
|
export AGENT_BROWSER_ALLOWED_DOMAINS="exemplo.com"
|
|
export AGENT_BROWSER_MAX_OUTPUT=50000
|
|
export AGENT_BROWSER_CONTENT_BOUNDARIES=1
|
|
```
|
|
|
|
## ⚠️ Ref Lifecycle
|
|
> Refs (`@e1`, `@e2`) são **invalidados** após qualquer mudança de DOM.
|
|
> Sempre faça `snapshot -i` de novo após:
|
|
> - Cliques que navegam
|
|
> - Submissão de formulário
|
|
> - Conteúdo dinâmico (dropdowns, modais)
|
|
|
|
## Sessões Paralelas
|
|
```bash
|
|
agent-browser --session site1 open https://site-a.com
|
|
agent-browser --session site2 open https://site-b.com
|
|
agent-browser session list
|
|
```
|