Access https://infosimples.github.io/detect-headless to run several headless detection tests against your browser.
-
User Agent: in a browser running with
puppeteerin headless mode, user agent includesHeadless. -
App Version: same as User Agent above.
-
Plugins: headless browsers don't have any plugins. So we can say that if it has plugin it's headful, but not otherwise since some browsers, like Firefox, don't have default plugins.
-
Plugins Prototype: check if the
PluginandPluginsArrayprototype are correct. -
Mime Type: similar to Plugins test, where headless browsers don't have any mime type
-
Mime Type Prototype: check if the
MimeTypeandMimeTypeArrayprototype are correct. -
Languages: all headful browser has at least one language. So we can say that if it has no language it's headless.
-
Webdriver: this property is true when running in a headless browser.
-
Time elapse: it pops an
alert()on page and if it's closed too fast, means that it's headless. -
Chrome element: it's specific for
chromebrowser that has an elementwindow.chrome. -
Permission: in headless mode
Notification.permissionandnavigator.permissions.queryreport contradictory values. -
Devtool:
puppeteerworks ondevtools protocol, this test checks ifdevtoolis present or not. -
Broken Image: all browser has a default
nonzerobroken image size, and this may not happen on a headless browser. -
Outer Dimension: the attributes
outerHeightandouterWidthhave value 0 on headless browser. -
Connection Rtt: The attribute
navigator.connection.rtt,if present, has value 0 on headless browser. -
Mouse Move: The attributes
movementXandmovementYon everyMouseEventhave value 0 on headless browser.