Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Headless Chrome is Chrome running without a visible browser window. It still loads pages, executes JavaScript, lays out content, and exposes browser automation interfaces, but it does so unattended. Developers use it for UI tests, screenshots, PDFs, DOM inspection, scraping, and CI jobs where no person is present to click a window.

The important current distinction is between modern Headless, which uses Chrome’s regular browser implementation, and Headless Shell, the separate binary containing the former implementation. This guide explains the difference, shows command-line and Puppeteer examples, and gives a practical choice rule.

What “headless” means

“Headless” describes the user-interface mode, not a different kind of web page or a special server-side renderer. Chrome starts without displaying a visible window, navigates to a URL, renders the page, runs scripts, and can return a screenshot, PDF, serialized DOM, or test result.

Chrome for Developers defines the mode this way: “With Chrome Headless mode, you can run the browser in an unattended environment, without any visible UI.” The page is authored by Mathias Bynens and Peter Kvitek.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#1 Best Overall
HP 14" HD Chromebook Laptop for Students, Intel Quad-Core N4120(> N4020), 4GB RAM, 64GB eMMC, WiFi, Webcam, HDMI, USB-A&C, 14 Hours Battery Life, Zoom, Chrome OS, CUE Accessories
  • Intel Celeron N4120: 4 Cores & Threads, 1.1GHz Base Clock, Up to 2.6GHz Boost Clock, 4MB Cache, Intel UHD Graphics 600. The perfect combination of performance, power consumption, and value helps your device handle multitasking smoothly and reliably with four processing cores to divide up the work.
  • 14" HD Display: 14.0-inch diagonal, HD (1366 x 768), micro-edge, anti-glare. See your digital world in a whole new way. Enjoy movies and photos with the great image quality and high-definition detail of 1 million pixels.
  • Memory & Storage: 4 GB LPDDR4x & 64 GB eMMC Storage. Adequate high-bandwidth RAM to smoothly run multiple applications and browser tabs all at once. An embedded multimedia card provides reliable flash-based storage.
  • Ports:2 x USB 3.0 Type-A,1 x USB 3.0 Type-C,1 x HDMI,1 x Headphone Jack
  • Chrome OS: Chromebook is a computer for the way the modern world works, with thousands of apps. Enjoy the seamless simplicity that comes with Google Chrome and Android apps, all integrated into one laptop. It’s fast, simple, and secure.

Because Headless is still a browser, it differs from downloading a response with an HTTP client. A page can change its DOM after JavaScript runs, wait for network requests, apply CSS media rules, and display content that is absent from the original HTML response.

Modern Headless Chrome versus the old implementation

Modern Headless

Modern Headless, introduced in Chrome 112, uses the same browser implementation as regular Chrome. It creates platform windows but does not display them. That shared implementation is valuable when your test or capture must behave like a user’s normal Chrome session, including browser features and extensions.

In the Chrome binary, both --headless and --headless=new select this mode. In current releases, --headless is the normal spelling to use.

Headless Shell

The former Headless implementation is now distributed as a separate chrome-headless-shell binary. Chrome’s documentation describes it as based on Chromium’s //content module and having substantially fewer dependencies. That can suit automated screenshots or scraping when the full browser is unnecessary.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The documentation also describes modern Headless as the more authentic, feature-rich option for high-accuracy end-to-end testing and extension testing. These are qualitative trade-offs: the official material does not provide a numeric speed, memory, or reliability benchmark.

What changed in Chrome 132

Chrome 132 removed the old implementation from the regular Chrome binary. As a result, --headless=old no longer starts the legacy mode. A workflow that specifically depends on that implementation must install and invoke chrome-headless-shell, or migrate to modern Headless.

When developers use Headless Chrome

  • Automated UI tests: navigate, click, type, assert text, and verify complex interfaces in CI/CD.
  • Screenshots: capture a viewport or a full page after scripts and lazy-loaded images finish.
  • PDF generation: print a rendered page using Chrome’s print engine.
  • DOM inspection: inspect the post-JavaScript DOM rather than only the original response.
  • Unattended jobs: run browser tasks on servers, containers, scheduled workers, or build agents without a desktop session.
  • Reproducible test environments: pair a pinned Chrome for Testing binary with an automation library and a known configuration.

Headless is not automatically faster than visible Chrome, identical across every operating system, or a replacement for all server-side rendering approaches. Rendering still consumes CPU, memory, network access, fonts, and other browser dependencies.

Run simple jobs from the command line

