From openbrowser
Automates filling web forms, logins, registrations, checkouts, multi-step wizards using openbrowser-ai for browser control with indexed selectors for inputs, dropdowns, checkboxes.
How this skill is triggered — by the user, by Claude, or both
Slash command
/openbrowser:form-fillingThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Automate filling web forms including login, registration, checkout, and multi-step form wizards using Python code execution.
Automate filling web forms including login, registration, checkout, and multi-step form wizards using Python code execution.
All code runs via openbrowser-ai -c. The daemon starts automatically and persists variables across calls. All browser functions are async -- use await.
Before running, verify openbrowser-ai is installed:
openbrowser-ai --help
If not found, install:
# macOS/Linux
curl -fsSL https://raw.githubusercontent.com/billy-enrizky/openbrowser-ai/main/install.sh | sh
# Windows (PowerShell)
irm https://raw.githubusercontent.com/billy-enrizky/openbrowser-ai/main/install.ps1 | iex
openbrowser-ai -c - <<'EOF'
await navigate("https://example.com/login")
state = await browser.get_browser_state_summary()
print(f"Page: {state.title} ({state.url})")
print(f"Interactive elements: {len(state.dom_state.selector_map)}")
EOF
openbrowser-ai -c - <<'EOF'
# List all interactive elements with their indices
state = await browser.get_browser_state_summary()
for index, element in state.dom_state.selector_map.items():
tag = element.tag_name
text = element.get_all_children_text(max_depth=2)[:60]
placeholder = element.attributes.get("placeholder", "")
input_type = element.attributes.get("type", "")
name = element.attributes.get("name", "")
print(f"[{index}] <{tag}> type={input_type} name={name} placeholder=\"{placeholder}\" text=\"{text}\"")
EOF
openbrowser-ai -c - <<'EOF'
# Fill fields using their indices from Step 2
await input_text(index=5, text="user@example.com")
await input_text(index=7, text="secure-password")
EOF
For fields that need clearing first:
openbrowser-ai -c - <<'EOF'
await click(index=5)
await evaluate("document.activeElement.select()")
await input_text(index=5, text="new-value")
EOF
Standard HTML select elements:
openbrowser-ai -c - <<'EOF'
await select_dropdown(index=12, text="United States")
EOF
To see available options first:
openbrowser-ai -c - <<'EOF'
options = await dropdown_options(index=12)
print(options)
EOF
Custom dropdown components:
openbrowser-ai -c - <<'EOF'
await evaluate("""
(function(){
const select = document.querySelector("select#country");
select.value = "US";
select.dispatchEvent(new Event("change", { bubbles: true }));
})()
""")
EOF
openbrowser-ai -c - <<'EOF'
await click(index=15) # Click checkbox/radio
# Verify state
checked = await evaluate("""document.querySelector("input[name=agree]").checked""")
print(f"Checkbox checked: {checked}")
EOF
openbrowser-ai -c - <<'EOF'
await click(index=20) # Click submit button
await wait(2)
# Verify submission
state = await browser.get_browser_state_summary()
print(f"After submit: {state.url}")
EOF
Or submit via JavaScript:
openbrowser-ai -c - <<'EOF'
await evaluate("document.querySelector(\"form\").submit()")
EOF
openbrowser-ai -c - <<'EOF'
# Check for success/error messages
result = await evaluate("""
(function(){
const success = document.querySelector(".success, .alert-success, [role=\"alert\"]");
const error = document.querySelector(".error, .alert-danger, .validation-error");
return {
success: success?.textContent?.trim(),
error: error?.textContent?.trim(),
url: window.location.href
};
})()
""")
print(result)
EOF
openbrowser-ai -c - <<'EOF'
for step in range(1, 5):
# Discover fields for current step
state = await browser.get_browser_state_summary()
print(f"Step {step}: {len(state.dom_state.selector_map)} elements")
# Fill fields (indices vary per step)
# ... fill fields here ...
# Click Next/Continue
# Find the next button
for idx, el in state.dom_state.selector_map.items():
text = el.get_all_children_text(max_depth=1).lower()
if "next" in text or "continue" in text:
await click(index=idx)
await wait(2)
break
EOF
-c - <<'EOF'), so all Python syntax works without shell escaping issues.browser.get_browser_state_summary() before typing -- do not guess element indices.evaluate() to bypass custom components that do not respond to standard click/type.-c calls while the daemon is running, so you can store field indices in one call and use them in the next.npx claudepluginhub billy-enrizky/openbrowser-ai --plugin openbrowserBrowser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction.
Automates browser tasks like form filling, data extraction, and multi-step web workflows using Yutori Navigator agent. Useful for website interactions requiring clicking, typing, or navigation.
Automates browser tasks with AI: navigate sites, fill forms, extract structured data, log in with credentials, and build reusable workflows. Use for web scraping, UI interactions without fixed selectors.