AgentStack
SKILL verified MIT Self-run

Playwright Undetected Skill

skill-dalbit-mir-playwright-undetected-skill-playwright-undetected-skill · by dalbit-mir

A Claude skill from dalbit-mir/playwright-undetected-skill.

No reviews yet
0 installs
16 views
0.0% view→install

Install

$ agentstack add skill-dalbit-mir-playwright-undetected-skill-playwright-undetected-skill

✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README — it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-dalbit-mir-playwright-undetected-skill-playwright-undetected-skill)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
8mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming — see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps — measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Playwright Undetected Skill? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Playwright Undetected - Browser Automation Skill

Patchright-based browser automation with bot detection bypass. Localhost, dev servers, web app testing, screenshots, UI interactions - all in one skill.

Triggers

URL/Network:

  • localhost (http://localhost:, http://127.0.0.1:)
  • Local IPs (192.168.x.x, 10.x.x.x, 172.16-31.x.x)
  • Dev server ports (3000, 5173, 8080, 4200, 5000, etc.)

Web App Testing:

  • "test the app", "check the site"
  • "open localhost", "view in browser"
  • "take screenshot", "capture screen"
  • "check UI", "view page"
  • QA, E2E testing, dev build verification

Browser Interaction:

  • "click", "press button"
  • "type", "fill form"
  • "login", "sign up"
  • "open menu", "click tab"
  • "scroll", "navigate"

Visual Verification:

  • "how does it look?", "is it working?"
  • "check design", "verify layout"
  • "responsive test", "screen size"
  • "check rendering", "verify component"

Development Workflow:

  • Verify changes after code edits
  • Frontend debugging
  • Real-time dev feedback
  • Pre-deployment checks

Core: Server Mode (Session Persistence!)

Problem: executor.py terminates process on each call -> browser session lost Solution: server.py runs background server -> session persists

Start Server (Required!)

cd ~/.claude/skills/playwright-undetected
python server.py start &

Server Commands

# Check status
python server.py status

# Stop server
python server.py stop

# Call tool
python server.py call '{"tool": "...", "args": {...}}'

Usage

1. Navigate + Screenshot (Most Common Pattern)

cd ~/.claude/skills/playwright-undetected

# Start server (if not running)
python server.py start &
sleep 2

# Navigate to page
python server.py call '{"tool": "navigate", "args": {"url": "http://localhost:3000"}}'

# Take screenshot
python server.py call '{"tool": "screenshot", "args": {"path": "screenshot.png", "full_page": true}}'

2. Click + Interaction

# Click element
python server.py call '{"tool": "click", "args": {"selector": "button.submit"}}'
python server.py call '{"tool": "click", "args": {"selector": "#menu-btn"}}'
python server.py call '{"tool": "click", "args": {"selector": "body"}}'  # Click anywhere

# Type text
python server.py call '{"tool": "type", "args": {"selector": "#email", "text": "test@test.com"}}'
python server.py call '{"tool": "type", "args": {"selector": "input[name=password]", "text": "password123"}}'

3. Get Information

# Current URL
python server.py call '{"tool": "get_url"}'

# Page title
python server.py call '{"tool": "get_title"}'

# Element text
python server.py call '{"tool": "get_text", "args": {"selector": ".error-message"}}'

4. Wait

# Wait for element to appear
python 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, fullpage: bool | | click | Click element | selector: string (required) | | type | Type text | selector: string, text: string | | gettext | Get element text | selector: string | | waitfor | Wait for element | selector: string, timeout: int | | geturl | Get current URL | - | | get_title | Get page title | - |

Examples

Login Test

cd ~/.claude/skills/playwright-undetected
python server.py start &
sleep 2

# Navigate to login page
python server.py call '{"tool": "navigate", "args": {"url": "http://localhost:3000/login"}}'
python server.py call '{"tool": "screenshot", "args": {"path": "login_page.png"}}'

# Fill form
python server.py call '{"tool": "type", "args": {"selector": "#email", "text": "admin@test.com"}}'
python server.py call '{"tool": "type", "args": {"selector": "#password", "text": "admin123"}}'
python server.py call '{"tool": "screenshot", "args": {"path": "login_filled.png"}}'

# Submit
python server.py call '{"tool": "click", "args": {"selector": "button[type=submit]"}}'
sleep 2
python server.py call '{"tool": "screenshot", "args": {"path": "login_result.png"}}'

App Navigation

# Enter app
python server.py call '{"tool": "navigate", "args": {"url": "http://localhost:3000"}}'
python server.py call '{"tool": "click", "args": {"selector": "body"}}'  # Click to enter
sleep 2
python server.py call '{"tool": "screenshot", "args": {"path": "app_main.png", "full_page": true}}'

# Explore features
python server.py call '{"tool": "click", "args": {"selector": ".create-btn"}}'
python 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

  • Engine: patchright (undetected playwright fork)
  • Browser: Google Chrome (channel: 'chrome')
  • Bot Detection Bypass: YES (Cloudflare, reCAPTCHA, etc.)
  • Localhost Support: YES
  • Private IP Support: YES
  • Server Port: 9222

Troubleshooting

"Server not running" error:

python server.py start &
sleep 2

Browser not visible:

  • headless=False is default, browser window should appear
  • In server mode, browser persists in background

Session disconnected:

  • Use server.py instead of executor.py
  • Server keeps session alive once started

Element not found:

  • Use wait_for to wait first
  • Verify selector in DevTools

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.