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.

For a normal local ChromeDriver run, do not set debuggerAddress. Create a Chrome options object and pass it to ChromeDriver; ChromeDriver will start a new Chrome session. The capability is only needed when you deliberately attach to a Chrome process that is already running with a DevTools debugging server. A Selenium Grid URL is a different setting: it is the remote WebDriver endpoint, not a debugger address.

What debuggerAddress actually controls

ChromeDriver supports two different session models:

Model Who starts Chrome? What you configure Typical use
New local session ChromeDriver Chrome options only; omit debuggerAddress Tests, scripts and local automation
Attach to an existing session You or another process Chrome’s DevTools host and port in debuggerAddress Continue work in a browser you launched separately
Remote WebDriver/Grid A Selenium server or Grid node The Grid URL plus browser options Remote or distributed execution

ChromeDriver documents debuggerAddress as a Chrome-specific capability in hostname/ip:port form. It is not a required HTTP header, a universal WebDriver setting, or a synonym for a Grid endpoint.

Start a fresh Chrome session without the capability

Python (Selenium 4)

Install Selenium with pip install -U selenium, then let Selenium Manager find a compatible driver (or provide your own driver installation):

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
# Add ordinary options here, for example:
# options.add_argument("--headless=new")
# options.add_argument("--window-size=1440,900")

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

There is no debuggerAddress assignment. Calling webdriver.Chrome(options=options) asks ChromeDriver to launch and own the browser process.

Java

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

public class FreshChrome {
  public static void main(String[] args) {
    ChromeOptions options = new ChromeOptions();
    // options.addArguments("--headless=new");
    WebDriver driver = new ChromeDriver(options);
    try {
      driver.get("https://example.com");
      System.out.println(driver.getTitle());
    } finally {
      driver.quit();
    }
  }
}

Selenium 4 uses browser-specific options classes for capabilities. Keep normal Chrome arguments and preferences in ChromeOptions; do not add a debugger capability unless you need attachment.

JavaScript (Node.js)

const { Builder } = require('selenium-webdriver');
const chrome = require('selenium-webdriver/chrome');

(async () => {
  const options = new chrome.Options();
  // options.addArguments('--headless=new');
  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();
  }
})();

When attaching to an existing Chrome is appropriate

Use debuggerAddress only when a separate Chrome process was started with remote debugging enabled and you need ChromeDriver to connect to it. The address must point to that process’s DevTools host and port; it does not launch the browser for you.

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

options = Options()
options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
driver = webdriver.Chrome(options=options)
try:
    print(driver.current_url)
finally:
    driver.quit()

This is a different workflow from a fresh session. The existing browser must be reachable, the port must be correct, and the Chrome/ChromeDriver versions and profile state must be compatible. Avoid sharing a normal interactive profile with concurrent automation; use a dedicated profile when you control the launch.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #2
Sale
HTML and CSS: Design and Build Websites
  • HTML CSS Design and Build Web Sites
  • Comes with secure packaging
  • It can be a gift option

Why attached sessions can reject commands

ChromeDriver loads an automation extension when it starts a new Chrome session. An already-running browser did not receive that startup extension, so some commands can be unavailable after a remote-debugging attachment. A documented example is an operation involving browser-window resizing.

If you receive operation not supported when using remote debugging, ChromeDriver’s documented remedy is: “If you see the error “operation not supported when using remote debugging”, try rewriting the test so that it launches a new Chrome session.” Remove the debuggerAddress capability and construct a new driver instead.

Do not confuse it with a Selenium Grid URL

For Grid or another Remote WebDriver service, supply the server’s WebDriver URL to the remote client and pass browser options separately. The URL is where WebDriver commands are sent; it is not a Chrome DevTools address.

Python remote example

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

options = Options()
driver = webdriver.Remote(
    command_executor="https://grid.example.test/wd/hub",
    options=options,
)
try:
    driver.get("https://example.com")
finally:
    driver.quit()

Replace the example endpoint with the URL supplied by your Grid administrator. Do not put that URL into options.add_experimental_option("debuggerAddress", ...).

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

Choosing the right configuration

  • Need an isolated test browser? Omit debuggerAddress; ChromeDriver launches a fresh session.
  • Need to continue in a browser already open? Start that browser with DevTools debugging and set its host and port.
  • Need a remote worker? Use webdriver.Remote (or the equivalent client API) with the Grid URL and browser options.
  • Only attachment fails? Prefer a new session if your test uses commands dependent on ChromeDriver’s startup automation extension.

Troubleshooting checklist

