```yaml
product: AlterLab
title: "Headless Browser Detection — Web Scraping Glossary | AlterLab"
comparison_context: "AlterLab is an alternative to Firecrawl, ScrapingBee, and Bright Data."
source_url: https://alterlab.io/glossary/headless-detection
```

anti-bot

# Headless Browser Detection

Headless browser detection is the set of JavaScript checks anti-bot systems use to identify browsers running without a graphical display, which are strong bot indicators.

Headless browsers expose subtle differences from headed browsers. Classic detection checks include: `navigator.webdriver === true` (set by WebDriver protocol automation), missing `window.chrome` object properties present in real Chrome, `navigator.plugins.length === 0` (no browser plugins installed in headless mode), unusual screen dimensions or zero-size window, and inconsistent rendering of canvas or WebGL operations due to the absence of a GPU.

Modern anti-bot systems have moved beyond simple property checks to behavioural and runtime-environment analysis: they measure JavaScript performance timing patterns, probe the browser's event loop scheduling, and verify that GPU-rendered graphics produce pixel-accurate output consistent with a real graphics driver.

Stealth libraries (puppeteer-extra-plugin-stealth, Playwright's built-in stealth mode, undetected-chromedriver) patch these detection vectors by overriding navigator properties, spoofing plugin lists, adding realistic WebGL rendering, and removing WebDriver traces from the JavaScript environment.

### What is Headless Browser Detection?

Headless browser detection is the set of JavaScript checks anti-bot systems use to identify browsers running without a graphical display, which are strong bot indicators.

### How does AlterLab handle Headless Browser Detection?

Stealth libraries (puppeteer-extra-plugin-stealth, Playwright's built-in stealth mode, undetected-chromedriver) patch these detection vectors by overriding navigator properties, spoofing plugin lists, adding realistic WebGL rendering, and removing WebDriver traces from the JavaScript environment.

## Examples

```
// Check if your headless browser is detectable
// Run this in the browser console (or via page.evaluate):
console.log({
  webdriver: navigator.webdriver,
  plugins: navigator.plugins.length,
  languages: navigator.languages,
  chrome: typeof window.chrome,
});
// A real Chrome browser: webdriver: false, plugins: 3+, languages: ["en-US",...]
```

## Related Terms

[Headless BrowserA web browser that runs without a graphical user interface, executing JavaScript and rendering pages exactly as a real browser would.](https://alterlab.io/glossary/headless-browser)[Browser FingerprintingA technique anti-bot systems use to identify bots by collecting dozens of browser attributes including Canvas, WebGL, and timing signatures.](https://alterlab.io/glossary/browser-fingerprinting)[Stealth ModeBrowser automation patches that normalise headless browser signals to match genuine user browser profiles and navigate browser environment checks.](https://alterlab.io/glossary/stealth-mode)[Behavioral AnalysisBehavioral analysis is an anti-bot technique that tracks mouse movements, keystrokes, scroll patterns, and timing to distinguish humans from bots.](https://alterlab.io/glossary/behavioral-analysis)[Anti-Bot ProtectionSystems deployed by websites to detect and block automated traffic using TLS fingerprinting, CAPTCHA challenges, and behavioural analysis.](https://alterlab.io/glossary/anti-bot-protection)

## Extract Headless Browser Detection data from any website

AlterLab returns clean, structured data from any public URL — no scraper infrastructure needed. Start free, no credit card required.

[View API docs](https://alterlab.io/docs/api/rest)

[Back to Glossary](https://alterlab.io/glossary)