playwright-browser

Bind's avatarfrom Bind

Control a Playwright browser via CLI - navigate, interact, and screenshot

⭐4stars🔀0forks📁View on GitHub🕐Updated Jan 8, 2026

When & Why to Use This Skill

The Playwright Browser skill enables advanced web automation and programmatic interaction by controlling a Playwright-driven browser via a command-line interface. It solves the complexity of interacting with modern, dynamic web applications by using the accessibility tree for lightweight and reliable element targeting. This skill is ideal for users needing to bridge the gap between AI agents and live web environments, allowing for seamless navigation, form interaction, and visual data capture.

Use Cases

  • Automated Web Testing: Perform end-to-end testing of web applications by simulating user behaviors like clicking buttons, typing into fields, and verifying page states.
  • Dynamic Content Interaction: Navigate and interact with JavaScript-heavy websites that require user sessions or complex UI interactions to reveal data.
  • Visual Auditing and Screenshots: Capture full-page or specific-view screenshots of websites for UI/UX reviews, visual regression testing, or digital archiving.
  • Web-Based Workflow Automation: Automate repetitive browser tasks such as filling out multi-step forms, performing web searches, and extracting structured snapshots of page content.
nameplaywright-browser
descriptionControl a Playwright browser via CLI - navigate, interact, and screenshot
version1.0.0
licenseMIT
compatibilityopencode

Overview

CLI tools for controlling a Playwright browser. Uses Playwright's accessibility tree for lightweight, efficient page interaction.

Interactive Session Workflow

Start a persistent browser session and issue commands against it:

# Start session (opens visible browser window)
bun .opencode/skill/playwright-browser/session.js start

# Navigate to a site
bun .opencode/skill/playwright-browser/navigate.js https://duckduckgo.com

# Get page structure
bun .opencode/skill/playwright-browser/snapshot.js

# Type in search box and submit
bun .opencode/skill/playwright-browser/type.js "combobox:Search with DuckDuckGo" "github" --press Enter

# Click on a result
bun .opencode/skill/playwright-browser/click.js "link:GitHub"

# Take a screenshot
bun .opencode/skill/playwright-browser/screenshot.js --output result.png

# Stop session when done
bun .opencode/skill/playwright-browser/session.js stop

Commands

Session

Manage a persistent browser session for interactive use.

bun .opencode/skill/playwright-browser/session.js start
bun .opencode/skill/playwright-browser/session.js stop
bun .opencode/skill/playwright-browser/session.js status

Options:

  • --headless - Run in headless mode (default: headed/visible)

Examples:

bun .opencode/skill/playwright-browser/session.js start
bun .opencode/skill/playwright-browser/session.js start --headless
bun .opencode/skill/playwright-browser/session.js status
bun .opencode/skill/playwright-browser/session.js stop

Navigate to a URL in the browser.

bun .opencode/skill/playwright-browser/navigate.js <url>

Examples:

bun .opencode/skill/playwright-browser/navigate.js https://example.com

Snapshot

Get the accessibility tree of the current page.

bun .opencode/skill/playwright-browser/snapshot.js

Shows the page structure in a text format. Use this to find elements to interact with.

Output format:

- navigation:
  - link "About"
- search:
  - combobox "Search"
  - button "Submit"

Type

Type text into an input element on the page.

bun .opencode/skill/playwright-browser/type.js <ref> <text> [--press Enter]

Arguments:

  • ref - Element reference (role:name, text:content, or CSS selector)
  • text - Text to type

Options:

  • --press <key> - Press a key after typing (e.g., Enter, Tab)

Examples:

bun .opencode/skill/playwright-browser/type.js "combobox:Search" "hello" --press Enter
bun .opencode/skill/playwright-browser/type.js "input[name='q']" "search query"

Click

Click an element on the page.

bun .opencode/skill/playwright-browser/click.js <ref>

Arguments:

  • ref - Element reference (role:name, text:content, or CSS selector)

Examples:

bun .opencode/skill/playwright-browser/click.js "button:Submit"
bun .opencode/skill/playwright-browser/click.js "link:Sign in"

Screenshot

Take a screenshot of the current page.

bun .opencode/skill/playwright-browser/screenshot.js [--output <path>] [--full]

Options:

  • --output <path> - Output file path (default: screenshot.png)
  • --full - Capture full page (scrolls entire page)

Examples:

bun .opencode/skill/playwright-browser/screenshot.js
bun .opencode/skill/playwright-browser/screenshot.js --output page.png

Element References

Commands that interact with elements (type, click) accept flexible element references:

Format Example Description
role:name combobox:Search Accessibility role and name
text:content text:Sign in Element containing text
CSS selector #login-btn Standard CSS selector
CSS selector input[name='q'] Attribute selector

Recommended workflow:

  1. Use snapshot to see the accessibility tree
  2. Find the element's role and name
  3. Use role:name format for reliable interaction

Error Recovery

Commands provide helpful error messages with suggestions:

  • Element not found: "Element 'X' not found. Try: snapshot to see available elements"
  • Session issues: Commands automatically start a session if none exists
  • Navigation failures: "Navigation failed at URL. Try: navigate URL"

Notes

  • Browser data is stored in .playwright-data/ in the project root
  • The persistent context maintains cookies and localStorage between sessions
  • Commands use networkidle wait for reliable page loading