← Glossary / SessionNotCreatedException

What is SessionNotCreatedException?

SessionNotCreatedException is a fatal WebDriver error thrown when the automation framework fails to initialize a new browser session. In scraping pipelines, it is almost always caused by a version mismatch between the browser binary and the driver executable, or by resource exhaustion on the host machine. Left unmanaged, a silent background browser update can trigger this exception across your entire fleet, halting data extraction instantly.

WebDriverSeleniumInfrastructureFatal ErrorBrowser Pool
// 02 — definitions

Failure at
launch.

The mechanics of why browser automation fails before the first URL is even requested, and how version drift causes fleet-wide outages.

Ask a DataFlirt engineer →

TL;DR

SessionNotCreatedException means your scraper couldn't even start the browser. While it can stem from port conflicts or memory limits, 90% of the time it's a ChromeDriver version mismatch. Production pipelines avoid this by strictly containerizing browser binaries alongside their matching drivers.

01Definition & structure
A SessionNotCreatedException is thrown when a WebDriver implementation (like ChromeDriver or GeckoDriver) cannot establish a connection with the underlying browser binary. The automation framework attempts to send a "New Session" command to the driver, but the driver rejects it. This happens before any navigation or DOM interaction can occur, making it a fatal pipeline error.
02The version mismatch trap
The most common cause of this exception is version drift. Browsers like Google Chrome are designed for consumers and aggressively auto-update. Driver executables are developer tools and do not auto-update. If your VM updates Chrome from v114 to v115, but your script is still using ChromeDriver v114, the driver will refuse to launch the browser, throwing this exception.
03Resource exhaustion and zombie processes
If versions match but the exception still occurs, the host machine is likely out of resources. If previous scraping jobs crashed without calling driver.quit(), zombie driver processes will hold onto the default port (e.g., 9515). When the next job starts, it cannot bind to the port and throws a session creation error. Similarly, if the host lacks sufficient RAM, the browser process will silently die during launch.
04How DataFlirt handles it
We treat browser infrastructure as immutable. Our rendering fleet runs on strictly versioned Docker images where the browser and the automation protocol are bundled together. We disable all auto-update mechanisms at the OS level. Furthermore, we don't launch a new browser process per scrape; we route requests to pre-warmed browser contexts, completely bypassing the driver initialization phase on the critical path.
05Debugging the stack trace
The exception object always contains a specific Message string. If it says "This version of ChromeDriver only supports...", you have a version mismatch. If it says "cannot connect to chrome at 127.0.0.1", you have a port conflict or a zombie process. If it says "DevToolsActivePort file doesn't exist", the browser crashed during startup due to memory limits or missing sandbox flags.
// 03 — the failure model

Why browser pools
collapse.

Browser automation is resource-intensive and brittle. DataFlirt models session creation success against host capacity and version drift to maintain fleet stability.

Fleet Failure Rate = F = nodes_auto_updated / total_nodes
Unmanaged Chrome auto-updates cause cascading SessionNotCreatedExceptions. Infrastructure drift model
Session Initialization Time = Tinit = driver_startup + browser_launch + cdp_handshake
T_init > 5000ms usually indicates resource starvation or zombie processes. WebDriver specification
DataFlirt Pre-warm Buffer = B = target_concurrency × 1.15
We maintain a 15% buffer of active contexts to bypass initialization latency. DataFlirt internal SLO
// 04 — the stack trace

A version mismatch
in the wild.

A standard Selenium Python script failing on startup because the host OS auto-updated Google Chrome overnight, leaving ChromeDriver behind.

SeleniumPythonChromeDriver
edge.dataflirt.io — live
CAPTURED
// driver initialization
[1684521012.124][INFO]: Starting ChromeDriver 114.0.5735.90 on port 9515
[1684521012.126][INFO]: Please see https://chromedriver.chromium.org/security-considerations

// python traceback
Traceback (most recent call last):
File "scraper.py", line 12, in <module>
driver = webdriver.Chrome(options=options)
selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 114
Current browser version is 115.0.5790.110 with binary path /usr/bin/google-chrome

