Stealth and CAPTCHAs
BrowserReal runs Google Chrome itself, headful, on a real display, on a machine of its own. There is no headless mode to detect, no automation flags, and no fingerprint shared with other customers’ browsers.
Use the client you already have
Section titled “Use the client you already have”How your code drives the browser matters as much as the browser. Stock Playwright and Puppeteer ask Chrome for things
that a page can notice: they turn on CDP’s Runtime domain in every page and worker (Runtime.enable), and from then on
Chrome describes each console message to them, which a script on the page can detect. Bot checks such as Cloudflare’s
and DataDome’s look for exactly that.
BrowserReal takes care of it on its side of the connection, so you use Playwright, Puppeteer, Browser Use or any CDP client as it is, with no patched fork and no change to your code:
Runtime.enableandConsole.enablenever reach Chrome. BrowserReal answers them itself, and tells your client about each page’s, frame’s and worker’s JavaScript contexts as Chrome would, found in ways a page cannot see.- Everything else goes through as your client sent it: navigation, clicks, typing,
evaluate, locators, frames (cross-site ones too), workers,expose_function,set_content, screenshots, network interception.
What changes for your code: the page’s console messages and uncaught errors are not reported to your client
(Playwright’s page.on("console") and page.on("pageerror"), Puppeteer’s console event), because reporting them is
what gives a client away. To read what a page logged, collect it yourself, for example with an init script that keeps
messages in a variable you read with evaluate.
Measured on deviceandbrowserinfo.com’s “Are you a bot?” with stock
Playwright: without BrowserReal’s filtering it reports isAutomatedWithCDP and isAutomatedWithCDPInWebWorker; through
BrowserReal, neither.
Your own code can still give you away: expose_function and add_init_script leave names on the page
(__playwright__binding__, for one) that a site may look for, so use them only where you need them.
Good habits
Section titled “Good habits”- Open a new page of your own (
contexts[0].new_page()) rather than driving the first tab. - Keep sign-ins in a profile, with a sticky proxy in the country the account lives in. A site that sees the same browser and address each time asks fewer questions.
- Keep
allowResizingoff (the default): the window keeps the size a real screen has.
CAPTCHAs
Section titled “CAPTCHAs”With solveCaptchas on (the default), Cloudflare’s Turnstile checkbox is clicked as a person would, after a few
seconds, up to three times. It is never clicked while a person has control in the live view.
reCAPTCHA and hCaptcha are not solved. When one appears, a person can solve it in the live view: the agent waits, and the profile remembers the result as the site allows.