Skip to content

How is a headless browser detected?

Headless detection asks whether a browser is running without a real UI session. Classic signals: the automation launch flag, absent or stubbed window/chrome APIs, empty navigator.plugins/mimeTypes, permission and media-device quirks, and rendering that took a software path instead of the GPU.

Newer headless modes removed the obvious ones — they share the normal User-Agent and run real GPU paths — so detection moved to subtler coherence checks: whether the reported GPU matches the actual render, whether a worker agrees with the main thread, and whether window dimensions and device metrics are self-consistent.

Because these are coherence checks, the durable fix is a browser that's genuinely consistent, not one that patches a single flag. Clearcote drops the automation flag by default and keeps the render and API surface coherent. See how detection works and navigator.webdriver.