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

Use --headless for current Chrome with Selenium. Chrome’s current documentation describes Headless as unified with headful Chrome and shows Selenium passing the bare flag. --headless=chrome and --headless=new are transition-era spellings: Selenium’s 2023 migration guidance associates the former with Chrome 96–108 and the latter with Chrome 109 onward during the rollout. They should not be presented as three separate, interchangeable modes in a current setup.

The short answer

Set the argument in your Chrome options object and let Selenium start Chrome in Headless mode:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument("--headless")
driver = webdriver.Chrome(options=options)

try:
    driver.get("https://example.com")
    print(driver.title)
finally:
    driver.quit()

This is the current Chrome documentation’s Selenium pattern. The browser still uses the normal Chrome binary; Headless changes how it runs without a visible window. You can use the same session for navigation, DOM interaction, screenshots, downloads and other WebDriver operations, subject to the behavior of the page and your test.

What each spelling means

Argument Chrome era What to do today
--headless Current documented invocation Use this with current Chrome and Selenium. Chrome documents Headless and headful as unified modes.
--headless=chrome Transition syntax for Chrome 96–108, according to Selenium’s 2023 migration post Keep it only when maintaining an environment deliberately pinned to that transition-era behavior.
--headless=new Transition syntax used after Chrome 109 while the newer implementation rolled out Recognize it in older projects, but do not choose it as the primary spelling for current Chrome documentation.

The names describe a rollout, not three permanent current products. During the transition, Chrome exposed different arguments to select the newer implementation. Current Chrome documentation now presents the unified implementation through the bare flag.

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.

How Chrome’s Headless implementation changed

Chrome 96 through 108

Selenium’s January 2023 migration guidance records --headless=chrome as the spelling for the newer Headless implementation in Chrome versions 96–108. If a historical build, container image or test fixture explicitly targets one of those versions, that argument explains what the code is doing.

Chrome 109 and later during the rollout

The same Selenium guidance records --headless=new after Chrome 109. This was an opt-in name while the implementation was being integrated. Many examples copied during that period still contain it, which is why it appears in current code searches even though the latest Chrome example uses --headless.

Chrome 112: unified behavior

Chrome’s Headless documentation says the updated mode became unified with headful Chrome in the Chrome 112 update. In practical terms, the Headless browser is no longer a separate, reduced browser implementation selected by a special value-bearing flag; it is Chrome running without a visible UI.

Chrome 132.0.6793.0 and the old shell

Chrome’s documentation states that, since version 132.0.6793.0, the old Headless implementation is available only as the standalone chrome-headless-shell binary. It is not selected as an ordinary mode inside the regular Chrome binary. This matters when reading old deployment notes: “old Headless” and “new Headless” refer to implementation history, while the regular current Chrome invocation is the bare flag.

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

Python: a complete Selenium setup

Minimal navigation test

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument("--headless")
driver = webdriver.Chrome(options=options)

try:
    driver.set_window_size(1365, 900)
    driver.get("https://example.com")
    print({
        "title": driver.title,
        "url": driver.current_url,
    })
finally:
    driver.quit()

Options.add_argument passes a Chrome command-line switch. The window size is independent of the Headless selection; set it when responsive layout or screenshot dimensions matter. Always quit in a finally block so a failed assertion does not leave Chrome processes behind.

Keeping a transition-era project running

If a pinned test image requires the historical argument, change only the option line:

options.add_argument("--headless=new")

Do not add all three flags. They are alternative spellings for different rollout contexts, not settings that should be combined.

JavaScript with Selenium

Chrome’s official Selenium example uses the same bare argument in JavaScript:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
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
const { Builder } = require('selenium-webdriver');
const chrome = require('selenium-webdriver/chrome');

const options = new chrome.Options();
options.addArguments('--headless');

(async function run() {
  const driver = await new Builder()
    .forBrowser('chrome')
    .setChromeOptions(options)
    .build();

  try {
    await driver.get('https://example.com');
    console.log(await driver.getTitle());
  } finally {
    await driver.quit();
  }
})();

The important detail is the argument list, not a deprecated convenience method. Selenium’s headless convenience method was deprecated in Selenium 4.8.0 and removed in 4.10.0; configure the mode through Chrome arguments instead.

Driver and version compatibility

Selenium’s Chrome documentation requires the Chrome and ChromeDriver major versions to match. Check both before changing Headless flags. A session that fails before your first navigation is often a driver/browser pairing problem rather than a Headless problem.

  • Record the browser major version from the Chrome installation used by the test runner.
  • Use a ChromeDriver with the same major version. Do not assume the driver on your workstation is the one inside CI.
  • Confirm the binary path when multiple Chrome installations are present. A driver can match one installation while Selenium launches another.
  • Log the exact arguments and versions in CI. This makes an image upgrade distinguishable from a test regression.

Selenium’s documentation lists --headless=new among commonly used arguments, while Chrome’s current page demonstrates --headless. Treat that apparent disagreement as version-era documentation, not evidence that three current modes remain available.

Choosing the right argument

Use the bare flag for a new project