// pipeline status
exit_code: 1
records_extracted: 0
FATAL: Pipeline halted.
// 05 — root causes

Why your session
was denied.

Ranked by frequency across unmanaged scraping infrastructure. Version drift is the overwhelming culprit, followed by zombie processes hoarding resources.

SAMPLE SIZE ·  ·  ·  ·    1.2M failed jobs
ENVIRONMENT ·  ·  ·  ·    Unmanaged VMs
UPDATED ·  ·  ·  ·  ·  ·  2026-05-19
01

Browser/Driver version mismatch

89% of failures · Chrome auto-updated, driver did not
02

Zombie driver processes

62% of failures · Orphaned processes holding port 9515
03

Out of memory (OOM)

45% of failures · Host RAM exhausted during launch
04

Missing OS dependencies

28% of failures · Missing libX11 or libnss3 in container
05

Invalid capabilities

15% of failures · Malformed ChromeOptions passed to driver
// 06 — our infrastructure

Immutable browsers,

pre-warmed and strictly versioned.

DataFlirt eliminates SessionNotCreatedException by removing the moving parts. We don't run raw Selenium on VMs that can auto-update. Our extraction fleet uses immutable Docker images where the browser binary and the automation protocol (CDP via Playwright) are locked together. Instead of launching a new browser per request, we route jobs to a pre-warmed pool of isolated browser contexts, cutting initialization time to zero and completely bypassing driver startup failures.

Browser Pool Telemetry

Live metrics from a DataFlirt rendering cluster.

image.tag df-render-v124.0.2
browser.engine Chromium 124.0.6367.60
pool.status healthy
contexts.active 1,420
contexts.prewarmed 215
session_errors.1h 0

Stay ahead of the pipeline

Data engineering
intel, weekly.

Anti-bot shifts, scraping infrastructure updates, dataset delivery patterns, and business outcomes from our pipelines. Short, technical, no fluff.

// 07 — FAQ

Common
questions.

Common questions about WebDriver initialization failures, version management, and how DataFlirt ensures reliable browser automation.

Ask us directly →
How do I fix a SessionNotCreatedException immediately? +
Check the exception message. If it mentions a version mismatch, either update your ChromeDriver executable to match your installed Chrome version, or downgrade Chrome. If it mentions a port conflict, kill any orphaned chromedriver processes running in the background.
Why did my scraper work yesterday but fail today with this error? +
Your host operating system likely auto-updated Google Chrome in the background overnight. Because ChromeDriver does not auto-update, the versions drifted apart. To prevent this, you must disable browser auto-updates in your scraping environment.
Can this exception be caused by anti-bot systems? +
No. SessionNotCreatedException happens entirely locally, before your scraper makes a single network request to the target website. It is a pure infrastructure failure, not a block or a ban.
How does DataFlirt avoid this issue at scale? +
We don't use raw Selenium or standalone driver executables. We use Playwright with pinned browser binaries baked directly into immutable Docker containers. Because the environment is static and never auto-updates, version drift is impossible.
What if the error message mentions 'DevToolsActivePort file doesn't exist'? +
This usually means Chrome crashed immediately during startup. In containerized scraping environments, this is almost always caused by running out of memory (specifically /dev/shm) or failing to pass the --no-sandbox flag when running as root.
Should I use webdriver-manager to handle this automatically? +
For local development, yes — libraries like webdriver-manager are great. For production pipelines, no. Downloading binaries at runtime introduces latency, relies on external network availability, and makes your deployments non-deterministic. Bake the correct binaries into your container image instead.
$ dataflirt scope --new-project --target=sessionnotcreatedexception READY

Tell us what
to extract.
We do the rest.

20-minute scoping call. Pilot dataset within the week. Production within two. Whether you need a one-off catalogue dump or a continuous feed across millions of records — we scope, build, and operate the pipeline.

hello@dataflirt.com  ·  Bengaluru  ·  IST  ·  typical reply < 4h