提交

提交图

88 次代码提交

作者 SHA1 备注 提交日期
MagMueller 30419aa5ec add 5s timeout on domain enable calls, add nuclear recovery gotcha
daemon.py: Page/DOM/Runtime/Network.enable calls now have a 5s
timeout. Previously they could hang indefinitely on heavy pages
(TikTok FYP), preventing the daemon from reaching its socket
listener.

SKILL.md: added one gotcha for when restart_daemon() itself hangs
(kill Chrome entirely and reconnect).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-18 15:05:25 -07:00
Magnus Müller 5d06079d7f page_info: surface pending native dialog (#65)
Agents rarely know to check for open alert/confirm/prompt/beforeunload
dialogs — they freeze the JS thread, so page_info()'s Runtime.evaluate
returns a stale or misleading viewport dict while the page is blocked.

Track the latest unhandled Page.javascriptDialogOpening in the daemon
(cleared on Page.javascriptDialogClosed) and, when one is open, return
{dialog: {type, message, ...}} from page_info() instead of the usual
viewport dict. The dialogs skill now points agents at this signal.
2026-04-18 14:58:18 -07:00
Magnus Müller 7b5357190e Update section title from 'Remote browsers' to 'Free remote browsers' (#64) 2026-04-18 14:50:00 -07:00
Saurav Panda 67228da9a8 Merge pull request #50 from browser-use/feat/domain-skills-batch5
Add domain skills: SEC EDGAR, Coursera, Goodreads, DuckDuckGo, TrustPilot
2026-04-18 13:35:13 -07:00
Saurav Panda 3acddb982f Merge pull request #55 from browser-use/feat/domain-skills-batch10
Add domain skills: Wellfound, G2, Capterra, TradingView, Macrotrends
2026-04-18 13:34:57 -07:00
Saurav Panda 5adbd27a34 Merge pull request #62 from browser-use/readme-free-remote-browser
readme: promote free remote browser tier
2026-04-18 12:00:08 -07:00
Saurav Panda e8454571c2 readme: promote free remote browser tier
Call out the free tier (3 concurrent browsers, no card) in the Remote
browsers section so users know they can try it without setup friction.
2026-04-18 11:59:15 -07:00
Magnus Müller f014990f84 SKILL.md: reframe post-task ritual as "Always contribute back" (#61)
* Reframe post-task ritual as the default "contribute back" procedure

Renames the section to "Always contribute back" and turns the guidance
into an imperative default. Adds concrete examples of what's worth a PR
(private APIs, framework quirks, stable selectors, URL patterns, waits,
traps), a schema for what a domain skill should capture (the durable
shape of the site, not the run narration), and an explicit do-not-write
list — most importantly banning raw pixel coordinates.

Narrows the scope to `domain-skills/` contributions only; no longer
nudges agents to update `interaction-skills/` or `helpers.py` as part
of this loop.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Replace "hesitate" with clearer cost framing

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 11:25:53 -07:00
Magnus Müller dd95b5c459 [codex] Clarify README code size section (#56)
* Clarify README code size section

* Rename README setup heading
2026-04-18 11:13:33 -07:00
Magnus Müller 23ce2ec464 Fix daemon attaching to invisible omnibox popup (#60)
* fix daemon attaching to invisible omnibox popup on fresh Chrome

When Chrome opens fresh, the only page targets are chrome://
internal pages and the omnibox popup (1px invisible viewport).
The daemon's attach_first_page() fell back to the popup, making
all subsequent work invisible to the user.

Fix: when no real pages exist, create an about:blank tab via
Target.createTarget instead of attaching to the omnibox popup.

Tested configurations:
- Fresh start with no real tabs → creates about:blank (1112x817)
- Navigate without AppleScript → works, tab visible
- Recovery from stale socket → auto-reconnects
- Chrome restart from scratch → creates about:blank

Also adds interaction-skills/connection.md documenting the
omnibox popup problem and startup sequence.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* add connection skill reference to main SKILL.md

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-18 11:07:43 -07:00
Gregor Žunič f713331aee readme: remove extra spacing (#59) 2026-04-18 10:56:38 -07:00
Gregor Žunič 026666d4cd better readme (#58) 2026-04-18 10:55:33 -07:00
sauravpanda 993323457d Add browser-harness validated domain skills for batch 10
Wellfound (DataDome + Cloudflare dual stack; browser CDP resolves silently; Rails not Next.js),
G2 (DataDome blocks all http_get; browser CDP; schema.org microdata stable; data.g2.com API needs vendor key),
Capterra (ClaudeBot UA returns Markdown not HTML; Chrome UA gets Cloudflare 403),
TradingView (scanner.tradingview.com POST open; symbol-search needs Origin header; data.tradingview.com dead),
Macrotrends (iframe PHP endpoints bypass main page; stock OHLCV direct; Referer required for economic API).
2026-04-18 05:18:38 -07:00
sauravpanda 33dcd86207 Add browser-harness validated domain skills for batch 9
CoinMarketCap (internal data-api/v3 fully open, no auth; 25 calls no rate limit),
Quora (full Chrome UA required; push() payloads double-encoded JSON; 3 SSR answers only),
Itch.io (http_get works; game cards via CSS selectors; RSS feeds exist),
Steam (appdetails single appid only; price in cents; ISteamApps/GetAppList dead in 2026),
HowLongToBeat (two-step token flow /api/find/init then POST; comp_* in seconds not hours).
2026-04-18 04:59:15 -07:00
sauravpanda cfa55ed15e Add browser-harness validated domain skills for batch 8
Letterboxd (http_get works on film pages; JSON-LD CDATA gotcha; API needs OAuth),
Gutenberg (Gutendex REST API; text via /cache/epub/; .opf is 404, use .rdf),
Metacritic (internal backend API key in HTML; Nuxt __NUXT_DATA__ not __NEXT_DATA__),
RAWG (API needs key; window.CLIENT_PARAMS in HTML has full game data without key),
OpenLibrary (full free API; missing cover = 43-byte GIF not 404; description dual type).
2026-04-18 04:46:39 -07:00
sauravpanda c2167e544e Add browser-harness validated domain skills for batch 7
Glassdoor (Cloudflare managed challenge; browser only; __NEXT_DATA__ + DOM fallbacks),
Medium (?format=json strips XSSI prefix; GraphQL /_/graphql no auth; RSS 10-item cap),
SoundCloud (oEmbed no-auth; __sc_hydration apiClient.id as client_id; API v2 with pagination),
Genius (OS token in UA bypasses 403; internal /api/songs no auth; strip first lyrics div header),
Dev.to (public REST API; burst limit 6 req then 429/1s; listings empty without auth).
2026-04-18 04:31:04 -07:00
sauravpanda f897a29d17 Add browser-harness validated domain skills for batch 6
Walmart (http_get works; bare Mozilla/5.0 UA bypasses PerimeterX; __NEXT_DATA__ via id= regex not type=),
Spotify (oEmbed no-auth; embed __NEXT_DATA__ has full trackList; anonymous token burns 22h Retry-After),
Weather (wttr.in format=j1; Open-Meteo current+hourly+daily; NWS two-call flow),
OpenStreetMap (Nominatim lat/lon are strings; Overpass bbox order differs from Nominatim; POST required),
Archive.org (Wayback availability API degraded; CDX sort=closest reliable; /search?output=json returns HTML).
2026-04-18 04:16:54 -07:00
sauravpanda 40291337ce Add Goodreads domain skill (http_get works; __NEXT_DATA__ Apollo state + JSON-LD) 2026-04-18 03:52:34 -07:00
sauravpanda a034cd0021 Add browser-harness validated domain skills for batch 5 (partial)
Coursera (public API no auth, q=search is POST-only/405 on GET),
DuckDuckGo (Instant Answer API, skip_disambig=1 essential, widget answers unusable),
SEC EDGAR (company UA required for www.sec.gov; 10 req/s; XBRL frames for cross-company),
TrustPilot (http_get works; __NEXT_DATA__ has reviews; 10-page cap per filter).
2026-04-18 03:50:39 -07:00
Saurav Panda 4d483839ff Merge pull request #46 from browser-use/feat/domain-skills-validated
Replace drafted skills with browser-harness validated versions
2026-04-18 01:23:52 -07:00
sauravpanda 4f05481d2a Replace drafted skills with browser-harness validated versions
Ran actual browser-harness sessions against each site and rewrote
the skill files from live test findings. Key corrections:

GitHub: wait(2) after wait_for_load() for React hydration; search API
  separate 10 req/min limit; search/code needs auth (401 unauthed)

HackerNews: athing also matches comment rows (use 'athing submission');
  job posts break naive score-zip; html.unescape() required for titles

Amazon: .zg-item-immersion gone from Best Sellers; #priceblock_ourprice
  returns null (legacy); review count selector collides with cross-sell
  widget — use [aria-label*='ratings'] instead

News: The Verge is Atom not RSS (namespace dict required); Reuters
  hard-blocks http_get with 403 even with User-Agent; BBC shows no
  consent banner from US IP; parallel fetch is 4.3x faster (0.16s vs 0.70s)

ProductHunt: goto() ERR_ABORTED — always use new_tab(); /posts/ URLs
  don't exist (it's /products/); homepage has 30 fixed items no lazy load;
  [data-test^='post-item-'] is the correct card selector
2026-04-18 01:22:30 -07:00
Magnus Müller 0f32cbdb55 Add more spacing between README sections (#44) 2026-04-18 00:32:48 -07:00
Saurav Panda d7eb4fa4ed Merge pull request #43 from browser-use/feat/domain-skills-batch1
Add domain skills: GitHub, HN, Product Hunt, Amazon, News, Job Boards
2026-04-18 00:27:09 -07:00
sauravpanda f0f70e7362 Add domain skills for 6 public, no-login-required sites
- github/scraping.md: GitHub API + trending page patterns, rate limiting
- hackernews/scraping.md: http_get + Algolia API for search/filtering
- producthunt/scraping.md: React SPA browser scraping + GraphQL token approach
- amazon/product-search.md: ASIN extraction, price parsing, CAPTCHA handling
- news-aggregation/multi-source.md: RSS-first approach, parallel fetch, consent banners
- job-boards/indeed-glassdoor.md: URL construction, job key extraction, salary normalization

All skills derived from real user task patterns. No credentials or sensitive data included.
2026-04-18 00:16:18 -07:00
Magnus Müller e953fa6556 [codex] Add domain skill name helper (#42)
* Add domain skill name helper

* Inline domain skill lookup in goto
2026-04-17 23:49:05 -07:00
Magnus Müller 0e12dc8f17 [codex] Refine domain skill guidance (#41)
* Refine domain skill guidance

* Drop unintended skill regressions
2026-04-17 23:27:35 -07:00
Magnus Müller 239a2a45ea [codex] Document domain-skill PR ritual (#39)
* Document domain-skill PR ritual

* Tighten domain-skill PR wording

* Expand shared domain-skill guidance
2026-04-17 23:19:18 -07:00
Magnus Müller a1c35ba384 Add thetechgeeks domain-skill for Ubiquiti AU pricing (#40)
Captures three learnings from a real run that mis-reported $3,080 AUD for
a UACC-Rack-12U-Wall (real AU street ~$420-630): Tech Geeks is Shopify so
use /products/<handle>.js for canonical price and SKU; its .js `available`
flag is unreliable so cross-check the DOM for sold-out markers; and
sold-out pages there carry stale/junk prices that must never enter a
final table without a second-source sanity check.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 23:17:52 -07:00
Magnus Müller ffc0aceaba Emphasize screenshots for verification and exploration (#38) 2026-04-17 23:09:23 -07:00
Magnus Müller bfc07d37e8 Trim JS-heavy guidance from SKILL (#37) 2026-04-17 22:59:35 -07:00
Magnus Müller f87fdde0af Remove default ensure_real_tab from docs (#36) 2026-04-17 22:46:33 -07:00
Magnus Müller becec42ca4 [codex] Rename CLI to browser-harness run (#35)
* Rename CLI to browser-harness run

* Simplify browser-harness CLI
2026-04-17 22:33:05 -07:00
Magnus Müller c9910d426d Top-load browser harness usage guidance (#33)
* Top-load browser harness usage guidance

* Refine skill fast-start copy
2026-04-17 22:26:46 -07:00
Gregor Žunič e48235b32c Print usage hint when bh is run on a TTY (#34)
A bare `bh` invocation blocks forever on sys.stdin.read(). Detect a TTY
stdin and exit with a one-line usage hint instead, so the failure mode
is obvious.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 22:20:40 -07:00
Magnus Müller 6adacbf94b Tighten install durability and restart guidance (#32) 2026-04-17 22:04:58 -07:00
Magnus Müller de1c3a4948 Refine README structure section (#31) 2026-04-17 21:59:56 -07:00
Magnus Müller 2c81cc99c5 [codex] Refresh remote debugging screenshot (#30)
* Trim README setup copy

* Refresh remote debugging screenshot
2026-04-17 21:55:58 -07:00
Magnus Müller 6fd06fbe80 Trim README setup copy (#29) 2026-04-17 21:53:35 -07:00
Magnus Müller 7d53eaaa9f Add remote debugging setup image (#28) 2026-04-17 21:50:30 -07:00
Magnus Müller 6a049ff9c3 Tighten install cold-start guidance (#27) 2026-04-17 21:50:30 -07:00
Magnus Müller 4543d42273 Document daemon reuse during setup (#26) 2026-04-17 21:40:15 -07:00
Magnus Müller acda8c72a0 Simplify helper surface (#23)
* Simplify helper surface

* Trim common module and restore dispatch key
2026-04-17 21:37:58 -07:00
Magnus Müller 56b89c0770 Clean up install bootstrap flow (#25) 2026-04-17 21:34:26 -07:00
Magnus Müller 0702b83759 Clarify Chrome remote debugging bootstrap (#22) 2026-04-17 21:12:50 -07:00
Magnus Müller 1a083d14df Compress README setup prompt (#21) 2026-04-17 21:00:40 -07:00
Magnus Müller 3193531a28 Split install and runtime docs (#20)
* Split install and runtime docs

* Refine install skill prompts
2026-04-17 20:57:29 -07:00
Gregor Žunič 29c4dfa8e7 changed name 2026-04-17 20:50:33 -07:00
Magnus Müller 16ddd3e630 Clarify Chrome profile setup flow (#18)
* Clarify Chrome profile setup flow

* Refine Chrome setup decision flow
2026-04-17 20:36:50 -07:00
Magnus Müller e7d43ddf37 Tighten README setup prompt (#19) 2026-04-17 19:39:50 -07:00
Magnus Müller 35ae22bdec [codex] Make setup work from anywhere (#17)
* Make setup work from anywhere

* Rename launcher to bh

* Remove extra helper commands

* Document global skill setup
2026-04-17 19:32:18 -07:00