Chrome starts, then the driver exits

  • Remove any stale debuggerAddress capability and retry a fresh session.
  • Confirm Chrome and ChromeDriver compatibility, and update Selenium so Selenium Manager can resolve a driver when appropriate.
  • In CI, add a supported headless argument and ensure the process has permission to create a profile and display resources.

“cannot connect to chrome at 127.0.0.1:9222”

  • Use attachment only if Chrome was actually launched with remote debugging enabled.
  • Check that the host and port match the process and that a firewall, container network or namespace does not hide the port.
  • If you do not need the existing browser, delete the capability and let ChromeDriver launch Chrome.

“operation not supported when using remote debugging”

The session is attached to an existing browser and lacks a startup-loaded automation extension needed by that command. Rewrite the test to launch a new Chrome session, as ChromeDriver recommends, rather than trying to treat the Grid URL as a debugger address.

The script opens the wrong tab or profile

An attached session inherits the windows, tabs, cookies and profile of the browser you launched. Select the intended window explicitly, or use a clean, dedicated profile. A fresh ChromeDriver session avoids inherited state.

Remote execution cannot create a session

Check the Grid endpoint, credentials and node availability. Pass a valid ChromeOptions object to the remote driver. Do not configure debuggerAddress unless the Grid node specifically exposes an existing Chrome DevTools session for attachment.

Reliability, security and maintenance considerations

A fresh session gives ChromeDriver ownership of startup and normally exposes the command set expected by WebDriver. Attachment preserves an existing session’s state, but also its tabs, extensions, cookies and possible user activity. A debugging port is a powerful local control interface; expose it only on a trusted interface and avoid publishing it beyond the automation host.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #4
Sale
Web Design with HTML, CSS, JavaScript and jQuery Set
  • Brand: Wiley
  • Set of 2 Volumes
  • A handy two-book set that uniquely combines related technologies Highly visual format and accessible language makes these books highly effective learning tools Perfect for beginning web designers and front-end developers

Documentation and APIs change. ChromeDriver’s troubleshooting page was updated on 2024-12-17, while Selenium’s Chrome documentation shows a 2026-07-17 modification and Selenium API references identify version 4.49.0. Verify the exact Selenium, Chrome and driver versions used by your project before relying on version-specific behavior.

Or skip the browser setup

If your actual goal is to obtain a page image or PDF rather than drive an interactive browser, ScreenshotNeo provides a single HTTP request. It accepts consent banners before capture and removes more than 60 known consent platforms, newsletter popups and chat widgets; each cleanup step can be disabled. Bot checks, CAPTCHAs, blank pages, timeouts, failed loads and cache hits are not billed, and the response identifies the result with X-Page-Verdict and X-Billed headers.

See the ScreenshotNeo API documentation for all options, including full-page lazy-image loading, CSS-selector element capture, dark mode, device presets, arbitrary viewports, retina scale, PDF paper and page-range controls, custom CSS/JavaScript, clicks, waits, blocking rules, headers, cookies, user agents, authorization, timezone, geolocation, transparent backgrounds, resizing, TTL caching, signed links, asynchronous webhooks, bulk capture (100 URLs per call), usage reporting and the OpenAPI specification. An MCP server exposes take_screenshot, get_page_info and capture_pdf to Claude, Cursor and other MCP clients.

cURL

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

Python

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)

Node.js

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 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 it.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

FAQ

Is debuggerAddress required by Selenium 4?

No. It is optional and Chrome-specific; ordinary ChromeDriver construction works without it.

Can I use a debugger address and a Grid URL together?

They identify different endpoints. A Grid URL routes WebDriver commands to a remote server, while debuggerAddress identifies an existing Chrome DevTools server. Combine them only when the remote environment explicitly supports that attachment model.

Will omitting the capability delete my cookies?

A newly launched session normally starts with a new temporary browser state. If you need persistent state, configure a profile deliberately rather than attaching accidentally to a user’s running browser.

Frequently Asked Questions

Is `debuggerAddress` required by Selenium 4?

No. It is optional and Chrome-specific; ordinary ChromeDriver construction works without it.

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

Can I use a debugger address and a Grid URL together?

They identify different endpoints. A Grid URL routes WebDriver commands to a remote server, while `debuggerAddress` identifies an existing Chrome DevTools server. Combine them only when the remote environment explicitly supports that attachment model.

Will omitting the capability delete my cookies?

A newly launched session normally starts with a new temporary browser state. If you need persistent state, configure a profile deliberately rather than attaching accidentally to a user’s running browser.

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.