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.
| Check | What Playwright does |
|---|---|
| User agent | HeadlessChrome in default headless mode, ordinary Chrome when headed |
| Web Bot Auth signature | None, though a hosted operator running it may sign |
| IP ranges | None, any laptop, CI runner, cloud VM or proxy |
| robots.txt | Not 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.
"agent": {
"id": "cdp_automation",
"name": "DevTools automation",
"provider": "Open source",
"type": "headless_automation",
"detection_method": "self_declared",
"detection_signals": [
"network",
"device",
"behavioral"
]
}idiscdp_automation, the stable value to write rules against for any browser driven over the DevTools protocoltypeisheadless_automation, which groups scripting libraries apart from AI assistants and crawlersdetection_methodisself_declared, meaning the browser exposed its own automation markersdetection_signalslistsdevice(automation artifacts in the browser) andbehavioral(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.
- 01Developer or agent launches Playwright
- 02Playwright opens Chromium, Firefox or WebKit
- 03Script fills your forms with no human input
- 04Your page sees automation artifacts
How to detect Playwright step by step
- Add the Verisoul SDK to the pages you protect, starting with sign-up, login and payouts
- Read the
agentobject in the Verisoul API response and look forcdp_automation - Allowlist your own CI and monitoring by IP or test account, then block or challenge
cdp_automationeverywhere else on sensitive steps - 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.