Back to blog

Why Playwright Gets Detected: Protocol, Runtime, and Behavioral Timing

A script can work locally yet hit CAPTCHAs, 403 errors, or login failures after deployment. The usual cause is not that a platform recognizes one specific tool, but that automated traffic leaves observable differences across protocol, runtime, fingerprint, network, and behavioral timing layers.

A recurring pattern looks like this: a script runs perfectly well locally, but after deployment it starts hitting human-verification challenges, 403 responses, or login failures. The first reaction is often to assume the tool itself has been recognized.

Platforms, however, rarely focus on identifying exactly which tool you used. What they evaluate is the difference between this visit and a visit from a real user. Playwright controls a browser; if the environment it launches differs noticeably from the browser environment a person normally uses, the traffic can be classified as automated. Those differences appear at several layers, and examining them separately makes the cause easier to understand.

自动化访问从协议、运行时、指纹、网络和行为时序五层累积风险信号

The protocol layer speaks before the page is rendered

At the protocol layer, the page content is not the main signal. What is visible is the shape of the request itself: the combination of request headers, the browser version and platform architecture exposed through UA Client Hints, and the ordering of parameters during connection establishment.

Automated environments can look unusually clean or uniform in these places. Expected headers may be missing, or every value may stay fixed in a way that does not resemble a machine that has been used by a person for a long time. This layer is inexpensive to evaluate and can produce a decision before the page renders, which is why it is widely used.

Runtime variables form the second layer

Once page scripts begin running, another set of environment variables becomes readable. Under the WebDriver standard, navigator.webdriver generally returns true when a browser is controlled by automation. Related signals include automation flags in launch arguments, whether window.chrome exists, whether navigator.plugins and navigator.permissions are complete, whether the browser runs headless, and whether plugin or extension lists are empty.

Real browsers usually include several default items, so an empty list can itself become a feature. Early detection work focused heavily on this layer because it was easy to observe. Today, few platforms rely on only one property; they tend to evaluate these values together.

Fingerprinting checks consistency, not isolated values

Below that are device-side parameters: Canvas and WebGL rendering output, AudioContext processing differences, font lists, screen parameters, time zone, language, and hardware information. None of these values is necessarily suspicious on its own, but together they form a relatively stable device profile.

Two patterns can look suspicious. First, the parameters may not agree with one another—for example, rendering output may resemble one class of GPU while the font set looks like it came from another operating system. Second, a whole group of environments may be exactly identical: if every task starts from the same configuration, every fingerprint can be the same. The platform then does not see one hundred devices; it sees the same device visiting one hundred times.

Network egress and geography are hard constraints

Network-side dimensions have little to do with the browser itself: whether an IP belongs to a data center or a residential connection, whether a proxy address has been heavily abused, whether the ASN belongs to a cloud provider or an ISP, whether DNS configuration matches the IP region, and whether the IP jumps frequently between countries.

A request whose time zone points to the United States while its egress is in Germany can be singled out without any advanced detection. Geographic contradictions are among the cheapest and easiest inconsistencies to spot in the entire system.

Behavioral timing accumulates over time

Human interaction is irregular: there may be a short pause before a click, typing speed varies, and people occasionally go back and correct something. Scripts often follow precise, repetitive timing, fixed navigation paths, no actions outside the target workflow, and a request density that is clearly higher than a person's.

Detection methods have continued to change over the past two years. In 2026, some protection vendors introduced continuous behavioral-verification engines that no longer make a single decision only on the first visit. Instead, they keep collecting mouse movement, click rhythm, scroll trajectories, and time on page throughout the session, sending the data back to the server in real time for risk scoring. Refreshing the page or moving to the next page does not reset the behavioral history; accumulated signals continue to build. That means features from a single page load are no longer enough—behavior is a process.

Why platforms treat these differences as risk signals

From a platform's perspective, the goal is not to determine which tool a visitor used, but whether the visit resembles a real person using the service normally. The platform bears costs from spam registrations, bulk scraping, and abusive requests, so contradictions in any dimension can raise the risk score, and contradictions across several dimensions are even more conspicuous.

Conversely, simply erasing features is not the answer. Real devices have fingerprints that are complete and internally consistent; a fingerprint with pieces deliberately removed can look abnormal as well. A more realistic standard is to ask three things: are the features complete, are the parameters consistent with one another, and is there reasonable variation between different environments?

Attribution is different from bypassing

Breaking the causes down to this level is meant to identify where the problem occurs, not to explain how to bypass protections. Technically reducing the chance of detection does not grant permission to collect data or automate a service. The boundaries are clear: follow the target site's robots rules and terms of service, do not collect personal information, do not bypass technical protection measures, control request frequency, and do not interfere with normal service operation. This principle is independent of any technical approach, but it has the highest priority.