The Chrome command-line interface is useful for one-off captures and diagnostics. Replace chrome with the path to your installed binary when it is not on PATH.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Inspect the rendered DOM

chrome --headless --dump-dom https://example.com

--dump-dom serializes the DOM after Chrome has parsed the document and run scripts. It is therefore not equivalent to curl https://example.com, which returns the HTTP response body without running browser JavaScript.

Capture a screenshot

chrome --headless --screenshot=page.png --window-size=1440,900 https://example.com

The window-size setting establishes the viewport used for the capture. For a full-page result or advanced waiting behavior, use an automation library or a screenshot service rather than assuming that one command-line flag handles every site.

Print a PDF

chrome --headless --print-to-pdf=page.pdf https://example.com

The output reflects the rendered page and Chrome’s print behavior, including print CSS and pagination rules.

Automate Headless Chrome with Puppeteer

Puppeteer is a JavaScript library for automating Chrome and Firefox. Its documented tasks include navigation, interaction, screenshots, PDFs, and testing complex interfaces. With the setting below, headless: true launches modern Chrome Headless.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
import puppeteer from 'puppeteer';

const browser = await puppeteer.launch({
  headless: true
});

try {
  const page = await browser.newPage();
  await page.setViewport({ width: 1440, height: 900, deviceScaleFactor: 1 });
  await page.goto('https://example.com', { waitUntil: 'networkidle2' });
  await page.screenshot({ path: 'example.png', fullPage: true });
  await page.pdf({ path: 'example.pdf', format: 'A4', printBackground: true });
  console.log((await page.title()) || '(untitled)');
} finally {
  await browser.close();
}

Puppeteer downloads a compatible Chrome for Testing binary by default. Keeping that browser version and your Puppeteer version controlled helps CI runs reproduce the same behavior. Set headless: false when debugging with a visible window. Puppeteer also documents headless: 'shell' for launching the standalone Headless Shell when that is the deliberate choice.

const browser = await puppeteer.launch({
  headless: 'shell'
});

WebDriver-based tools such as Selenium can also drive headless Chrome. Choose Puppeteer or WebDriver according to your project’s language, existing test framework, and driver management rather than treating one as universally superior.

Rank #3
ASUS 2026 15" FHD IPS Chromebook, Intel Processor Up to 2.80GHz, 4GB DDR4, 128GB Storage, HDMI, Super-Fast WiFi, Chrome OS, Pastel Blue, Renewed
  • Intel Processor Up to 2.80GHz, 4GB DDR4, 128GB Storage
  • 15" FHD IPS Display, Intel UHD Graphics
  • 1x USB Type C, 1 x USB Type A, 1x Headphone/Microphone Combo Jack, HDMI
  • Super Fast WiFi and Bluetooth, Integrated Webcam
  • Chrome OS, AC Charger Included, Pastel Blue

How to choose between modern Headless and Headless Shell

Decision factor Modern Headless Headless Shell
Implementation Chrome’s regular browser implementation Former Headless implementation in a separate binary
Browser fidelity Best fit when normal Chrome behavior, extensions, or high-accuracy end-to-end tests matter Use when the full browser is unnecessary
Dependencies Full Chrome dependency footprint Chrome documents substantially fewer dependencies
Legacy compatibility Requires migration from workflows tied to old Headless Provides the old implementation after Chrome 132
Benchmark evidence No numeric speed, resource, or reliability comparison is established in the official guidance

A practical rule follows: start with modern Headless unless you have a measured or operational reason to reduce dependencies and do not need full Chrome fidelity. If a pre-Chrome-132 workflow explicitly used old Headless, either test a migration to modern mode or install the shell and pin its version.

Reproducible testing in CI

  1. Pin the browser and automation versions. Chrome for Testing is intended for controlled automation installations; record the exact browser, Puppeteer or Selenium, and driver versions.
  2. Standardize the execution environment. Use the same container image or operating-system family, fonts, locale, timezone, viewport, and device scale factor across agents.
  3. Wait for a defined condition. Prefer a selector, application-ready signal, or an appropriate network-idle condition over an arbitrary short sleep.
  4. Collect artifacts. Save screenshots, PDFs, console output, browser logs, and traces when a test fails.
  5. Run a visible reproduction when diagnosing. Re-run with headless: false locally to see overlays, navigation failures, or permission prompts that are invisible in CI.

Even with these controls, rendering can vary with browser updates, fonts, graphics libraries, page timing, and third-party resources. Pinning reduces variance; it does not make every website deterministic.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Common problems and fixes

“Chrome is not found” or the process exits immediately

