| name | playwright-skill |
| description | Browser automation for web tasks. Use when the user needs to automate browser interactions, take screenshots, extract data from websites, fill forms, or perform web scraping. Supports persistent sessions for logged-in state. |
| allowed-tools | Bash, Read |
Playwright Skill - Browser Automation
Automate browser tasks: navigate, click, type, extract data, take screenshots, and more.
First-Time Setup
pip install playwright
playwright install chromium
Core Concepts
Sessions
Sessions persist browser state (cookies, localStorage) across commands. Use named sessions for different accounts/sites:
python3 ~/.claude/skills/playwright-skill/playwright_skill.py open https://example.com
python3 ~/.claude/skills/playwright-skill/playwright_skill.py open https://github.com --session github
Sessions are saved to ~/.claude/skills/playwright-skill/sessions/
Headless vs Visible
By default, browser runs headless (invisible). Use --visible to see what's happening:
python3 ~/.claude/skills/playwright-skill/playwright_skill.py open https://example.com --visible
Commands
Navigation
python3 ~/.claude/skills/playwright-skill/playwright_skill.py open URL [--session NAME] [--visible]
python3 ~/.claude/skills/playwright-skill/playwright_skill.py wait SELECTOR [--timeout MS] [--session NAME]
python3 ~/.claude/skills/playwright-skill/playwright_skill.py scroll [--direction up|down] [--amount PIXELS] [--session NAME]
Interaction
python3 ~/.claude/skills/playwright-skill/playwright_skill.py click SELECTOR [--session NAME]
python3 ~/.claude/skills/playwright-skill/playwright_skill.py type SELECTOR "text to type" [--clear] [--session NAME]
python3 ~/.claude/skills/playwright-skill/playwright_skill.py eval "document.title" [--session NAME]
Data Extraction
python3 ~/.claude/skills/playwright-skill/playwright_skill.py extract SELECTOR [--session NAME]
python3 ~/.claude/skills/playwright-skill/playwright_skill.py extract "a.link" --attr href [--session NAME]
python3 ~/.claude/skills/playwright-skill/playwright_skill.py extract "li.item" --all [--session NAME]
python3 ~/.claude/skills/playwright-skill/playwright_skill.py html [--selector SELECTOR] [--output FILE] [--session NAME]
Screenshots & PDF
python3 ~/.claude/skills/playwright-skill/playwright_skill.py screenshot [--output FILE] [--session NAME]
python3 ~/.claude/skills/playwright-skill/playwright_skill.py screenshot https://example.com --output example.png
python3 ~/.claude/skills/playwright-skill/playwright_skill.py screenshot --full-page --output full.png
python3 ~/.claude/skills/playwright-skill/playwright_skill.py pdf https://example.com --output page.pdf
Cookies & Sessions
python3 ~/.claude/skills/playwright-skill/playwright_skill.py cookies [--session NAME]
python3 ~/.claude/skills/playwright-skill/playwright_skill.py cookies --name session_id [--session NAME]
python3 ~/.claude/skills/playwright-skill/playwright_skill.py cookies --set "name=value" --domain example.com [--session NAME]
python3 ~/.claude/skills/playwright-skill/playwright_skill.py sessions
python3 ~/.claude/skills/playwright-skill/playwright_skill.py close [--session NAME]
python3 ~/.claude/skills/playwright-skill/playwright_skill.py close --all
Selectors
Playwright supports multiple selector types:
python3 ~/.claude/skills/playwright-skill/playwright_skill.py click "button.submit"
python3 ~/.claude/skills/playwright-skill/playwright_skill.py click "#login-form input[type=email]"
python3 ~/.claude/skills/playwright-skill/playwright_skill.py click "text=Sign In"
python3 ~/.claude/skills/playwright-skill/playwright_skill.py click "text=Submit"
python3 ~/.claude/skills/playwright-skill/playwright_skill.py click "xpath=//button[@type='submit']"
python3 ~/.claude/skills/playwright-skill/playwright_skill.py click "form >> text=Submit"
Examples
Login Flow (Manual First Time)
python3 ~/.claude/skills/playwright-skill/playwright_skill.py open https://example.com/login --visible --session mysite
python3 ~/.claude/skills/playwright-skill/playwright_skill.py close --session mysite
python3 ~/.claude/skills/playwright-skill/playwright_skill.py open https://example.com/dashboard --session mysite
Scrape a List
python3 ~/.claude/skills/playwright-skill/playwright_skill.py open https://news.ycombinator.com
python3 ~/.claude/skills/playwright-skill/playwright_skill.py extract ".titleline a" --all
python3 ~/.claude/skills/playwright-skill/playwright_skill.py extract ".titleline a" --attr href --all
Fill a Form
python3 ~/.claude/skills/playwright-skill/playwright_skill.py open https://example.com/form --session formtest
python3 ~/.claude/skills/playwright-skill/playwright_skill.py type "input[name=email]" "user@example.com" --session formtest
python3 ~/.claude/skills/playwright-skill/playwright_skill.py type "input[name=message]" "Hello world" --session formtest
python3 ~/.claude/skills/playwright-skill/playwright_skill.py click "button[type=submit]" --session formtest
Screenshot a Page
python3 ~/.claude/skills/playwright-skill/playwright_skill.py screenshot https://example.com --output example.png --full-page
Run JavaScript
python3 ~/.claude/skills/playwright-skill/playwright_skill.py eval "document.title"
python3 ~/.claude/skills/playwright-skill/playwright_skill.py eval "window.scrollY"
python3 ~/.claude/skills/playwright-skill/playwright_skill.py eval "document.querySelectorAll('a').length"
Output
All commands output JSON for easy parsing.
Requirements
- Python 3.9+
pip install playwright
playwright install chromium
Tips
- First login: Use
--visible to manually log in, then save session for headless reuse
- Flaky selectors: Use
wait command before interacting with dynamic content
- Rate limiting: Add delays between actions with
eval "await new Promise(r => setTimeout(r, 2000))"
- Debugging: Take screenshots to see what went wrong
- Multiple accounts: Use different session names for each account
Security Notes
- Session files contain authentication cookies - keep
sessions/ directory secure
- Don't share session files - they can grant account access
- Clear sessions when done with sensitive sites:
close --session NAME