Skip to content

// Automate browser interactions — web testing, form filling, screenshots, scraping, multi-tab workflows.

Browser Use

skill --stat
  • last update

    Jun 2, 2026

  • license

    MITv1.0.0

  • format

    SKILL.md

quickstart.sh
3 steps
  1. Install

    // Downloads SKILL.md into ~/.claude/skills/browser-use/

    $ curl -fsSL --create-dirs -o ~/.claude/skills/browser-use/SKILL.md https://claudeskil.com/skills/browser-use/SKILL.md
  2. Invoke

    // Inside Claude Code, type the skill name as a slash command

    > /browser-use write Playwright tests for this page
  3. Or just ask

    // Claude loads the skill by itself when a request matches its description

    > write Playwright tests for this page
browser-use/
references
SKILL.md
readonly
name:
Browser Use
slug:
browser-use
version:
v1.0.0
license:
MIT
author:
@chiragthummar16
categories:
tags:
#browser#playwright#automation#scraping#testing
description:

Automate browser interactions — web testing, form filling, screenshots, scraping, multi-tab workflows.

README.md

browser-use/README.md
7 sections

Browser Use

Browser Use drives a real, headful or headless browser through Playwright (with a Selenium fallback) so an agent can interact with pages the way a person does: clicking, typing, waiting on network, and reading rendered DOM. It is built for developers who need automation that survives JavaScript-heavy SPAs, authentication walls, and bot-detection layers — not brittle HTTP scraping.

When to use it

  • End-to-end testing of a login flow, checkout, or multi-step wizard where each step depends on rendered state.
  • Scraping data that only exists after client-side rendering, infinite scroll, or behind a session cookie.
  • Filling and submitting forms (including file uploads and date pickers) across one or several tabs.
  • Capturing full-page or element screenshots for visual regression or reporting.
  • Reaching sites guarded by Cloudflare, PerimeterX, or similar where a plain requests call returns a challenge page.

How it works

Each action maps to a Playwright primitive. Navigation uses page.goto(url, wait_until="networkidle"). Elements are targeted with role/text locators (page.get_by_role, page.get_by_text) rather than raw CSS to stay resilient to markup changes. Interactions auto-wait via locator.click(), locator.fill(), and expect(locator).to_be_visible(). Uploads use set_input_files; multi-tab work is handled through context.pages and context.expect_page(). Screenshots come from page.screenshot(full_page=True). Persistent auth is saved and replayed with storage_state JSON, so you log in once. Anti-detection relies on playwright-stealth patches plus realistic user_agent, locale, and viewport on the browser context.

Example

bash
curl -fsSL --create-dirs -o ~/.claude/skills/browser-use/SKILL.md https://claudeskil.com/skills/browser-use/SKILL.md
python
# saved as scrape_orders.py
ctx = browser.new_context(storage_state="auth.json", locale="en-US")
page = ctx.new_page()
page.goto("https://app.example.com/orders", wait_until="networkidle")
page.get_by_role("button", name="Export").click()
with page.expect_download() as dl:
    page.get_by_text("Download CSV").click()
dl.value.save_as("./orders.csv")
page.screenshot(path="orders.png", full_page=True)

Tips & gotchas

  • Prefer wait_until="networkidle" over fixed sleep calls; arbitrary sleeps are the top cause of flaky runs.
  • Generate auth.json once with a headful login, then reuse it — re-authenticating on every run is what trips rate limits and detection.
  • Stealth patches reduce fingerprinting but do not defeat CAPTCHA. For hard challenges, route through a CAPTCHA-solving service or a residential proxy.
  • Run headless in CI but reproduce failures with headless=False and slow_mo=500 to watch what actually happens.

FAQ

Playwright or Selenium? Playwright is the default — faster, auto-waiting, better multi-tab handling. Selenium is available for legacy Grid setups or unusual driver requirements.

Can it bypass Cloudflare? It clears most passive JS challenges via stealth and a real browser context. Interactive CAPTCHAs still require a solver or human-in-the-loop.

How do I keep a session logged in? Save context.storage_state(path="auth.json") after login and pass it to new_context(storage_state=...) on later runs.

$ cat reviews/

Reviews

// No reviews yet. Be the first.
Loading review form…

$ ls related/

explore all →