browserwingControl and automate browser actions via HTTP API, including navigation, element interaction, data extraction, accessibility snapshots, screenshots, JS execu...
Install via ClawdBot CLI:
clawdbot install chenhg5/browserwingBrowserWing Executor provides comprehensive browser automation capabilities through HTTP APIs. You can control browser navigation, interact with page elements, extract data, and analyze page structure.
API Base URL: The BrowserWing Executor API address is configurable via environment variable.
BROWSERWING_EXECUTOR_URLhttp://127.0.0.1:8080$BROWSERWING_EXECUTOR_URL, if not set, use default http://127.0.0.1:8080Base URL Format: ${BROWSERWING_EXECUTOR_URL}/api/v1/executor or http://127.0.0.1:8080/api/v1/executor (if env var not set)
Authentication: Use X-BrowserWing-Key: header or Authorization: Bearer if required.
Important: Always construct the API URL by reading the environment variable first. In shell commands, use: ${BROWSERWING_EXECUTOR_URL:-http://127.0.0.1:8080}
IMPORTANT: Always call this endpoint first to see all available commands and their parameters.
```bash
EXECUTOR_URL="${BROWSERWING_EXECUTOR_URL:-http://127.0.0.1:8080}"
curl -X GET "${EXECUTOR_URL}/api/v1/executor/help"
```
Response: Returns complete list of all commands with parameters, examples, and usage guidelines.
Query specific command:
```bash
EXECUTOR_URL="${BROWSERWING_EXECUTOR_URL:-http://127.0.0.1:8080}"
curl -X GET "${EXECUTOR_URL}/api/v1/executor/help?command=extract"
```
CRITICAL: Always call this after navigation to understand page structure and get element RefIDs.
```bash
EXECUTOR_URL="${BROWSERWING_EXECUTOR_URL:-http://127.0.0.1:8080}"
curl -X GET "${EXECUTOR_URL}/api/v1/executor/snapshot"
```
Response Example:
```json
{
"success": true,
"snapshot_text": "Clickable Elements:\n @e1 Login (role: button)\n @e2 Sign Up (role: link)\n\nInput Elements:\n @e3 Email (role: textbox) [placeholder: your@email.com]\n @e4 Password (role: textbox)"
}
```
Use Cases:
Note: All examples below use EXECUTOR_URL="${BROWSERWING_EXECUTOR_URL:-http://127.0.0.1:8080}" to read the API address from environment variable, with http://127.0.0.1:8080 as fallback default.
```bash
EXECUTOR_URL="${BROWSERWING_EXECUTOR_URL:-http://127.0.0.1:8080}"
curl -X POST "${EXECUTOR_URL}/api/v1/executor/navigate" \
-H 'Content-Type: application/json' \
-d '{"url": "https://example.com"}'
```
```bash
EXECUTOR_URL="${BROWSERWING_EXECUTOR_URL:-http://127.0.0.1:8080}"
curl -X POST "${EXECUTOR_URL}/api/v1/executor/click" \
-H 'Content-Type: application/json' \
-d '{"identifier": "@e1"}'
```
Identifier formats:
@e1, @e2 (from snapshot)#button-id, .class-name//button[@type='submit']Login (text content)```bash
EXECUTOR_URL="${BROWSERWING_EXECUTOR_URL:-http://127.0.0.1:8080}"
curl -X POST "${EXECUTOR_URL}/api/v1/executor/type" \
-H 'Content-Type: application/json' \
-d '{"identifier": "@e3", "text": "user@example.com"}'
```
```bash
EXECUTOR_URL="${BROWSERWING_EXECUTOR_URL:-http://127.0.0.1:8080}"
curl -X POST "${EXECUTOR_URL}/api/v1/executor/extract" \
-H 'Content-Type: application/json' \
-d '{
"selector": ".product-item",
"fields": ["text", "href"],
"multiple": true
}'
```
```bash
EXECUTOR_URL="${BROWSERWING_EXECUTOR_URL:-http://127.0.0.1:8080}"
curl -X POST "${EXECUTOR_URL}/api/v1/executor/wait" \
-H 'Content-Type: application/json' \
-d '{"identifier": ".loading", "state": "hidden", "timeout": 10}'
```
```bash
EXECUTOR_URL="${BROWSERWING_EXECUTOR_URL:-http://127.0.0.1:8080}"
curl -X POST "${EXECUTOR_URL}/api/v1/executor/batch" \
-H 'Content-Type: application/json' \
-d '{
"operations": [
{"type": "navigate", "params": {"url": "https://example.com"}, "stop_on_error": true},
{"type": "click", "params": {"identifier": "@e1"}, "stop_on_error": true},
{"type": "type", "params": {"identifier": "@e3", "text": "query"}, "stop_on_error": true}
]
}'
```
Step-by-step workflow:
$BROWSERWING_EXECUTOR_URL. If not set, use default http://127.0.0.1:8080. In shell commands, use: EXECUTOR_URL="${BROWSERWING_EXECUTOR_URL:-http://127.0.0.1:8080}"GET /help to see all available operations and their parameters (do this first if unsure).POST /navigate to open the target webpage.GET /snapshot to understand page structure and get element RefIDs.@e1, @e2) or CSS selectors to:POST /clickPOST /typePOST /selectPOST /waitPOST /extract to get information from the page.User Request: "Search for 'laptop' on example.com and get the first 5 results"
Your Actions:
```bash
curl -X POST 'http://127.0.0.1:18085/api/v1/executor/navigate' \
-H 'Content-Type: application/json' \
-d '{"url": "https://example.com/search"}'
```
```bash
curl -X GET 'http://127.0.0.1:18085/api/v1/executor/snapshot'
```
Response shows: @e3 Search (role: textbox) [placeholder: Search...]
```bash
curl -X POST 'http://127.0.0.1:18085/api/v1/executor/type' \
-H 'Content-Type: application/json' \
-d '{"identifier": "@e3", "text": "laptop"}'
```
```bash
curl -X POST 'http://127.0.0.1:18085/api/v1/executor/press-key' \
-H 'Content-Type: application/json' \
-d '{"key": "Enter"}'
```
```bash
curl -X POST 'http://127.0.0.1:18085/api/v1/executor/wait' \
-H 'Content-Type: application/json' \
-d '{"identifier": ".search-results", "state": "visible", "timeout": 10}'
```
```bash
curl -X POST 'http://127.0.0.1:18085/api/v1/executor/extract' \
-H 'Content-Type: application/json' \
-d '{
"selector": ".result-item",
"fields": ["text", "href"],
"multiple": true
}'
```
```
Found 15 results for 'laptop':
...
```
POST /navigate - Navigate to URLPOST /go-back - Go back in historyPOST /go-forward - Go forward in historyPOST /reload - Reload current pagePOST /click - Click element (supports: RefID @e1, CSS selector, XPath, text content)POST /type - Type text into input (supports: RefID @e3, CSS selector, XPath)POST /select - Select dropdown optionPOST /hover - Hover over elementPOST /wait - Wait for element state (visible, hidden, enabled)POST /press-key - Press keyboard key (Enter, Tab, Ctrl+S, etc.)POST /extract - Extract data from elements (supports multiple elements, custom fields)POST /get-text - Get element text contentPOST /get-value - Get input element valueGET /page-info - Get page URL and titleGET /page-text - Get all page textGET /page-content - Get full HTMLGET /snapshot - Get accessibility snapshot (⭐ ALWAYS call after navigation)GET /clickable-elements - Get all clickable elementsGET /input-elements - Get all input elementsPOST /screenshot - Take page screenshot (base64 encoded)POST /evaluate - Execute JavaScript codePOST /batch - Execute multiple operations in sequencePOST /scroll-to-bottom - Scroll to page bottomPOST /resize - Resize browser windowPOST /tabs - Manage browser tabs (list, new, switch, close)POST /fill-form - Intelligently fill multiple form fields at onceGET /console-messages - Get browser console messages (logs, warnings, errors)GET /network-requests - Get network requests made by the pagePOST /handle-dialog - Configure JavaScript dialog (alert, confirm, prompt) handlingPOST /file-upload - Upload files to input elementsPOST /drag - Drag and drop elementsPOST /close-page - Close the current page/tabYou can identify elements using:
@e1, @e2, @e3/snapshot endpoint"identifier": "@e1"#id, .class, button[type="submit"]"identifier": "#login-button"//button[@id='login'], //a[contains(text(), 'Submit')]"identifier": "//button[@id='login']"Login, Sign Up, Submit"identifier": "Login"aria-label attributeBefore starting:
$BROWSERWING_EXECUTOR_URL environment variable, or use http://127.0.0.1:8080 as defaultGET /help if you're unsure about available commands or their parametersDuring automation:
/snapshot after navigation to get page structure and RefIDs@e1) over CSS selectors for reliability and stability/wait for dynamic content that loads asynchronously/batch for multiple sequential operations to improve efficiencyError handling:
/snapshot again to refresh page structureData extraction:
fields parameter to specify what to extract: ["text", "href", "src"]multiple: true to extract from multiple elementsScenario: User wants to login to a website
```
User: "Please log in to example.com with username 'john' and password 'secret123'"
```
Your Actions:
Step 1: Navigate to login page
```bash
EXECUTOR_URL="${BROWSERWING_EXECUTOR_URL:-http://127.0.0.1:8080}"
curl -X POST "${EXECUTOR_URL}/api/v1/executor/navigate" \
-H 'Content-Type: application/json' \
-d '{"url": "https://example.com/login"}'
```
Step 2: Get page structure
```bash
EXECUTOR_URL="${BROWSERWING_EXECUTOR_URL:-http://127.0.0.1:8080}"
curl -X GET "${EXECUTOR_URL}/api/v1/executor/snapshot"
```
Response:
```
Clickable Elements:
@e1 Login (role: button)
Input Elements:
@e2 Username (role: textbox)
@e3 Password (role: textbox)
```
Step 3: Enter username
```bash
POST http://127.0.0.1:18085/api/v1/executor/type
{"identifier": "@e2", "text": "john"}
```
Step 4: Enter password
```bash
POST http://127.0.0.1:18085/api/v1/executor/type
{"identifier": "@e3", "text": "secret123"}
```
Step 5: Click login button
```bash
POST http://127.0.0.1:18085/api/v1/executor/click
{"identifier": "@e1"}
```
Step 6: Wait for login success (optional)
```bash
POST http://127.0.0.1:18085/api/v1/executor/wait
{"identifier": ".welcome-message", "state": "visible", "timeout": 10}
```
Step 7: Inform user
```
"Successfully logged in to example.com!"
```
Scenario: Fill out a form with multiple fields
Instead of making 5 separate API calls, use one batch operation:
```bash
EXECUTOR_URL="${BROWSERWING_EXECUTOR_URL:-http://127.0.0.1:8080}"
curl -X POST "${EXECUTOR_URL}/api/v1/executor/batch" \
-H 'Content-Type: application/json' \
-d '{
"operations": [
{
"type": "navigate",
"params": {"url": "https://example.com/form"},
"stop_on_error": true
},
{
"type": "type",
"params": {"identifier": "#name", "text": "John Doe"},
"stop_on_error": true
},
{
"type": "type",
"params": {"identifier": "#email", "text": "john@example.com"},
"stop_on_error": true
},
{
"type": "select",
"params": {"identifier": "#country", "value": "United States"},
"stop_on_error": true
},
{
"type": "click",
"params": {"identifier": "#submit"},
"stop_on_error": true
}
]
}'
```
/help or /help?command= to learn about commands/snapshot after navigation to understand the page/wait before interacting with elements that load asynchronously/batch for multiple sequential operations/type for each field: @e1, @e2, etc./select for dropdowns/wait/extract with CSS selector and multiple: true["text", "href", "src"]@e2@e3@e1wait_visible: true (default) for reliable element interaction$BROWSERWING_EXECUTOR_URL environment variable, fallback to http://127.0.0.1:8080 if not setX-BrowserWing-Key header or JWT token if configuredElement not found:
/snapshot to see available elementsTimeout errors:
/wait with appropriate state before interactionExtraction returns empty:
/wait first)```bash
EXECUTOR_URL="${BROWSERWING_EXECUTOR_URL:-http://127.0.0.1:8080}"
curl -X GET "${EXECUTOR_URL}/api/v1/executor/help"
curl -X POST "${EXECUTOR_URL}/api/v1/executor/navigate" \
-H 'Content-Type: application/json' \
-d '{"url": "..."}'
curl -X GET "${EXECUTOR_URL}/api/v1/executor/snapshot"
curl -X POST "${EXECUTOR_URL}/api/v1/executor/click" \
-H 'Content-Type: application/json' \
-d '{"identifier": "@e1"}'
curl -X POST "${EXECUTOR_URL}/api/v1/executor/type" \
-H 'Content-Type: application/json' \
-d '{"identifier": "@e3", "text": "..."}'
curl -X POST "${EXECUTOR_URL}/api/v1/executor/extract" \
-H 'Content-Type: application/json' \
-d '{"selector": "...", "fields": [...], "multiple": true}'
```
All operations return:
```json
{
"success": true,
"message": "Operation description",
"timestamp": "2026-01-15T10:30:00Z",
"data": {
// Operation-specific data
}
}
```
Error response:
```json
{
"error": "error.operationFailed",
"detail": "Detailed error message"
}
```
Generated Mar 1, 2026
Automate daily checks on competitor product pages to extract pricing, availability, and promotional details. Use navigation to visit URLs, snapshot to identify product elements, and extraction to gather data into a structured format for analysis.
Perform automated UI testing by navigating through web apps, interacting with forms and buttons, and validating responses. Use batch operations to run test sequences and accessibility snapshots to ensure elements are correctly identified.
Scrape multiple news websites to collect headlines, article summaries, and publication dates. Navigate to each site, use extraction to pull specific fields, and batch operations to handle multiple sources efficiently.
Monitor social media platforms by navigating to profiles, extracting post metrics like likes and comments, and analyzing engagement trends. Use JavaScript execution for dynamic content and snapshots to understand page structure.
Automate retrieval of stock prices, economic indicators, or financial reports from banking or market websites. Navigate to secure portals, interact with login forms, and extract tabular data for further processing.
Offer a subscription-based service where businesses use BrowserWing via API to automate web tasks like data scraping or testing. Provide tiered pricing based on usage volume and support levels.
Provide custom solutions by integrating BrowserWing into client workflows for specific automation needs, such as e-commerce monitoring or compliance checks. Charge per project or hourly rates.
Use BrowserWing to collect and aggregate web data, then sell processed datasets or insights to clients in industries like market research or finance. Automate data pipelines with batch operations.
💬 Integration Tip
Always set the BROWSERWING_EXECUTOR_URL environment variable and call the /help endpoint first to discover available commands and parameters.
A fast Rust-based headless browser automation CLI with Node.js fallback that enables AI agents to navigate, click, type, and snapshot pages via structured commands.
Automate web browser interactions using natural language via CLI commands. Use when the user asks to browse websites, navigate web pages, extract data from websites, take screenshots, fill forms, click buttons, or interact with web applications.
Advanced desktop automation with mouse, keyboard, and screen control
Manage n8n workflows and automations via API. Use when working with n8n workflows, executions, or automation tasks - listing workflows, activating/deactivating, checking execution status, manually triggering workflows, or debugging automation issues.
Design and implement automation workflows to save time and scale operations as a solopreneur. Use when identifying repetitive tasks to automate, building workflows across tools, setting up triggers and actions, or optimizing existing automations. Covers automation opportunity identification, workflow design, tool selection (Zapier, Make, n8n), testing, and maintenance. Trigger on "automate", "automation", "workflow automation", "save time", "reduce manual work", "automate my business", "no-code automation".
Browser automation via Playwright MCP server. Navigate websites, click elements, fill forms, extract data, take screenshots, and perform full browser automation workflows.