For a newly created test, scraper or automation job using a current Chrome release, use --headless. It is the spelling shown by the current Chrome Headless documentation and avoids baking a migration-era alias into new code.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #4
Lenovo Chromebook 2-in-1 - Lightweight Laptop - Google Gemini - Intel® N150 CPU - 14" WUXGA IPS Touchscreen Display - 4GB RAM - 128GB UFS Storage - Integrated Intel® Graphics - Luna Grey
  • THE BETTER WAY TO LAPTOP – Imagine a Chromebook that’s as flexible as your day: thin and lightweight with built-in Google apps and stress-free security.
  • TAKE HITS KEEP MOVING – Sleek, light, and built to last- the Chromebook 2-in-1 is just 0.69” thick and 3.3lbs. Enjoy long-lasting battery life, fast charging, and military-grade durability for nonstop productivity wherever life takes you.
  • PERFORMANCE THAT MATCHES YOUR HUSTLE – Fuel your ideas with an Intel Core processor and 128GB storage. Boot up in under 10 seconds to start the day powerfully efficient.
  • FLEX YOUR CREATIVITY ANYWHERE, ANYTIME – Create, work, or unwind your way with a versatile 2-in-1 design. Flip easily between laptop, tent, and tablet modes with a responsive touchscreen built for flexibility.
  • BRILLIANT VIEWS AND IMMERSIVE AUDIO – See, hear, and create with awesome clarity. The WUXGA display brings rich detail to your work and play, while audio tuned by Waves MaxxAudio provides immersive, balanced sound.

Retain an alias only for a pinned environment

Use --headless=chrome or --headless=new only when the project intentionally pins a browser version or depends on a documented compatibility constraint from that era. Put the reason beside the argument and pin the browser and driver together; otherwise a future maintainer may “modernize” one part and create a mismatched environment.

Do not choose by presumed speed

The official material establishes version and implementation history, not a controlled speed, memory or visual-equivalence benchmark. A flag name is not evidence that one spelling is faster. Measure your own workload if performance is important, keeping the Chrome version, driver, page set, viewport and machine constant.

Troubleshooting Headless Chrome

“Chrome failed to start” or the session closes immediately

  • Check that ChromeDriver and Chrome have the same major version.
  • Verify that Selenium is launching the intended Chrome binary, especially on CI hosts with multiple installations.
  • Run the smallest script first: create the driver, print the title of a simple page, and quit. Add test-specific arguments only after that works.

The code uses headless() and fails after a Selenium upgrade

Replace the removed or deprecated convenience call with options.add_argument("--headless") (or the equivalent JavaScript addArguments call). Selenium 4.8.0 deprecated the convenience method and Selenium 4.10.0 removed it.

An old tutorial says to use --headless=chrome

Identify the Chrome version that tutorial targets. That spelling belongs to the Chrome 96–108 transition documented by Selenium. For current Chrome, follow the bare-flag example instead.

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

An old tutorial says to use --headless=new

It is probably describing the post-Chrome-109 rollout. The argument may still appear in legacy suites, but current Chrome documentation uses --headless. Do not infer that the value-bearing form is a separate modern browser mode.

The page looks different from a visible-browser run

Compare the inputs that affect rendering: Chrome version, viewport size, device scale, logged-in state, cookies, network conditions and timing. Headless mode alone does not establish pixel identity, and the cited documentation provides no cross-environment visual benchmark.

A test hangs on page load

Separate browser startup from page readiness. Add explicit waits for the condition your test needs, capture the current URL and title when a timeout occurs, and ensure the driver is always quit. A page that never finishes its own network activity can make an unrestricted load wait look like a Headless failure.

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 clean website image rather than browser-level interaction, ScreenshotNeo provides a single HTTP request. It accepts the consent banner like a visitor, removes more than 60 known consent platforms plus newsletter popups and chat widgets before capture, and reports whether a response was clean and billable. Bot checks, CAPTCHAs, blank pages, timeouts, failed loads and cache hits are not billed.

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

Its MCP server exposes take_screenshot, get_page_info and capture_pdf to Claude, Cursor and other MCP clients. That is useful when an AI agent needs a page image without you building and maintaining a Selenium browser session.

One-call examples

See the full parameter reference in the ScreenshotNeo documentation.

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}`);

The API also supports full-page captures with lazy images loaded, CSS-selector element captures, dark mode, device presets and custom viewports, retina scale, PDF output, custom CSS and JavaScript, clicks before capture, selector or network-idle waits, ad and tracker blocking, headers, cookies, user agents, Authorization, timezone, geolocation, transparent backgrounds, resizing, TTL-based caching, signed links, asynchronous jobs with signed webhooks, bulk capture of up to 100 URLs per call, a usage API and an OpenAPI specification. Common parameter names used by other screenshot APIs are accepted to ease migration.

Plan Included shots Price
Free 1,000 per month $0, no card
Starter 3,000 $5
Growth 15,000 $15
Pro 60,000 $39
Scale 250,000 $99
Business 1,000,000 $249

Yearly billing gives two months free, and every feature is available on every plan. Start with 1,000 free screenshots a month with no card, then move to a paid plan when your capture volume requires it.

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.

Operational checklist

  1. Choose the browser version you actually deploy.
  2. Match ChromeDriver’s major version to Chrome’s major version.
  3. Pass the bare --headless argument for current Chrome.
  4. Keep an old value-bearing flag only when a pinned legacy environment requires it.
  5. Set the viewport explicitly when responsive layout affects assertions or images.
  6. Log versions, arguments, URL and failure details in CI.
  7. Quit every driver in cleanup code.
  8. Use measured, workload-specific tests for performance decisions; flag names do not supply a benchmark.

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.