Communitygithub.com

Habilidade de Navegador Dev

Automação de navegador com estado de página persistente. Use quando os usuários solicitarem navegar em sites, preencher formulários, tirar capturas de tela, extrair dados da web, testar aplicativos web ou automatizar fluxos de trabalho no navegador.

O que é Habilidade de Navegador Dev?

Esta habilidade fornece automação de navegador baseada em Playwright, com foco em scripts pequenos e incrementais que mantêm o estado da página entre execuções. Os agentes podem navegar em sites, preencher formulários, tirar capturas de tela, extrair dados e testar aplicações web de forma eficiente. Suporta dois modos de operação: Modo Independente (que inicia um novo navegador Chromium) e Modo de Extensão (que se conecta ao navegador Chrome existente do usuário, permitindo automação atrás de logins e ambientes autenticados). Os usuários podem descobrir elementos dinamicamente usando capturas de acessibilidade (getAISnapshot) ou escrever seletores diretamente quando o código-fonte é acessível. O fluxo de trabalho segue um ciclo de escrever um script, executá-lo, avaliar o estado e repetir até a tarefa ser concluída — ideal para cenários como scraping de dados, testes de sites e automação transacional.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/David-Li0406/meta-skill-evloving/tree/HEAD/AgentSkillOS/data/skill_seeds/dev-browser

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

O que Habilidade de Navegador Dev faz?

Automação de navegador que mantém o estado da página entre execuções de script. Escreva scripts pequenos e focados para realizar tarefas incrementalmente. Depois de ter validado parte de um fluxo de trabalho e houver trabalho repetitivo a ser feito, você pode escrever um script para realizar o trabalho repetitivo em uma única execução.

Escolhendo Sua Abordagem

  • Sites locais/com código-fonte disponível: Leia o código-fonte primeiro para escrever seletores diretamente
  • Layouts de página desconhecidos: Use getAISnapshot() para descobrir elementos e selectSnapshotRef() para interagir com eles
  • Feedback visual: Tire capturas de tela para ver o que o usuário vê

Configuração

Dois modos disponíveis. Pergunte ao usuário se não estiver claro qual usar.

Modo Independente (Padrão)

Inicia um novo navegador Chromium para sessões de automação novas.

./skills/dev-browser/server.sh &

Adicione a flag --headless se o usuário solicitar. Aguarde a mensagem Ready antes de executar scripts.

Modo de Extensão

Conecta-se ao navegador Chrome existente do usuário. Use quando:

  • O usuário já está logado em sites e deseja que você execute ações atrás de uma experiência autenticada que não seja de desenvolvimento local.
  • O usuário solicita que você use a extensão

Importante: O fluxo principal permanece o mesmo. Você cria páginas nomeadas dentro do navegador deles.

Inicie o servidor relay:

cd skills/dev-browser && npm i && npm run start-extension &

Aguarde a mensagem Waiting for extension to connect... seguida de Extension connected no console. Isso indica que um cliente se conectou e o navegador está pronto para ser controlado. Fluxo de trabalho:

  1. Scripts chamam client.page("nome") como no modo normal para criar novas páginas / conectar-se a páginas existentes.
  2. A automação é executada na sessão real do navegador do usuário

Se a extensão ainda não tiver se conectado, informe ao usuário para iniciá-la e ativá-la. Link para download: https://github.com/SawyerHood/dev-browser/releases

Escrevendo Scripts

Execute todos os scripts a partir do diretório skills/dev-browser/. O alias de importação @/ requer a configuração deste diretório.

Execute scripts inline usando heredocs:

cd skills/dev-browser && npx tsx <<'EOF'
import { connect, waitForPageLoad } from "@/client.js";

const client = await connect();
// Cria página com tamanho de viewport personalizado (opcional)
const page = await client.page("exemplo", { viewport: { width: 1920, height: 1080 } });

await page.goto("https://exemplo.com");
await waitForPageLoad(page);

console.log({ titulo: await page.title(), url: page.url() });
await client.disconnect();
EOF

Escreva em arquivos tmp/ apenas quando o script precisar ser reutilizado, for complexo, ou o usuário solicitar explicitamente.

Princípios Chave

  1. Scripts pequenos: Cada script faz UMA coisa (navegar, clicar, preencher, verificar)
  2. Avalie o estado: Registre/retorne o estado no final para decidir os próximos passos
  3. Nomes de página descritivos: Use "checkout", "login", não "principal"
  4. Desconecte para sair: await client.disconnect() - as páginas persistem no servidor
  5. JS puro no evaluate: page.evaluate() é executado no navegador - sem sintaxe TypeScript

Ciclo de Fluxo de Trabalho

