mirror of
https://github.com/browser-use/browser-use
synced 2026-05-06 17:52:15 +02:00
178 lines
10 KiB
Python
178 lines
10 KiB
Python
CHROME_EXTENSIONS = {} # coming in a separate PR
|
|
CHROME_EXTENSIONS_PATH = 'chrome_extensions'
|
|
CHROME_PROFILE_PATH = 'chrome_profile'
|
|
CHROME_PROFILE_USER = 'Default'
|
|
CHROME_DEBUG_PORT = 9242
|
|
CHROME_DISABLED_COMPONENTS = [
|
|
'Translate',
|
|
'AcceptCHFrame',
|
|
'OptimizationHints',
|
|
'ProcessPerSiteUpToMainFrameThreshold',
|
|
'InterestFeedContentSuggestions',
|
|
# 'CalculateNativeWinOcclusion',
|
|
'BackForwardCache',
|
|
# 'HeavyAdPrivacyMitigations',
|
|
'LazyFrameLoading',
|
|
# 'ImprovedCookieControls',
|
|
'PrivacySandboxSettings4',
|
|
'AutofillServerCommunication',
|
|
'CertificateTransparencyComponentUpdater',
|
|
'DestroyProfileOnBrowserClose',
|
|
'CrashReporting',
|
|
'OverscrollHistoryNavigation',
|
|
'InfiniteSessionRestore',
|
|
#'LockProfileCookieDatabase', # disabling allows multiple chrome instances to concurrently modify profile, but might make chrome much slower https://github.com/yt-dlp/yt-dlp/issues/7271 https://issues.chromium.org/issues/40901624
|
|
] # it's always best to give each chrome instance its own exclusive copy of the user profile
|
|
|
|
|
|
CHROME_HEADLESS_ARGS = [
|
|
'--headless=new',
|
|
# '--test-type',
|
|
# '--test-type=gpu', # https://github.com/puppeteer/puppeteer/issues/10516
|
|
# '--enable-automation', # <- DONT USE THIS, it makes you easily detectable / blocked by cloudflare
|
|
]
|
|
|
|
CHROME_DOCKER_ARGS = [
|
|
# Docker-specific options
|
|
# https://github.com/GoogleChrome/lighthouse-ci/tree/main/docs/recipes/docker-client#--no-sandbox-issues-explained
|
|
'--no-sandbox', # rely on docker sandboxing in docker, otherwise we need cap_add: SYS_ADM to use host sandboxing
|
|
'--disable-gpu-sandbox',
|
|
'--disable-setuid-sandbox',
|
|
'--disable-dev-shm-usage', # docker 75mb default shm size is not big enough, disabling just uses /tmp instead
|
|
'--no-xshm',
|
|
# dont try to disable (or install) dbus in docker, its not needed, chrome can work without dbus despite the errors
|
|
]
|
|
|
|
CHROME_DISABLE_SECURITY_ARGS = [
|
|
# DANGER: JS isolation security features (to allow easier tampering with pages during automation)
|
|
# chrome://net-internals
|
|
'--disable-web-security', # <- WARNING, breaks some sites that expect/enforce strict CORS headers (try webflow.com)
|
|
'--disable-site-isolation-trials',
|
|
'--disable-features=IsolateOrigins,site-per-process',
|
|
# '--allow-file-access-from-files', # <- WARNING, dangerous, allows JS to read filesystem using file:// URLs
|
|
# DANGER: Disable HTTPS verification
|
|
'--allow-running-insecure-content', # Breaks CORS/CSRF/HSTS etc., useful sometimes but very easy to detect
|
|
'--ignore-certificate-errors',
|
|
'--ignore-ssl-errors',
|
|
'--ignore-certificate-errors-spki-list',
|
|
# '--allow-insecure-localhost',
|
|
]
|
|
|
|
# flags to make chrome behave more deterministically across different OS's
|
|
CHROME_DETERMINISTIC_RENDERING_ARGS = [
|
|
'--deterministic-mode',
|
|
'--js-flags=--random-seed=1157259159', # make all JS random numbers deterministic by providing a seed
|
|
'--force-device-scale-factor=1',
|
|
# GPU, canvas, text, and pdf rendering config
|
|
# chrome://gpu
|
|
'--enable-webgl', # enable web-gl graphics support
|
|
'--font-render-hinting=none', # make rendering more deterministic by ignoring OS font hints, may also need css override, try: * {text-rendering: geometricprecision !important; -webkit-font-smoothing: antialiased;}
|
|
'--force-color-profile=srgb', # make rendering more deterministic by using consistent color profile, if browser looks weird, try: generic-rgb
|
|
# '--disable-partial-raster', # make rendering more deterministic (TODO: verify if still needed)
|
|
'--disable-skia-runtime-opts', # make rendering more deterministic by avoiding Skia hot path runtime optimizations
|
|
'--disable-2d-canvas-clip-aa', # make rendering more deterministic by disabling antialiasing on 2d canvas clips
|
|
# '--disable-gpu', # falls back to more consistent software renderer across all OS's, especially helps linux text rendering look less weird
|
|
# // '--use-gl=swiftshader', <- DO NOT USE, breaks M1 ARM64. it makes rendering more deterministic by using simpler CPU renderer instead of OS GPU renderer bug: https://groups.google.com/a/chromium.org/g/chromium-dev/c/8eR2GctzGuw
|
|
# // '--disable-software-rasterizer', <- DO NOT USE, harmless, used in tandem with --disable-gpu
|
|
# // '--run-all-compositor-stages-before-draw', <- DO NOT USE, makes headful chrome hang on startup (tested v121 Google Chrome.app on macOS)
|
|
# // '--disable-gl-drawing-for-tests', <- DO NOT USE, disables gl output (makes tests run faster if you dont care about canvas)
|
|
# // '--blink-settings=imagesEnabled=false', <- DO NOT USE, disables images entirely (only sometimes useful to speed up loading)
|
|
]
|
|
|
|
|
|
CHROME_ARGS = [
|
|
# Process management & performance tuning
|
|
# chrome://process-internals
|
|
# '--disable-lazy-loading', # make rendering more deterministic by loading all content up-front instead of on-focus
|
|
# '--disable-renderer-backgrounding', # dont throttle tab rendering based on focus/visibility
|
|
# '--disable-background-networking', # dont throttle tab networking based on focus/visibility
|
|
# '--disable-background-timer-throttling', # dont throttle tab timers based on focus/visibility
|
|
# '--disable-backgrounding-occluded-windows', # dont throttle tab window based on focus/visibility
|
|
# '--disable-ipc-flooding-protection', # dont throttle ipc traffic or accessing big request/response/buffer/etc. objects will fail
|
|
# '--disable-extensions-http-throttling', # dont throttle http traffic based on runtime heuristics
|
|
# '--disable-field-trial-config', # disable shared field trial state between browser processes
|
|
# '--disable-back-forward-cache', # disable browsing navigation cache
|
|
# Profile data dir setup
|
|
# chrome://profile-internals
|
|
# f'--user-data-dir={CHROME_PROFILE_PATH}', # managed by playwright arg instead
|
|
# f'--profile-directory={CHROME_PROFILE_USER}',
|
|
# '--password-store=basic', # use mock keychain instead of OS-provided keychain (we manage auth.json instead)
|
|
# '--use-mock-keychain',
|
|
# '--disable-cookie-encryption', # we need to be able to write unencrypted cookies to save/load auth.json
|
|
'--disable-sync', # don't try to use Google account sync features while automation is active
|
|
# Extensions
|
|
# chrome://inspect/#extensions
|
|
# f'--load-extension={CHROME_EXTENSIONS.map(({unpacked_path}) => unpacked_path).join(',')}', # not needed when using existing profile that already has extensions installed
|
|
# f'--allowlisted-extension-id={",".join(CHROME_EXTENSIONS.keys())}',
|
|
'--allow-legacy-extension-manifests',
|
|
'--allow-pre-commit-input', # allow JS mutations before page rendering is complete
|
|
# '--disable-blink-features=AutomationControlled', # hide the signatures that announce browser is being remote-controlled
|
|
# f'--proxy-server=https://43.159.28.126:2334:u7ce652b7568805c4-zone-custom-region-us-session-szGWq3FRU-sessTime-60:u7ce652b7568805c4', # send all network traffic through a proxy https://2captcha.com/proxy
|
|
# f'--proxy-bypass-list=127.0.0.1',
|
|
# Browser window and viewport setup
|
|
# chrome://version
|
|
# f'--user-agent="{DEFAULT_USER_AGENT}"',
|
|
# f'--window-size={DEFAULT_VIEWPORT.width},{DEFAULT_VIEWPORT.height}',
|
|
# '--window-position=0,0',
|
|
# '--start-maximized',
|
|
'--install-autogenerated-theme=0,0,0', # black border makes it easier to see which chrome window is browser-use's
|
|
'--hide-scrollbars', # stop scrollbars from affecting screenshot width/height
|
|
#'--virtual-time-budget=60000', # DONT USE THIS, makes chrome hang forever and doesn't work, used to fast-forward all animations & timers by 60s, dont use this it's unfortunately buggy and breaks screenshot and PDF capture sometimes
|
|
#'--autoplay-policy=no-user-gesture-required', # auto-start videos so they trigger network requests + show up in outputs
|
|
#'--disable-gesture-requirement-for-media-playback',
|
|
#'--lang=en-US,en;q=0.9',
|
|
# IO: stdin/stdout, debug port config
|
|
# chrome://inspect
|
|
'--log-level=2', # 1=DEBUG 2=WARNING 3=ERROR
|
|
'--enable-logging=stderr',
|
|
# '--remote-debugging-address=127.0.0.1', <- DONT USE THIS, no longer supported on chrome >100, never expose to non-localhost, would allow attacker to drive your browser from any machine
|
|
# '--enable-experimental-extension-apis', # add support for tab groups via chrome.tabs extension API
|
|
'--disable-focus-on-load', # prevent browser from hijacking focus
|
|
'--disable-window-activation',
|
|
# '--in-process-gpu', <- DONT USE THIS, makes headful startup time ~5-10s slower (tested v121 Google Chrome.app on macOS)
|
|
# '--disable-component-extensions-with-background-pages', # TODO: check this, disables chrome components that only run in background with no visible UI (could lower startup time)
|
|
# uncomment to disable hardware camera/mic/speaker access + present fake devices to websites
|
|
# (faster to disable, but disabling breaks recording browser audio in puppeteer-stream screenrecordings)
|
|
# '--use-fake-device-for-media-stream',
|
|
# '--use-fake-ui-for-media-stream',
|
|
# '--disable-features=GlobalMediaControls,MediaRouter,DialMediaRouteProvider',
|
|
# Output format options (PDF, screenshot, etc.)
|
|
'--export-tagged-pdf', # include table on contents and tags in printed PDFs
|
|
'--generate-pdf-document-outline',
|
|
# Suppress first-run features, popups, hints, updates, etc.
|
|
# chrome://system
|
|
'--no-pings',
|
|
'--no-default-browser-check',
|
|
'--no-startup-window',
|
|
'--ash-no-nudges',
|
|
'--disable-infobars',
|
|
'--disable-search-engine-choice-screen',
|
|
'--disable-session-crashed-bubble',
|
|
'--simulate-outdated-no-au="Tue, 31 Dec 2099 23:59:59 GMT"', # disable browser self-update while automation is active
|
|
'--hide-crash-restore-bubble',
|
|
'--suppress-message-center-popups',
|
|
'--disable-client-side-phishing-detection',
|
|
'--disable-domain-reliability',
|
|
'--disable-datasaver-prompt',
|
|
'--disable-hang-monitor',
|
|
'--disable-session-crashed-bubble',
|
|
'--disable-speech-synthesis-api',
|
|
'--disable-speech-api',
|
|
'--disable-print-preview',
|
|
'--safebrowsing-disable-auto-update',
|
|
# '--deny-permission-prompts',
|
|
'--disable-external-intent-requests',
|
|
# '--disable-notifications',
|
|
'--disable-desktop-notifications',
|
|
'--noerrdialogs',
|
|
'--disable-prompt-on-repost',
|
|
'--silent-debugger-extension-api',
|
|
# '--block-new-web-contents',
|
|
'--metrics-recording-only',
|
|
'--disable-breakpad',
|
|
# other feature flags
|
|
# chrome://flags chrome://components
|
|
f'--disable-features={",".join(CHROME_DISABLED_COMPONENTS)}',
|
|
'--enable-features=NetworkService',
|
|
]
|