Browser Automation — Claude Code skill: what it does, how to install
This skill drives browser workflows with Puppeteer or Playwright, from form filling and page checks to scraping, screenshots, and PDF capture.
npx skills add claude-office-skills/skills --skill browser-automation -a claude-codeWhat Browser Automation does
Browser Automation gives an agent structured browser actions: open a URL, wait for a selector, click controls, enter text, choose values, and upload files. It can pull text, collections, and table data, then save screenshots or PDF files. Inputs can include URLs, selectors, actions, and scripts.
The included patterns cover form flows, paginated scraping, and end-to-end checks with assertions. The skill exposes MCP tools from browser-mcp, including browser_navigate, browser_click, browser_type, and browser_screenshot. Selectors have to match the target page. In the scraping example, pagination is capped with max_pages: 10, so that value needs adjustment for the site being processed.
What it helps with
- fill out and submit a web form
- extract records from pages by selector
- check a user registration flow in a browser
- capture a page as a PDF or screenshot
- follow pagination and save the result as JSON
Example prompts for the agent
- Open
https://example.com, wait for.content, and extract the text from.article-content. - Fill in
https://app.example.com/login, clickbutton[type="submit"], and verify that navigation completes. - Collect product cards as JSON using
.product-name,.price, and the link found in thehrefattribute.
How to install Browser Automation
1Skills CLI (Vercel)
npx skills add claude-office-skills/skills --skill browser-automation -a claude-code2Manually: put the files in place
~/.claude/skills/browser-automation/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/browser-automation/
1Skills CLI (Vercel)
npx skills add claude-office-skills/skills --skill browser-automation -a codex2Manually: put the files in place
.agents/skills/browser-automation/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add claude-office-skills/skills --skill browser-automation -a cursor2Manually: put the files in place
.cursor/skills/browser-automation/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install claude-office-skills/skills browser-automation2Manually: put the files in place
.github/skills/browser-automation/SKILL.md1Skills CLI (Vercel)
npx skills add claude-office-skills/skills --skill browser-automation -a gemini-cli2Platform CLI
gemini skills install https://github.com/claude-office-skills/skills --path browser-automationManually: put the files in place
.devin/skills/browser-automation/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add claude-office-skills/skills --skill browser-automation -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about Browser Automation
How do I install Browser Automation in Claude Code?
Run npx skills add claude-office-skills/skills --skill browser-automation -a claude-code, then check ~/.claude/skills/browser-automation/SKILL.md.
What does Browser Automation do?
The skill lets an agent control browser pages, extract content, capture screenshots, and describe test flows. Its examples cover forms, scraping, PDFs, and end-to-end checks.
What does a browser workflow need as input?
A workflow can use URLs, selectors, actions, or scripts. Page operations include navigation, clicking, typing, selecting values, and file uploads.
Source text
SKILL.md · MIT
---
name: Browser Automation
description: Automate web browser interactions, scraping, testing, and workflow automation with Puppeteer/Playwright
version: 1.0.0
author: Claude Office Skills
category: automation
tags:
- browser
- puppeteer
- playwright
- scraping
- testing
department: engineering
models:
- claude-3-opus
- claude-3-sonnet
- gpt-4
mcp:
server: browser-mcp
tools:
- browser_navigate
- browser_click
- browser_type
- browser_screenshot
capabilities:
- Page navigation
- Element interaction
- Data extraction
- Screenshot capture
input:
- URLs
- Selectors
- Actions
- Scripts
output:
- Extracted data
- Screenshots
- Test results
- Automation logs
languages:
- en
related_skills:
- web-search
- deep-research
- etl-pipeline
---
# Browser Automation
Automate web browser interactions for scraping, testing, and workflow automation.
## Core Capabilities
### Navigation
```yaml
navigation:
goto:
url: "https://example.com"
wait_until: "networkidle"
timeout: 30000
actions:
- wait_for_selector: ".content"
- scroll_to_bottom: true
- wait_for_navigation: true
```
### Element Interaction
```yaml
interactions:
click:
selector: "button.submit"
options:
click_count: 1
delay: 100
type:
selector: "input[name='email']"
text: "[email protected]"
options:
delay: 50 # Human-like typing
select:
selector: "select#country"
value: "US"
file_upload:
selector: "input[type='file']"
files: ["document.pdf"]
```
### Data Extraction
```yaml
scraping:
extract_text:
selector: ".article-content"
extract_all:
selector: ".product-card"
fields:
name: ".product-name"
price: ".price"
url:
selector: "a"
attribute: "href"
extract_table:
selector: "table.data"
output: json
```
### Screenshots & PDF
```yaml
capture:
screenshot:
path: "screenshot.png"
full_page: true
type: "png"
pdf:
path: "page.pdf"
format: "A4"
print_background: true
```
## Workflow Examples
### Form Automation
```javascript
// Login and fill form
await page.goto('https://app.example.com/login');
await page.fill('#email', '[email protected]');
await page.fill('#password', 'securepass');
await page.click('button[type="submit"]');
await page.waitForNavigation();
// Navigate to form
await page.click('a[href="/new-entry"]');
await page.fill('#title', 'Automated Entry');
await page.fill('#description', 'Created via automation');
await page.click('button.submit');
```
### Web Scraping
```yaml
scraping_workflow:
- navigate: "https://news.example.com"
- wait: ".article-list"
- extract_all:
selector: ".article"
fields:
title: "h2"
summary: ".excerpt"
link:
selector: "a"
attribute: "href"
- paginate:
next_button: ".pagination .next"
max_pages: 10
- output: "articles.json"
```
### E2E Testing
```yaml
test_workflow:
- name: "User Registration"
steps:
- goto: "/register"
- fill:
"#email": "[email protected]"
"#password": "Test123!"
- click: "button[type='submit']"
- assert:
selector: ".success-message"
text_contains: "Welcome"
```
## Best Practices
1. **Wait Strategies**: Use proper waits
2. **Error Handling**: Catch navigation failures
3. **Rate Limiting**: Be respectful to servers
4. **Headless Mode**: Use for production
5. **Selectors**: Prefer data-testid attributes
6. **Screenshots**: Capture on failures
© Claude Office Skills · MIT · claude-office-skills/skills