Seatext library / BotRefund evidence
How to Detect Playwright Traffic on Your Website: Signals, Methods, and Verification
Playwright traffic leaves detectable traces in browser fingerprints, automation properties, and behavioral patterns. You can identify it by checking for CDP debugger leaks, native patching inconsistencies, engine mismatches, rebrowser leaks, JS engine anomalies, and...
✓ Built for advertisers who need clear, refund-ready traffic evidence.
Playwright runs real browsers (Chromium, Firefox, WebKit) that appear legitimate at the network layer, but automation frameworks inevitably leave fingerprints. The most reliable way to tell if traffic comes from Playwright is to inspect client-side browser signals that automation tools struggle to perfectly replicate: CDP debugger exposure, native API patching artifacts, JavaScript engine inconsistencies, rebrowser leaks, and automation property flags. BotRefund's detection AI correlates these signals with 103 other browser, network, hardware, and behavior vectors to classify visits as human or automated with 99% accuracy.
Why Detecting Playwright Traffic Matters
Automated traffic from Playwright and similar frameworks inflates ad spend, poisons conversion pixels, and skews analytics. When bots click ads, browse landing pages, and trigger conversion events, platforms bill for those interactions. BotRefund notes that industry audits consistently place automated traffic between 9% and 20% of paid clicks. Without detection, you pay for visits that never convert and your optimization algorithms learn from bot behavior instead of human intent.
Prerequisites for Reliable Detection
- Client-side JavaScript execution on your pages (server logs alone miss browser-level signals)
- Ability to collect and analyze browser fingerprint data: navigator properties, WebGL renderer, canvas fingerprint, WebRTC behavior, timezone/language consistency
- Session recording or behavioral telemetry: mouse movement patterns, scroll behavior, click timing, input speed
- A baseline of known human traffic for comparison
Step-by-Step: Identifying Playwright Traffic
- Deploy client-side fingerprinting. Add a lightweight script that captures the 106 signals BotRefund uses — including the six automation-specific vectors: CDP Debugger Leak, Native Patching, Engine Mismatch, Rebrowser Leaks, JS Engine Mismatch, and Automation Properties.
- Check for CDP Debugger Leak (Signal 16). Playwright uses Chrome DevTools Protocol (CDP) for control. Even in stealth mode, CDP connections can leave traces in
window.chrome,navigator.webdriver, or timing anomalies when DevTools protocols are active. - Inspect Native Patching (Signal 17). Automation frameworks patch native browser APIs (e.g.,
navigator.permissions,Notification.permission). Compare observed behavior against a clean browser profile; mismatches indicate patching. - Validate Engine Mismatch (Signal 18). Playwright's bundled browsers may report engine versions or features that don't match the claimed user-agent. Check
navigator.userAgentagainstnavigator.appVersion, V8 version strings, and WebGL renderer details. - Detect Rebrowser Leaks (Signal 19). Tools like
playwright-stealthorundetected-playwrightattempt to mask automation but often leak via inconsistentchrome.runtime, missingchrome.app, or abnormalperformance.memoryproperties. - Flag JS Engine Mismatch (Signal 20). Playwright's JavaScript execution context can differ from a genuine user's — look for missing or extra global objects, altered
Function.prototype.toStringoutput, or inconsistentError.stackformats. - Read Automation Properties (Signal 21). Direct flags like
navigator.webdriver === true, presence of__playwright,__pw_globals, ordocument.__playwright_script_executedare definitive markers when present. - Correlate with behavioral signals. Combine fingerprint signals with behavioral data: superhuman input speed (<1ms), absence of mouse tremor, grid-aligned movement, linear pointer paths, unnatural session durations, and honeypot trap interactions.
- Verify with a known-good test. Run a controlled Playwright session against your detection script. Confirm each target signal fires. Then run a human session — ensure false positives stay near zero.
Key Detection Signals at a Glance
| Signal | What It Checks | Playwright Indicator |
|---|---|---|
| CDP Debugger Leak | Traces left by browser automation or masking tools | DevTools protocol artifacts in window.chrome, navigator.webdriver |
| Native Patching | Whether browser profile behaves like a real device | Patched navigator.permissions, Notification.permission inconsistencies |
| Engine Mismatch | Whether browser profile behaves like a real device | User-agent vs. V8 version, WebGL renderer discrepancies |
| Rebrowser Leaks | Traces left by browser automation or masking tools | Stealth plugin artifacts: __playwright globals, chrome.runtime anomalies |
| JS Engine Mismatch | Whether browser profile behaves like a real device | Altered Function.toString, Error.stack, missing/extra globals |
| Automation Properties | Traces left by browser automation or masking tools | navigator.webdriver=true, __playwright, document.__playwright_script_executed |
How BotRefund's Multi-Signal Approach Differs from Single Checks
One signal can be misleading. BotRefund's prediction AI evaluates how 106 browser, network, hardware, and behavior signals fit together before deciding whether a visit is human or automated. Signals become a decision only when seen together. This prevents false positives from legitimate privacy tools, VPNs, or unusual but human browser configurations. The system checks network/VPN/geolocation evasion vectors (WebRTC leaks, DNS tunnel leaks, timezone evasion, latency mismatch, suspicious ports, UTC timezone bias, language mismatch, IP inconsistency, OS/TCP TTL mismatch, HTTP user-agent mismatch, accept-language mismatch, HTTP protocol mismatch, DNS routing mismatch) alongside the automation-specific signals above.
Common Mistakes and How to Avoid Them
- Relying only on User-Agent. Playwright can spoof any UA string. Always pair UA checks with client-side fingerprinting.
- Blocking by IP alone. Residential proxy botnets route through real consumer IPs. IP reputation catches only data-center traffic.
- Trusting
navigator.webdriveralone. Stealth plugins hide this flag. You need the full signal cluster. - Ignoring behavioral context. A human using accessibility tools may trigger some automation-like signals. Correlate with mouse tremor, scroll patterns, and session flow.
Practical Scenarios
Scenario A: Internal QA Tests Polluting Analytics
Your team runs Playwright tests against production. Deploy a detection script that tags sessions with automation flags. Filter these sessions in GA4/BigQuery using a custom dimension. BotRefund's script adds this classification in ~1 minute with no credit card required.
Scenario B: Competitor Click Fraud via Playwright
Ad clicks show high bounce, zero scroll, superhuman click speed. Correlate GCLID/FBCLID with automation signals. BotRefund auto-captures Click IDs and generates compliance-ready refund reports for Google and Meta disputes.
Scenario C: Scraper Bots Harvesting Content
Playwright scrapers render JS to extract pricing or product data. Detect via engine mismatch + rebrowser leaks + absence of humanlike mouse tremor. Serve poisoned data or challenge with CAPTCHA only on flagged sessions.
Limitations and When This Advice Does Not Apply
- Server-side only environments (no client JS execution) cannot capture browser fingerprint signals.
- Highly sophisticated adversaries using custom browser builds may evade known signal sets — requires continuous signal updates.
- Privacy regulations (GDPR, CCPA) require disclosure and lawful basis for fingerprinting. BotRefund states GDPR-aligned data handling.
- Low-traffic sites may lack statistical baseline for behavioral anomaly detection.
Terminology Quick Reference
- CDP (Chrome DevTools Protocol): Debugging interface Playwright uses to control Chromium.
- Native Patching: Modifying built-in browser APIs to hide automation traces.
- Rebrowser: Stealth plugins (e.g., playwright-stealth) that attempt to mask automation fingerprints.
- Fingerprinting: Collecting browser/device attributes to create a unique visitor profile.
- Pixel Poisoning: Bots triggering conversion pixels, causing ad platforms to optimize for bot traffic.
- GCLID/FBCLID: Google/Meta click identifiers used to trace ad clicks to sessions for refund evidence.
Frequently Asked Questions
Can Playwright traffic be detected without JavaScript on my page?
No. Server logs only show IP, headers, and request timing. Playwright uses real browsers that send legitimate headers. Client-side execution is required to capture fingerprint and behavioral signals.
Does navigator.webdriver === true always mean Playwright?
It indicates automation (Playwright, Puppeteer, Selenium), but stealth plugins often hide it. Absence of the flag does not prove human traffic — check the full signal cluster.
How long does it take to implement detection?
BotRefund's script installs in about one minute — one script tag, no ad-account access required.
Will detection scripts slow down my site?
Lightweight fingerprinting scripts (under 50KB gzipped) add negligible load. BotRefund's tag is designed for minimal performance impact.
Can I get refunds for Playwright-driven invalid clicks?
Yes. Google and Meta have invalid activity credit systems. BotRefund helps compile client-side behavioral evidence and negotiates refunds with an 83% approval rate across filed claims.
What if my own team's Playwright tests trigger false positives?
Tag internal traffic via IP allowlist, custom headers, or a test-mode cookie. Filter these sessions in your analytics and detection dashboard.
How often do detection signals need updating?
Playwright and stealth plugins update frequently. Managed services like BotRefund continuously update signal definitions; self-built solutions require ongoing maintenance.
Further reading and comparison sources
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
Learn more
Visit the website for more information.