Install a compatible Chrome/Chrome for Testing binary, provide its executable path to your library, and verify that the CI user can execute it. In containers, also install the runtime libraries required by that binary.

The screenshot is blank or missing content

Check the URL, navigation errors, authentication, and JavaScript console output. Wait for a meaningful selector or application-ready state. Confirm that the page is not blocking the CI IP, requiring a consent interaction, or loading assets from an inaccessible host.

Dynamic content is absent

Do not use curl as a substitute for a browser. Use --dump-dom or Puppeteer, wait for the component to render, and ensure the test does not close the browser before pending requests finish.

Fonts or layout differ from a developer laptop

Install and pin the same fonts, viewport, device scale factor, locale, timezone, and browser build. Compare a captured screenshot and browser logs from both environments.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

A legacy command no longer works

After Chrome 132, remove --headless=old. Test modern --headless, or invoke the separately installed chrome-headless-shell when compatibility with the former implementation is required.

Rank #4
HP Chromebook 14 Laptop, Intel Celeron N4120, 4 GB RAM, 64 GB eMMC, 14" HD Display, Chrome OS, Thin Design, 4K Graphics, Long Battery Life, Ash Gray Keyboard (14a-na0226nr, 2022, Mineral Silver)
  • FOR HOME, WORK, & SCHOOL – With an Intel processor, 14-inch display, custom-tuned stereo speakers, and long battery life, this Chromebook laptop lets you knock out any assignment or binge-watch your favorite shows..Voltage:5.0 volts
  • HD DISPLAY, PORTABLE DESIGN – See every bit of detail on this micro-edge, anti-glare, 14-inch HD (1366 x 768) display (1); easily take this thin and lightweight laptop PC from room to room, on trips, or in a backpack.
  • ALL-DAY PERFORMANCE – Reliably tackle all your assignments at once with the quad-core, Intel Celeron N4120—the perfect processor for performance, power consumption, and value (2).
  • 4K READY – Smoothly stream 4K content and play your favorite next-gen games with Intel UHD Graphics 600 (3) (4).
  • MEMORY AND STORAGE – Enjoy a boost to your system’s performance with 4 GB of RAM while saving more of your favorite memories with 64 GB of reliable flash-based eMMC storage (5).

CI hangs

Set navigation and operation timeouts, close every browser in a finally block, and investigate network requests that never settle. A network-idle condition can be unsuitable for pages with long-lived connections; wait for a specific application signal instead.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Or skip the browser setup

If your goal is a reliable website image or PDF rather than maintaining Chrome in your own environment, ScreenshotNeo provides a website screenshot API and MCP server. One GET request returns PNG, JPEG, WebP, or PDF output.

For a direct call, see the ScreenshotNeo documentation:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);

Before capture, ScreenshotNeo accepts cookie or consent banners and removes more than 60 known consent platforms, newsletter popups, and chat widgets; each step can be turned off. Bot checks, CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed as clean shots, and response headers report the page verdict and billing status. Its MCP server offers take_screenshot, get_page_info, and capture_pdf for Claude, Cursor, and other MCP clients. The Free plan includes 1,000 shots per month without a card; paid plans start at $5 for 3,000 shots.

Create a free ScreenshotNeo account to try the API with 1,000 screenshots per month and no card.

Is Headless Chrome right for your job?

  • Use modern Headless when you need Chrome-like behavior, extensions, or faithful end-to-end tests.
  • Use Headless Shell when its smaller dependency footprint fits a narrowly scoped screenshot or scraping workflow and full Chrome features are unnecessary.
  • Use Puppeteer or Selenium when you need multi-step interactions, waits, assertions, and test reports.
  • Use the command line for straightforward DOM dumps, screenshots, and PDFs.
  • Use a managed API when browser installation, cleanup, scaling, and consent handling would be more work than the capture itself.

Frequently Asked Questions

Does Headless Chrome require a graphical desktop?

No. It runs without a visible browser UI and is designed for unattended environments such as CI workers and servers.

Is Headless Chrome the same as Chromium?

Headless is an operating mode of Chrome; Headless Shell is a separate binary based on the former implementation. The exact binary and version you install determine the behavior.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Can I use browser extensions in Headless mode?

Modern Headless is the documented choice when extension testing or full Chrome behavior matters. Test the specific extension and Chrome version you deploy.

What should I pin for stable screenshot tests?

Pin the browser and automation-library versions, then standardize fonts, viewport, locale, timezone, device scale factor, and network-dependent test data.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.