VerisoulAgent Atlas
All agents

Playwright

An open source tool anyone can run

Type: Automation librarySelf-declaredDetection guide
Verisoul ResearchUpdated 4 min read

Playwright is the browser layer behind a lot of test suites, scrapers and LLM agents, and its default setup leaves clear automation traces.

How to detect Playwright

You detect Playwright from the browser it drives, because default headless Chromium announces itself as HeadlessChrome, sets navigator.webdriver to true and leaves Playwright globals such as __playwright__binding__ and __pwInitScripts in the page. Headed mode, a custom user agent and stealth forks such as Patchright and Camoufox remove many of those tells, so behavior and network reputation matter too. Verisoul returns Playwright sessions as agent id cdp_automation.

Detection method
Self-declaredThe agent names itself in its user agent, and Verisoul confirms it with network, device or behavioral data. A user agent alone is never enough.
Signals that identify it
  • DeviceDevTools-protocol automation artifacts in the browser
  • BehavioralScripted navigation with no human input

Playwright is Microsoft's open source library for scripting real browsers. It drives Chromium, Firefox and WebKit from JavaScript, Python, C# and Java, and it shipped 1.0 on npm on May 6, 2020. It started as a testing tool and still is one, while a growing share of its traffic now comes from scrapers and from AI agents that need a browser to operate websites.

The numbers show how common it has become. The playwright npm package logged 154.5M downloads in the week of Oct 23 to Oct 29, 2026, and the Python package about 30.4M in the week to Nov 1. Playwright MCP, the server that hands the same engine to LLM agents through accessibility snapshots, added another 8.6M weekly npm downloads, which is why a Playwright session on your sign-up page today is as likely to be an agent as a test.

How Playwright shows up on your site

Playwright is a library, so it runs wherever the operator puts it: a developer laptop, a CI runner, a cloud VM or a hosted browser grid. It downloads its own browser builds, and since version 1.49 (Nov 18, 2024) default headless Chromium runs as chromium-headless-shell, which carries the HeadlessChrome marker in its user agent. Nothing about the network gives it away on its own, because the IP is whatever the operator rents. The library never signs requests, though some hosted browser companies that run Playwright sessions can, and Browserbase and Anchor Browser were in the first group of Cloudflare signed agents in Aug 2025.

CheckWhat Playwright does
User agentHeadlessChrome in default headless mode, ordinary Chrome when headed
Web Bot Auth signatureNone, though a hosted operator running it may sign
IP rangesNone, any laptop, CI runner, cloud VM or proxy
robots.txtNot checked by the library

Why Playwright is only medium difficulty to detect

Stock Playwright is easy to catch, because the HeadlessChrome user agent, the navigator.webdriver flag and the globals Playwright injects into the page, window.__playwright__binding__ and window.__pwInitScripts, are all visible from a script on your site. The difficulty comes from everything built to remove those markers. Patchright, a drop-in fork with about 472,000 weekly npm downloads, strips the automation flags, while Camoufox gives Playwright code a Firefox build that spoofs its fingerprint at the C++ level.

Some agent frameworks have also left Playwright entirely. Browser Use moved to raw DevTools-protocol control in Aug 2025, so its sessions show no Playwright-specific traces even though they are still automated. A check that looks for Playwright by name will miss these, while a check for DevTools automation and scripted behavior still catches them.

How Verisoul detects Playwright

Playwright doesn't sign its requests or publish an identity, so Verisoul reads what the automated browser itself declares. Our SDK looks for DevTools-protocol automation artifacts in the browser and pairs them with session behavior, where scripted navigation with no human input shows up quickly. Puppeteer and similar tools drive Chromium the same way, so Verisoul returns all of them under one id.

API response
"agent": {
  "id": "cdp_automation",
  "name": "DevTools automation",
  "provider": "Open source",
  "type": "headless_automation",
  "detection_method": "self_declared",
  "detection_signals": [
    "network",
    "device",
    "behavioral"
  ]
}
  • id is cdp_automation, the stable value to write rules against for any browser driven over the DevTools protocol
  • type is headless_automation, which groups scripting libraries apart from AI assistants and crawlers
  • detection_method is self_declared, meaning the browser exposed its own automation markers
  • detection_signals lists device (automation artifacts in the browser) and behavioral (scripted navigation with no human input)

The DevTools automation entry in Agent Atlas covers the same id, and the AI agent detection docs show where the agent object sits in the API response.

  1. 01Developer or agent launches Playwright
  2. 02Playwright opens Chromium, Firefox or WebKit
  3. 03Script fills your forms with no human input
  4. 04Your page sees automation artifacts
How Playwright reaches your site

How to detect Playwright step by step

  1. Add the Verisoul SDK to the pages you protect, starting with sign-up, login and payouts
  2. Read the agent object in the Verisoul API response and look for cdp_automation
  3. Allowlist your own CI and monitoring by IP or test account, then block or challenge cdp_automation everywhere else on sensitive steps
  4. Review sessions with a high bot score and no agent name, since stealth forks often land there

Should you block Playwright?

On sign-up, login and payouts, a Playwright session is your own test suite, a scraper or an LLM agent, and it is rarely a real customer. Block cdp_automation on those steps and keep a separate allowlist for your own testing so your QA runs don't trip the rule.

On public content pages the answer depends on whether you mind scraping. Many teams let it browse and rate limit it there, while holding the line at any step that creates an account, moves money or redeems a reward.

How Playwright shows up in the Atlas

Verisoul returns these Atlas entries for Playwright sessions it can name.

Questions about Playwright

Can websites detect Playwright?

Yes, in its default setup. Headless Chromium sends HeadlessChrome in its user agent, sets navigator.webdriver to true and leaves globals such as window.__playwright__binding__ and window.__pwInitScripts that a script on the page can see.

Is Playwright easier to detect than Puppeteer?

Not by default, since both drive Chromium over the DevTools protocol and leave similar markers. Verisoul returns both as cdp_automation. The stealth forks differ: Patchright patches Playwright's Chromium, and Camoufox gives Playwright a spoofed Firefox.

Does Patchright make Playwright undetectable?

Its maintainers say it passes common bot protection, which is their own claim. It removes static markers, while scripted behavior and network reputation still show.

What browser does Playwright MCP use?

It uses the same Playwright engine and browsers, exposed to LLM agents through accessibility snapshots instead of screenshots. Its sessions look like any other Playwright automation.

Sources

  1. Playwright
  2. Changes in Chromium headless in v1.49, Playwright on GitHub
  3. playwright weekly downloads, npm
  4. @playwright/mcp weekly downloads, npm
  5. Closer to the metal: leaving Playwright for CDP, Browser Use
  6. Patchright on GitHub
  7. Camoufox
  8. The age of agents: cryptographically recognizing agent traffic, Cloudflare