Control a Playwright browser via CLI - navigate, interact, and screenshot
CLI tools for controlling a Playwright browser. Uses Playwright's accessibility tree for lightweight, efficient page interaction.
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
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
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 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 typeOptions:
--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 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"
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
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:
snapshot to see the accessibility treerole:name format for reliable interactionCommands provide helpful error messages with suggestions:
.playwright-data/ in the project rootnetworkidle wait for reliable page loading