All articles Bot detection

Detecting Headful (Non-Headless) Browser Automation

Running automation in headful mode, a full browser window instead of headless, is a deliberate move to defeat the large body of headless-Chrome detection built up over the years. On a virtual display like Xvfb, a headful bot renders and reports like a real desktop browser, closing the headless gap, and it leaves the rest of the automation surface exactly as exposed as before.

Headless Chrome historically leaked in dozens of ways: missing or altered feature support, different window.chrome behavior, distinctive rendering, and telltale User-Agent fragments. Detectors learned all of them. Rather than patch each leak, operators sidestep the category by launching a normal windowed browser on a virtual display, so the headless-specific tells simply do not apply. If your defense is essentially a headless test, headful walks through it.

What headful does not fix

Switching to headful changes one axis, the headless-versus-headful rendering and feature profile, and nothing else:

  1. CDP artifacts remain. A headful browser driven by Puppeteer or Playwright is still driven over the DevTools Protocol, so execution-context timing and Runtime quirks persist. Headful mode is orthogonal to the controller.
  2. Virtual-display signatures. Xvfb and similar virtual framebuffers render with a specific, detectable profile: characteristic screen metrics, missing or generic GPU, absent color-management behavior, and font-smoothing that differs from real desktop hardware.
  3. Scripted behavior. Nothing about a visible window makes input human. Pointer paths and keystroke timing stay machine-regular.
  4. Server-environment tells. Headful bots usually run on datacenter hosts, so the IP, ASN, and thin server font environment still contradict a claimed consumer desktop.

The virtual-display fingerprint

The most headful-specific signal is the display itself. Real desktops have GPUs with genuine driver strings, color management, and hardware-accelerated compositing. A virtual display commonly reports a software renderer or a suspiciously generic GPU, exact power-of-two screen dimensions, no secondary display, and rendering that lacks subpixel behavior tied to real hardware. Correlating the claimed desktop profile against these rendering signals catches the mismatch, which is one more reason server-side scoring of the whole environment beats any single client-declared property.

Behavior and identity carry the weight

With the environment gap closed, behavior and identity do the heavy lifting:

  • Input entropy. Human cursor movement jitters, overshoots, and corrects; scripted movement interpolates cleanly to exact targets.
  • Timing. Keystroke dwell and flight times and inter-action pauses are machine-regular under automation.
  • Cross-session identity. Headful farms run off a small pool of images and hosts. A stable visitorId collapses the “unique” sessions, and the reputation network pre-flags a signature seen elsewhere.

The single-axis trap

Headful automation is a textbook example of a wider failure mode in bot defense: over-indexing on one detection axis. Years of research into headless-Chrome tells produced a rich, well-documented catalog, and it was tempting to treat “is this headless” as a proxy for “is this a bot.” Operators simply changed the one variable that catalog measured. The lesson is not that headless detection was wrong, it is that any defense resting on a single axis inherits a single point of failure. A robust posture spreads weight across independent axes, CDP provenance, rendering environment, behavior, network, and cross-session identity, so that flipping any one of them, headless to headful, datacenter to residential proxy, plugin to extension, still leaves the operator exposed on the others. That redundancy is what turns detection from a puzzle an operator can solve with one config change into a cost they cannot escape without solving every axis at once, which no current tool does.

A detection recipe

  1. Score CDP artifacts, which headful mode does not touch.
  2. Profile rendering for virtual-display signatures against the claimed hardware.
  3. Cross-check screen metrics, GPU strings, and color management.
  4. Measure behavioral entropy and timing for scripted flatness.
  5. Correlate the visitorId across sessions and against reputation data.
  6. Emit reason codes so the display-versus-claim contradiction is visible.

The takeaway

Headful automation is a smart response to a defense that over-invested in headless-specific checks. It proves a broader point: any detection strategy anchored to a single evasion axis gets sidestepped the moment operators change that axis. Weighting CDP artifacts, rendering provenance, behavior, and identity, none of which headful mode addresses, is what keeps detection robust as bots switch modes. An operator can flip from headless to headful in a single launch flag, but they cannot simultaneously fix a virtual-display rendering signature, remove the CDP controller, humanize scripted input, and de-correlate a cross-session identity, so the mode switch that beats a one-dimensional defense barely dents a multi-axis one.

See how a headful, virtual-display session scores against live signals in the playground, free to start.

Try it free

Prynt is device intelligence with a free tier — visitor IDs, bot & fraud Smart Signals, and behavioral biometrics, powered by a cross-site network. Start free.

Keep reading