Siga este padrão para tarefas complexas:

  1. Escreva um script para realizar uma ação
  2. Execute-o e observe a saída
  3. Avalie - funcionou? Qual é o estado atual?
  4. Decida - a tarefa está concluída ou precisamos de outro script?
  5. Repita até a tarefa ser finalizada

Sem TypeScript no Contexto do Navegador

O código passado para page.evaluate() é executado no navegador, que não entende TypeScript:

// ✅ Correto: JavaScript puro
const texto = await page.evaluate(() => {
  return document.body.innerText;
});

// ❌ Errado: a sintaxe TypeScript falhará em tempo de execução
const texto = await page.evaluate(() => {
  const el: HTMLElement = document.body; // Anotação de tipo quebra no navegador!
  return el.innerText;
});

Extraindo Dados

Para extrair grandes conjuntos de dados, intercepte e reproduza requisições de rede em vez de percorrer o DOM. Consulte references/scraping.md para o guia completo sobre captura de requisições, descoberta de esquemas e reprodução de APIs paginadas.

API do Cliente

const client = await connect();

// Obtém ou cria página nomeada (viewport se aplica apenas a páginas novas)
const page = await client.page("nome");
const pageComTamanho = await client.page("nome", { viewport: { width: 1920, height: 1080 } });

const pages = await client.list(); // Lista todos os nomes de páginas
await client.close("nome"); // Fecha uma página
await client.disconnect(); // Desconecta (páginas persistem)

// Métodos de captura ARIA
const snapshot = await client.getAISnapshot("nome"); // Obtém árvore de acessibilidade
const element = await client.selectSnapshotRef("nome", "e5"); // Obtém elemento por referência

O objeto page é uma Página padrão do Playwright.

Aguardando

import { waitForPageLoad } from "@/client.js";

await waitForPageLoad(page); // Após navegação
await page.waitForSelector(".resultados"); // Para elementos específicos
await page.waitForURL("**/sucesso"); // Para URL específica

Inspecionando o Estado da Página

Capturas de Tela

await page.screenshot({ path: "tmp/screenshot.png" });
await page.screenshot({ path: "tmp/full.png", fullPage: true });

Captura ARIA (Descoberta de Elementos)

Use getAISnapshot() para descobrir elementos da página. Retorna árvore de acessibilidade em formato YAML:

- banner:
  - link "Hacker News" [ref=e1]
  - navigation:
    - link "new" [ref=e2]
- main:
  - list:
    - listitem:
      - link "Título do Artigo" [ref=e8]
      - link "328 comentários" [ref=e9]
- contentinfo:
  - textbox [ref=e10]
    - /placeholder: "Pesquisar"

Interpretando refs:

  • [ref=eN] - Referência de elemento para interação (apenas elementos visíveis e clicáveis)
  • [checked], [disabled], [expanded] - Estados do elemento
  • [level=N] - Nível de cabeçalho
  • /url:, /placeholder: - Propriedades do elemento

Interagindo com refs:

const snapshot = await client.getAISnapshot("hackernews");
console.log(snapshot); // Encontre a ref necessária

const element = await client.selectSnapshotRef("hackernews", "e2");
await element.click();

Recuperação de Erros

O estado da página persiste após falhas. Depure com:

cd skills/dev-browser && npx tsx <<'EOF'
import { connect } from "@/client.js";

const client = await connect();
const page = await client.page("hackernews");

await page.screenshot({ path: "tmp/debug.png" });
console.log({
  url: page.url(),
  titulo: await page.title(),
  textoCorpo: await page.textContent("body").then((t) => t?.slice(0, 200)),
});

await client.disconnect();
EOF

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

David-Li0406/meta-skill-evloving

Create technical diagrams using Mermaid syntax for architecture, sequences, ERDs, flowcharts, and state machines. Use for visualizing system design, data flows, and processes. Triggers: diagram, mermaid, architecture diagram, sequence diagram, flowchart, ERD, entity relationship, state diagram, C4 model, component diagram, visualize, draw.

David-Li0406/meta-skill-evloving

Comprehensive document creation, editing, and analysis with support for tracked changes, comments, formatting preservation, and text extraction. When Claude needs to work with professional documents (.docx files) for: (1) Creating new documents, (2) Modifying or editing content, (3) Working with tracked changes, (4) Adding comments, or any other document tasks

David-Li0406/meta-skill-evloving

Complete color manipulation and green screen effects system. PROACTIVELY activate for: (1) Green screen/chromakey removal, (2) Color grading with LUTs, (3) Color correction (levels, curves, white balance), (4) Colorkey/color removal effects, (5) Hue/saturation manipulation, (6) Color space conversions (BT.709, BT.2020, HDR), (7) Color isolation effects, (8) Teal and orange look, (9) Vintage/film looks, (10) Color keying for transparency. Provides: chromakey and colorkey filters, LUT application (lut3d), curves and levels adjustment, color balance, selective color manipulation, color space handling, HDR tone mapping, professional color grading chains.

