360 Secure SkillHub
360 安全技能中心

Patchright Skill

基于 Patchright(反检测 Playwright 分支)的浏览器自动化 Skill,通过后台服务保持浏览器会话,可对 localhost 与私有网络 Web 应用执行导航、截图、点击、输入、等待和文本读取,适合前端调试与端到端验证;另外附带基于浏览器的 Google 搜索与结果提取脚本。

smallnest
smallnest
热度 35.17
最近更新 2026-05-18 11:38:21
分类:自动化依赖:联网浏览搜索 / 代码执行 / 读写文件应用场景:工作流 / 自动化脚本 / 研究 / 调试排错

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add patchright-skill
Metadata
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:

  • "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: 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 status

# Stop server
python scripts/server.py stop

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

Usage

1. Navigate + Screenshot (Most Common Pattern)

cd ~/.claude/skills/patchright-skill

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

# Navigate 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 anywhere

# Type 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 2

# Navigate 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

  • 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 scripts/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 scripts/server.py instead of scripts/executor.py
  • Server keeps session alive once started

Element not found:

  • Use wait_for to wait first
  • Verify selector in DevTools