skills/open-source/references/browser.md
from browser_use import Agent, Browser, ChatBrowserUse
browser = Browser(
headless=False,
window_size={'width': 1000, 'height': 700},
)
agent = Agent(task='Search for Browser Use', browser=browser, llm=ChatBrowserUse())
await agent.run()
Browser is an alias for BrowserSession — same class.
cdp_url: CDP URL for existing browser (e.g., "http://localhost:9222")headless (default: None): Auto-detects display. True/False/Nonewindow_size: {'width': 1920, 'height': 1080} or ViewportSizewindow_position (default: {'width': 0, 'height': 0})viewport: Content area sizeno_viewport (default: None): Disable viewport emulationdevice_scale_factor: DPI (2.0 for retina)keep_alive (default: None): Keep browser running after agent completesallowed_domains: Restrict navigation with patterns:
'example.com' → https://example.com/*'*.example.com' → domain + subdomains'http*://example.com' → both protocols'chrome-extension://*' → extensionsexample.*) NOT allowedprohibited_domains: Block domains (same patterns). allowed_domains takes precedenceenable_default_extensions (default: True): uBlock Origin, cookie handlers, ClearURLscross_origin_iframes (default: False)is_local (default: True): False for remote browsersuser_data_dir (default: auto temp): Profile data dir. None for incognitoprofile_directory (default: 'Default'): Chrome profile namestorage_state: Cookies/localStorage as file path or dictproxy: ProxySettings(server='http://host:8080', bypass='localhost', username='user', password='pass')permissions (default: ['clipboardReadWrite', 'notifications'])headers: HTTP headers for remote browsersexecutable_path: Custom browser pathchannel: 'chromium', 'chrome', 'chrome-beta', 'msedge'args: Additional CLI args listenv: Environment vars dictchromium_sandbox (default: True except Docker)devtools (default: False): Requires headless=Falseignore_default_args: List or True for allminimum_wait_page_load_time (default: 0.25)wait_for_network_idle_page_load_time (default: 0.5)wait_between_actions (default: 0.5)highlight_elements (default: True)paint_order_filtering (default: True): Remove hidden elements (experimental)accept_downloads (default: True)downloads_path: Download directoryauto_download_pdfs (default: True)user_agent: Custom user agent stringscreen: Screen size inforecord_video_dir: Save as .mp4record_video_size (default: ViewportSize)record_video_framerate (default: 30)record_har_path: Network traces as .hartraces_dir: Complete trace filesrecord_har_content (default: 'embed'): 'omit'/'embed'/'attach'record_har_mode (default: 'full'): 'full'/'minimal'disable_security (default: False): NOT RECOMMENDEDdeterministic_rendering (default: False): NOT RECOMMENDED# Auto-detect Chrome and first available profile
browser = Browser.from_system_chrome()
browser = Browser.from_system_chrome(profile_directory='Profile 5')
# List available profiles
profiles = Browser.list_chrome_profiles()
# [{'directory': 'Default', 'name': 'Person 1'}, {'directory': 'Profile 1', 'name': 'Work'}]
| Approach | Best For | Setup |
|---|---|---|
| Real Browser | Personal automation, existing logins | Low |
| Storage State | Production, CI/CD, headless | Medium |
| TOTP 2FA | Authenticator apps | Low |
| Email/SMS 2FA | Email/SMS verification | Medium |
# Export cookies/localStorage
await browser.export_storage_state('auth.json')
# Load on next run
browser = Browser(storage_state='auth.json')
Auto-saves periodically and on shutdown. Auto-loads and merges on startup.
Pass secret in sensitive_data with key ending in bu_2fa_code:
agent = Agent(
task="Login to my account",
llm=llm,
sensitive_data={
'google_bu_2fa_code': 'JBSWY3DPEHPK3PXP' # TOTP secret
},
)
Agent generates fresh 6-digit codes on demand. Find secrets in:
Browser(allowed_domains=['*.example.com'])Agent(use_vision=False)Use your existing Chrome with saved logins:
# Auto-detect (recommended)
browser = Browser.from_system_chrome()
# Manual paths
browser = Browser(
executable_path='/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
user_data_dir='~/Library/Application Support/Google/Chrome',
profile_directory='Default',
)
Close Chrome completely before running.
| Platform | executable_path | user_data_dir |
|---|---|---|
| macOS | /Applications/Google Chrome.app/Contents/MacOS/Google Chrome | ~/Library/Application Support/Google/Chrome |
| Windows | C:\Program Files\Google\Chrome\Application\chrome.exe | %LocalAppData%\Google\Chrome\User Data |
| Linux | /usr/bin/google-chrome | ~/.config/google-chrome |
# Simple
browser = Browser(use_cloud=True)
# Advanced — bypasses captchas, geo-restrictions
browser = Browser(
cloud_profile_id='your-profile-id',
cloud_proxy_country_code='us', # us, uk, fr, it, jp, au, de, fi, ca, in
cloud_timeout=30, # minutes (free: 15, paid: 240)
)
Prereqs: BROWSER_USE_API_KEY env var from https://cloud.browser-use.com/new-api-key
browser = Browser(cdp_url="http://remote-server:9222")
from browser_use.browser import ProxySettings
browser = Browser(
proxy=ProxySettings(
server="http://proxy-server:8080",
username="proxy-user",
password="proxy-pass"
),
cdp_url="http://remote-server:9222"
)