David-Li0406/meta-skill-evloving

Convert files and office documents to Markdown. Supports PDF, DOCX, PPTX, XLSX, images (with OCR), audio (with transcription), HTML, CSV, JSON, XML, ZIP, YouTube URLs, EPubs and more.

David-Li0406/meta-skill-evloving

Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node/TypeScript (MCP SDK).

David-Li0406/meta-skill-evloving

Build with OpenAI's stateless APIs - Chat Completions (GPT-5, GPT-4o), Embeddings, Images (DALL-E 3), Audio (Whisper + TTS), and Moderation. Includes Node.js SDK and fetch-based approaches for Cloudflare Workers. Use when: implementing chat completions with GPT-5/GPT-4o, streaming responses with SSE, using function calling/tools, creating structured outputs with JSON schemas, generating embeddings for RAG (text-embedding-3-small/large), generating images with DALL-E 3, editing images with GPT-Image-1, transcribing audio with Whisper, synthesizing speech with TTS (11 voices), moderating content (11 safety categories), or troubleshooting rate limits (429), invalid API keys (401), function calling failures, streaming parse errors, embeddings dimension mismatches, or token limit exceeded.

David-Li0406/meta-skill-evloving

Comprehensive PDF manipulation toolkit for extracting text and tables, creating new PDFs, merging/splitting documents, and handling forms. When Claude needs to fill in a PDF form or programmatically process, generate, or analyze PDF documents at scale.

David-Li0406/meta-skill-evloving

Presentation creation, editing, and analysis. When Claude needs to work with presentations (.pptx files) for: (1) Creating new presentations, (2) Modifying or editing content, (3) Working with layouts, (4) Adding comments or speaker notes, or any other presentation tasks

David-Li0406/meta-skill-evloving

Comprehensive spreadsheet creation, editing, and analysis with support for formulas, formatting, data analysis, and visualization. When Claude needs to work with spreadsheets (.xlsx, .xlsm, .csv, .tsv, etc) for: (1) Creating new spreadsheets with formulas and formatting, (2) Reading or analyzing data, (3) Modify existing spreadsheets while preserving formulas, (4) Data analysis and visualization in spreadsheets, or (5) Recalculating formulas

David-Li0406/meta-skill-evloving

Download YouTube videos with customizable quality and format options. Use this skill when the user asks to download, save, or grab YouTube videos. Supports various quality settings (best, 1080p, 720p, 480p, 360p), multiple formats (mp4, webm, mkv), and audio-only downloads as MP3.

David-Li0406/meta-skill-evloving

Best practices for Remotion - Video creation in React

David-Li0406/meta-skill-evloving

Provides bidirectional translation (Chinese/English), grammar checking, and sentence polishing. Supports specific tense constraints, context-aware tone adjustment, and natural expression optimization. Outputs direct text without formatting.

David-Li0406/meta-skill-evloving

指导如何通过自定义注解(如@Unicom)标识Dubbo接口,利用BeanDefinitionRegistryPostProcessor在启动时扫描并动态注册ReferenceBean,实现RPC调用的封装。

David-Li0406/meta-skill-evloving

生成Python脚本,利用FFmpeg将图片序列按3x3布局合并,或将合并图拆分。要求使用subprocess模块执行命令,并支持用户交互式输入路径。

David-Li0406/meta-skill-evloving

SOP for extracting and analyzing promotional activity details, handling time formatting, location mapping, payment logic, and step-by-step process validation.

David-Li0406/meta-skill-evloving

Specializes in creating TikTok short video scripts using an anthropomorphic 'Chef' perspective to explain wildlife food chains and survival environments, utilizing real field footage.

David-Li0406/meta-skill-evloving

针对TikTok平台,以拟人化视角(如动物作为厨师)创作系列短视频脚本。重点介绍野生动物、食物链及生态环境,要求使用野外实拍素材,风格幽默且具有教育意义。

David-Li0406/meta-skill-evloving

Generates KWL (Know, Want to know, Learned) charts for educational videos, specifically BrainPOP, using simple 7th-grade language and short, concise bullet points.

David-Li0406/meta-skill-evloving

Develops DAX measures to calculate promo and regular volumes and generates a calculated table of dates excluding continuous promo date ranges, handling multiple periods and nulls.

David-Li0406/meta-skill-evloving

Tracks complex, multi-session work using the Beads issue tracker and dependency graphs, and provides persistent memory that survives conversation compaction. Use when work spans multiple sessions, has complex dependencies, or needs persistent context across compaction cycles. Trigger with phrases like "create task for", "what's ready to work on", "show task", "track this work", "what's blocking", or "update status".

Habilidades Relacionadas