Patchright Skill
by @smallnest
Patchright-based browser automation with bot detection bypass. Use when Claude needs to interact with local web applications, test localhost/dev servers, tak...
clawhub install patchright-skillπ About This Skill
name: patchright-skill description: Patchright-based browser automation with bot detection bypass. Use when Claude needs to interact with local web applications, test localhost/dev servers, take screenshots, or perform UI interactions on private networks. Ideal for QA automation, frontend debugging, E2E testing, and pre-deployment verification on local development environments. license: See LICENSE.txt
Patchright - Browser Automation Skill
Patchright-based browser automation with bot detection bypass. Use for localhost, dev servers, web app testing, screenshots, and UI interactions.
Triggers
URL/Network:
Web App Testing:
Browser Interaction:
Visual Verification:
Development Workflow:
Core: Server Mode (Session Persistence!)
Problem: scripts/executor.py terminates process on each call -> browser session lost Solution: scripts/server.py runs background server -> session persists
Start Server (Required!)
cd ~/.claude/skills/patchright-skill
python scripts/server.py start &
Server Commands
# Check status
python scripts/server.py statusStop server
python scripts/server.py stopCall tool
python scripts/server.py call '{"tool": "...", "args": {...}}'
Usage
1. Navigate + Screenshot (Most Common Pattern)
cd ~/.claude/skills/patchright-skillStart server (if not running)
python scripts/server.py start &
sleep 2Navigate to page
python scripts/server.py call '{"tool": "navigate", "args": {"url": "http://localhost:3000"}}'Take screenshot
python scripts/server.py call '{"tool": "screenshot", "args": {"path": "screenshot.png", "full_page": true}}'
2. Click + Interaction
# Click element
python scripts/server.py call '{"tool": "click", "args": {"selector": "button.submit"}}'
python scripts/server.py call '{"tool": "click", "args": {"selector": "#menu-btn"}}'
python scripts/server.py call '{"tool": "click", "args": {"selector": "body"}}' # Click anywhereType text
python scripts/server.py call '{"tool": "type", "args": {"selector": "#email", "text": "test@test.com"}}'
python scripts/server.py call '{"tool": "type", "args": {"selector": "input[name=password]", "text": "password123"}}'
3. Get Information
# Current URL
python scripts/server.py call '{"tool": "get_url"}'Page title
python scripts/server.py call '{"tool": "get_title"}'Element text
python scripts/server.py call '{"tool": "get_text", "args": {"selector": ".error-message"}}'
4. Wait
# Wait for element to appear
python scripts/server.py call '{"tool": "wait_for", "args": {"selector": ".loading-complete", "timeout": 10000}}'
Tool Reference
| Tool | Description | Args | |------|-------------|------| | launch | Start browser | headless: bool (default: false) | | close | Close browser | - | | navigate | Go to URL | url: string (required) | | screenshot | Save to file | path: string, full_page: bool | | click | Click element | selector: string (required) | | type | Type text | selector: string, text: string | | get_text | Get element text | selector: string | | wait_for | Wait for element | selector: string, timeout: int | | get_url | Get current URL | - | | get_title | Get page title | - |
Examples
Login Test
cd ~/.claude/skills/patchright-skill
python scripts/server.py start &
sleep 2Navigate to login page
python scripts/server.py call '{"tool": "navigate", "args": {"url": "http://localhost:3000/login"}}'
python scripts/server.py call '{"tool": "screenshot", "args": {"path": "login_page.png"}}'Fill form
python scripts/server.py call '{"tool": "type", "args": {"selector": "#email", "text": "admin@test.com"}}'
python scripts/server.py call '{"tool": "type", "args": {"selector": "#password", "text": "admin123"}}'
python scripts/server.py call '{"tool": "screenshot", "args": {"path": "login_filled.png"}}'Submit
python scripts/server.py call '{"tool": "click", "args": {"selector": "button[type=submit]"}}'
sleep 2
python scripts/server.py call '{"tool": "screenshot", "args": {"path": "login_result.png"}}'
App Navigation
# Enter app
python scripts/server.py call '{"tool": "navigate", "args": {"url": "http://localhost:3000"}}'
python scripts/server.py call '{"tool": "click", "args": {"selector": "body"}}' # Click to enter
sleep 2
python scripts/server.py call '{"tool": "screenshot", "args": {"path": "app_main.png", "full_page": true}}'Explore features
python scripts/server.py call '{"tool": "click", "args": {"selector": ".create-btn"}}'
python scripts/server.py call '{"tool": "screenshot", "args": {"path": "after_action.png"}}'
Selector Tips
/* ID */
#submit-btn/* Class */
.nav-menu
button.primary
/* Attribute */
input[type=email]
button[data-testid="login"]
a[href="/about"]
/* Text content */
text=Login
text=Submit
/* Combined */
form#login button[type=submit]
.sidebar .menu-item:first-child
Technical Specs
Troubleshooting
"Server not running" error:
python scripts/server.py start &
sleep 2
Browser not visible:
Session disconnected:
Element not found:
π‘ Examples
Login Test
cd ~/.claude/skills/patchright-skill
python scripts/server.py start &
sleep 2Navigate to login page
python scripts/server.py call '{"tool": "navigate", "args": {"url": "http://localhost:3000/login"}}'
python scripts/server.py call '{"tool": "screenshot", "args": {"path": "login_page.png"}}'Fill form
python scripts/server.py call '{"tool": "type", "args": {"selector": "#email", "text": "admin@test.com"}}'
python scripts/server.py call '{"tool": "type", "args": {"selector": "#password", "text": "admin123"}}'
python scripts/server.py call '{"tool": "screenshot", "args": {"path": "login_filled.png"}}'Submit
python scripts/server.py call '{"tool": "click", "args": {"selector": "button[type=submit]"}}'
sleep 2
python scripts/server.py call '{"tool": "screenshot", "args": {"path": "login_result.png"}}'
App Navigation
# Enter app
python scripts/server.py call '{"tool": "navigate", "args": {"url": "http://localhost:3000"}}'
python scripts/server.py call '{"tool": "click", "args": {"selector": "body"}}' # Click to enter
sleep 2
python scripts/server.py call '{"tool": "screenshot", "args": {"path": "app_main.png", "full_page": true}}'Explore features
python scripts/server.py call '{"tool": "click", "args": {"selector": ".create-btn"}}'
python scripts/server.py call '{"tool": "screenshot", "args": {"path": "after_action.png"}}'
π Tips & Best Practices
"Server not running" error:
python scripts/server.py start &
sleep 2
Browser not visible:
Session disconnected:
Element not found: