Afina

Download app

AppleWindows
EN
BlogBrowser Fingerprints

June 12, 2026

Puppeteer CDP Leaks: How Anti-Fraud Sees Automation

Puppeteer CDP Leaks: How Anti-Fraud Sees Automation

Puppeteer is convenient because it talks directly to Chromium through Chrome DevTools Protocol. But that convenience has a price. CDP gives you almost full browser control and leaves technical traces at the same time: call stacks, debug ports, odd timing, and early JavaScript injections.

If you scrape data, test protected sites, or work with accounts, one stealth plugin is often no longer enough. Anti-fraud checks the browser fingerprint together with the way the browser is controlled. That is where WebDriver detection and web scraping fingerprinting begin.

What CDP Is and Why It Leaks

Chrome DevTools Protocol was built for debugging, profiling, and browser control. Puppeteer uses it as a command channel: open a page, run a script, click, read the DOM, capture a screenshot.

Developers like that. Anti-fraud teams do too, just from the other side. The protocol creates markers that ordinary human sessions often do not have: a local control channel, specific execution contexts, Runtime.evaluate traces, and an unusual page lifecycle.

MarkerWhere it appearsWhy it looks suspicious
pptr:evaluateError stack tracesPoints directly to Puppeteer
DevTools portLocalhost and WebSocketShows remote browser control
Early JS patchingdocument_startChanges natural page timing
Headless signalsClientRects, fonts, GPUExposes artificial rendering
User-Agent mismatchHeaders vs navigatorShows inconsistent environment data

Classic Canvas fingerprinting or WebGL fingerprint helps answer what kind of device this is. CDP leaks show something else: whether a script is pulling the strings. For anti-fraud, that can be the stronger signal.

Where Puppeteer Leaves the Clearest Traces

The first visible layer is execution context. When you call page.evaluate(), Puppeteer sends code into the browser through CDP. If anti-fraud code triggers an error and reads Error.stack, the stack may expose an automation trace instead of normal site logic.

Next come injections through evaluateOnNewDocument. Many stealth plugins rewrite navigator.webdriver, WebGL, Canvas, plugins, and languages very early. But a heavy patch before the page has even started normally also looks odd. Real users do not arrive with a set of JavaScript interceptors in the main context.

Another trace is local ports. If Chromium runs with a DevTools endpoint, a protection script may probe local addresses or read indirect timing. At that point you need port scan protection, not another User-Agent swap.

Why Changing User-Agent Is Not Enough

Changing User-Agent through CDP fixes only a small piece of the picture. The server sees one header, JavaScript reads browser properties, Client Hints add another layer, and GPU or sensor data can tell a completely different story.

If HTTP says "mobile browser" while behavior APIs show a desktop cursor, missing touch patterns, and strange Client Hints, anti-fraud will not trust the header. It sees the mismatch. Device spoofing has to be coherent. Cosmetic changes fall apart quickly.

Weak approachBetter approach
Change only User-AgentAlign UA, Client Hints, viewport, timezone, touch
Load a huge stealth script at startupSplit early and late patches
Trust one pluginTest stack, ports, timing, fingerprint
Run everything headlessTest headful or specialized environments

Anti-fraud rarely catches one single mistake. It usually collects several small mismatches.

How to Reduce CDP Detection Risk

Perfect invisibility does not exist. But you can remove the rough traces: do not expose a TCP debug port unless you need it, avoid pptr:evaluate in the stack, do not inject heavy stealth patches in the first millisecond, and keep fingerprint layers consistent.

For simple tasks, that may be enough. For serious data scraping, account operations, or sites with strong anti-fraud, you need a different architecture: not JavaScript makeup on top of Chromium, but an environment where fingerprinting and automation are handled below the page level.

That is where an antidetect browser makes sense. Afina provides isolated browser profiles, per-account proxy, proxy management, action automation, local API, and RPA scripts. For a team, that base is easier to manage than patching node_modules after every update.

When Puppeteer Still Makes Sense

Puppeteer is still worth using. It works well for internal QA, testing your own sites, simple open-data collection, and rendering checks. The trouble starts when the site actively looks for automation.

One test on your own domain is unlikely to hinge on CDP leaks. But dozens of profiles, repeated actions, proxy rotation, and protected forms require a wider view: headless browsing, TLS fingerprinting, behavior, sessions, and team control. Puppeteer is only part of the job.

Afina helps in the second case. It does not replace engineering decisions, but it gives you a stable base: profiles, proxy per account, scripts, tasks, modules, synchronization, and launch control. Start with web scraping and data or go straight to download.

FAQ — Frequently Asked Questions

What are CDP leaks in Puppeteer?

They are technical traces from Chrome DevTools Protocol that can show a site that a script controls the browser. Examples include call stacks, local ports, execution contexts, and suspicious injection timing.

Is puppeteer-extra-plugin-stealth enough?

Sometimes for simple sites. Not for strong anti-fraud. Stealth plugins often hide obvious flags but do not remove every CDP marker.

Why is navigator.webdriver not the only problem?

Anti-fraud checks many layers at once: stack traces, ports, Client Hints, WebGL, Canvas, timing, behavior, and network signals. One flag is not the whole problem.

Can Puppeteer be made fully invisible?

Not in practice. You can reduce obvious traces, but every automation layer creates deviations. The real question is whether those deviations matter on the target site.

How does Afina help with automation tasks?

Afina provides isolated profiles, proxy per account, fingerprint logic, local API, and automation scripts. It gives teams a managed process, not just another Puppeteer tab.

Related terms

Continue reading onAnti-detect browser — profile isolation | Afina Browser
Vladyslav Shestakov

Hello! I'm Vladyslav Shestakov - a data analysis and automation expert at Afina. Focused on web automation, product support, and development. I have experience in cryptocurrency, machine learning, and creating custom bots and automation tools. Combining technical expertise with continuous self-improvement and integration of modern technologies to make working with Web3 efficient and understandable.