Tu tarea de Selenium funcionó sin problemas el viernes. El lunes, su primera línea, webdriver.Chrome(), se detiene con una SessionNotCreatedException y dos líneas de texto: This version of ChromeDriver only supports Chrome version 152 y Current browser version is 154.0.8037.92. Nadie tocó el código. Chrome se actualizó solo durante el fin de semana y el archivo chromedriver del disco se quedó como estaba.
Esta guía lee el mensaje, muestra la regla que aplica ChromeDriver (tomada de su código fuente) y explica por qué el error vuelve ahora cada pocas semanas. Después vienen las soluciones: Selenium Manager, un driver desactualizado en el PATH, Chrome for Testing, Docker y CI, el mismo error en Edge y un script de Python probado que señala el driver desactualizado.
¿Qué significa «This version of ChromeDriver only supports Chrome version»?
ChromeDriver es un programa pequeño que se sitúa entre Selenium y Chrome: Selenium le envía comandos WebDriver estándar, como «abre esta URL», y ChromeDriver los convierte en órdenes que Chrome entiende. Cada compilación sale del mismo código fuente que una versión concreta de Chrome y lleva su número de versión.
Una sesión es un navegador que tu código controla hasta quit(); «session not created» significa que nunca se llegó a ese punto. Esto es lo que imprimió Selenium 4.50 en nuestra prueba con ChromeDriver 152 y una compilación de prueba de Chrome 154 (ruta acortada, traza de pila recortada):
selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 152
Current browser version is 154.0.8037.92 with binary path ...\154.0.8037.92\chrome-win64\chrome.exe; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#sessionnotcreatedexceptionEl mensaje tiene tres partes:
only supports Chrome version 152es la versión principal del driver que inició Selenium.Current browser version is 154.0.8037.92es la versión completa del Chrome que abrió ese driver.with binary pathindica el archivo de Chrome. En un equipo con Chrome, Chrome Beta y una compilación de prueba, te dice cuál se eligió.
El texto lo genera el propio ChromeDriver, no el paquete de Python, así que Java, C# y JavaScript muestran las mismas dos líneas dentro de su propia excepción. La traza de pila (stack trace) que aparece debajo pertenece al driver y aquí no aporta nada.
¿Qué versiones de Chrome acepta un ChromeDriver?
La comprobación es una función corta, CheckVersion, en el código fuente del lanzador de ChromeDriver. Solo compara el primer número de las dos versiones:
- Misma versión principal: la sesión se inicia.
- Chrome exactamente una versión principal más nuevo que el driver: la sesión se inicia y el driver escribe una advertencia en su registro (log). Un comentario del código explica el motivo: un driver Beta debe poder manejar un navegador Dev o Canary.
- Cualquier otro caso, incluido un Chrome más antiguo que el driver:
session not created.
Probamos cada caso con compilaciones de Chrome for Testing, Selenium 4.50.0 y Python 3.13 en Windows 11:
| ChromeDriver | Chrome | Resultado |
|---|---|---|
| 154.0.8037.92 | 154.0.8037.92 | La sesión se inicia |
| 153.0.8010.52 | 154.0.8037.92 | La sesión se inicia, advertencia solo en el registro del driver |
| 152.0.7977.82 | 154.0.8037.92 | session not created |
| 154.0.8037.92 | 153.0.8010.52 | session not created (driver más nuevo que el navegador) |
En la segunda fila, el registro del driver decía This version of ChromeDriver has not been tested with Chrome version 154. Selenium oculta ese registro salvo que lo pidas, así que la advertencia pasa desapercibida hasta que la siguiente versión de Chrome la convierte en error. La documentación de ChromeDriver de Google es más estricta que el código y pide que coincidan los números principal, secundario y de compilación.
¿Por qué el error vuelve una y otra vez?
Chrome se actualiza solo: la nueva versión se descarga en segundo plano y se aplica la próxima vez que se abre el navegador, y Selenium inicia un Chrome nuevo en cada sesión. Un chromedriver que descargaste es un simple archivo ejecutable y nada lo actualiza.
Desde Chrome 153 esto pasa más a menudo. Google pasó Chrome a un ciclo estable de dos semanas el 8 de septiembre de 2026 en escritorio, Android e iOS: Chrome 154 salió el 22 de septiembre, la 155 el 6 de octubre y la 156 está prevista para el 20 de octubre. Con el margen de una versión, un driver que coincidía con Chrome el día del lanzamiento aguanta una versión y falla en la siguiente, así que su vida útil es ahora de unas cuatro semanas en lugar de ocho. Las empresas que usan el canal Extended Stable siguen recibiendo una nueva versión principal solo cada ocho semanas.
Para ver los dos números, abre Chrome y selecciona Más > Ayuda > Información de Google Chrome. Para el driver, ejecútalo con --version:
> chromedriver --version
ChromeDriver 152.0.7977.82 (d04cdb24d67b081f6cf80200ffc5233f44b61109-refs/branch-heads/7977@{#2322})¿Cómo elige Selenium qué chromedriver iniciar?
La mayoría de los casos de «ayer funcionaba» dependen de qué archivo de driver eligió Selenium. Con Selenium 4.50, webdriver.Chrome() buscó en este orden:
- Una ruta pasada en
Service(executable_path=...). Selenium usa ese archivo tal cual y nunca comprueba su versión. - Un
chromedriveren elPATH, la lista de carpetas donde el sistema busca programas. Selenium Manager usa esa copia aunque las versiones no coincidan y solo muestra una advertencia. - Un driver descargado por Selenium Manager. Lee la versión del Chrome que va a abrir, busca el driver correspondiente en Chrome for Testing y lo guarda en
~/.cache/selenium.
Selenium Manager es un programa auxiliar incluido en todos los paquetes oficiales de Selenium desde la versión 4.6, así que se comporta igual desde Python, Java, C#, Ruby y JavaScript. La documentación de Selenium Manager enumera sus ajustes; cada uno tiene también una variable de entorno que empieza por SE_.
Solución 1: quita la ruta fija del driver
Los tutoriales antiguos descargan ChromeDriver a mano y pasan su ubicación. Esa ruta deja de coincidir con la siguiente actualización de Chrome:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
# Antes: un archivo fijo que queda obsoleto tras una actualización de Chrome
service = Service(executable_path=r"C:\tools\chromedriver.exe")
driver = webdriver.Chrome(service=service)
# Después: sin ruta, Selenium Manager trae el driver para el Chrome instalado
driver = webdriver.Chrome()Comprueba primero la versión instalada con pip show selenium: cualquier versión anterior a la 4.6 no tiene Selenium Manager, y la versión actual, la 4.50.0, salió el 30 de septiembre de 2026. En nuestra prueba, la segunda forma descargó ChromeDriver 154.0.8037.92 para Chrome 154.0.8037.92 en la primera ejecución y lo reutilizó después.
La descarga necesita acceso a internet. Si estás detrás de un proxy corporativo, pon la dirección del proxy en SE_PROXY; en un equipo sin internet, aporta tú los dos archivos como en la solución 3. Los drivers para Chrome 115 y posteriores solo se publican en Chrome for Testing, así que un script de descarga antiguo que lee el antiguo sitio de almacenamiento de ChromeDriver se queda en la versión 114.
Solución 2: borra el chromedriver antiguo del PATH
Selenium Manager no puede resolver este caso solo. Si hay un chromedriver.exe antiguo en una carpeta del PATH, como una carpeta de herramientas o la carpeta Scripts de Python, Selenium Manager lo usa y solo avisa. Con ChromeDriver 152 en el PATH y Chrome 154, nuestra ejecución imprimió esta línea antes de la excepción:
The chromedriver version (152.0.7977.82) detected in PATH at ...\chromedriver.exe might not be compatible with the detected chrome version (154.0.8037.92); currently, chromedriver 154.0.8037.92 is recommended for chrome 154.*, so it is advised to delete the driver in PATH and retryEncuentra todas las copias con where.exe chromedriver en Windows o which -a chromedriver en macOS y Linux, y luego borra el archivo o saca su carpeta del PATH. Si no puedes modificar el equipo, como en un servidor de compilación compartido, define SE_SKIP_DRIVER_IN_PATH=true. En nuestra prueba, Selenium Manager ignoró entonces la copia desactualizada, descargó el driver 154 y la sesión se inició.
Solución 3: fija Chrome y ChromeDriver con Chrome for Testing
Las soluciones 1 y 2 siguen al Chrome instalado, lo que conviene en un equipo de desarrollo. Las tareas programadas y las suites de pruebas suelen necesitar lo contrario: el mismo navegador en cada ejecución, actualizado cuando tú lo decidas. Chrome for Testing es una compilación de Chrome hecha para esto. No se actualiza sola y cada versión se publica junto con el ChromeDriver del mismo número. Con Selenium Manager, fijar la versión requiere una sola opción:
from selenium import webdriver
options = webdriver.ChromeOptions()
options.browser_version = "153" # Chrome for Testing 153 y ChromeDriver 153
driver = webdriver.Chrome(options=options)
print(driver.capabilities["browserVersion"]) # 153.0.8010.52 en nuestra prueba
driver.quit()Si el Chrome instalado tiene otra versión principal, Selenium Manager descarga Chrome for Testing 153 en su caché, junto al driver; si el Chrome instalado ya es la 153, usa ese. SE_FORCE_BROWSER_DOWNLOAD=true hace que use siempre la compilación descargada, y SE_CACHE_PATH mueve la caché, por ejemplo a la carpeta del proyecto.
Para un equipo sin conexión o una imagen de Docker, descarga los archivos comprimidos del navegador y del driver desde la misma fila de versión del panel de Chrome for Testing y apunta Selenium a ellos con options.binary_location y Service(executable_path=...). Aquí una ruta fija no es problema, porque el navegador que está al lado no puede actualizarse.
webdriver-manager, Docker y CI
Los proyectos de Python más antiguos llaman a ChromeDriverManager().install() del paquete webdriver-manager, cuyo README recomienda ahora Selenium Manager para Selenium 4.6+. Ese paquete guarda los drivers en caché en una carpeta .wdm durante un día de forma predeterminada, y driver_version="..." congela el driver mientras Chrome avanza. Quita ese argumento o sustituye la llamada por la solución 1.
Los contenedores y los servidores de compilación suelen fallar después de reconstruir la imagen:
- Un Dockerfile con el Chrome actual y un driver fijo.
apt-get install google-chrome-stableinstala lo que sea actual el día de la compilación, mientras que un chromedriver descargado de una URL con número de versión se queda donde está. Instala ambos desde una misma versión de Chrome for Testing o deja que Selenium Manager descargue el driver en tiempo de ejecución. - Las imágenes de Docker de Selenium. Las etiquetas de
selenium/standalone-chromeindican las dos versiones, por ejemplo153.0-chromedriver-153.0-20260909, así que navegador y driver coinciden dentro de la imagen. El proyecto recomienda una etiqueta completa en lugar delatest. - Runners alojados en GitHub. Las imágenes de Ubuntu incluyen Chrome con un ChromeDriver que coincide, enlazado en
/usr/bin, que está en elPATH. Si un paso del workflow instala otro Chrome, ese driver deja de coincidir; defineSE_SKIP_DRIVER_IN_PATH=trueo instala el driver desde la misma fuente que el navegador.
El mismo error en Edge y por qué Playwright lo evita
Edge está basado en Chromium, y su driver, msedgedriver (Microsoft Edge WebDriver), falla del mismo modo tras una actualización de Edge: This version of Microsoft Edge WebDriver only supports Microsoft Edge version 122, seguido de Current browser version is 124.0.2478.80. La documentación de WebDriver de Microsoft pide un driver cuyas tres primeras partes de la versión coincidan con Edge; Edge muestra su versión en edge://settings/help. Las soluciones se aplican igual: Selenium Manager descarga msedgedriver para webdriver.Edge(), y una copia antigua en el PATH le estorba exactamente igual que un chromedriver antiguo.
Playwright evita el problema por diseño. Cada versión de Playwright está ligada a compilaciones concretas de los navegadores, que descarga playwright install, así que no hay un archivo de driver aparte que mantener al día con el navegador. Su fallo equivalente es «Executable doesn't exist» tras actualizar la biblioteca, y se arregla ejecutando de nuevo playwright install. Si el ciclo de dos semanas de Chrome te hace replantearte la herramienta, nuestra comparación entre Playwright y Selenium ejecuta la misma tarea en ambos.
Un script de Python que señala el driver desactualizado
El script inicia Chrome como recomienda la solución 1 y convierte un desajuste de versiones en dos líneas que dicen qué archivo quitar. Lee las dos versiones principales del mensaje, comprueba si se usó un chromedriver del PATH y vuelve a lanzar sin cambios cualquier otro error session not created.
"""Inicia Chrome con Selenium y explica un desajuste de versión entre driver y navegador."""
import os
import re
import shutil
import sys
from selenium import webdriver
from selenium.common.exceptions import SessionNotCreatedException
from selenium.webdriver.chrome.service import Service
MISMATCH = re.compile(
r"only supports Chrome version (?P<driver>\d+)\s+"
r"Current browser version is (?P<browser>\d+)"
)
def start_chrome(browser_version=None, binary=None, driver_path=None, headless=True):
"""Devuelve un driver de Chrome; si las versiones no coinciden, indica qué driver está desactualizado y sale."""
options = webdriver.ChromeOptions()
if browser_version: # p. ej. "154": Selenium Manager trae ese Chrome for Testing y su driver
options.browser_version = browser_version
if binary: # una compilación de Chrome for Testing que descomprimiste tú
options.binary_location = binary
if headless:
options.add_argument("--headless")
service = Service(executable_path=driver_path) if driver_path else None
try:
driver = webdriver.Chrome(options=options, service=service)
except SessionNotCreatedException as exc:
found = MISMATCH.search(exc.msg or "")
if not found:
raise # "session not created" por otro motivo: lee el mensaje completo
print(f"ChromeDriver {found['driver']} cannot drive Chrome {found['browser']}.")
on_path = shutil.which("chromedriver")
if driver_path:
print(f"The fixed path is stale: {driver_path}")
print("Remove driver_path and let Selenium Manager pick the driver.")
elif on_path:
print(f"Selenium used the chromedriver on PATH: {on_path}")
print("Delete that file (or set SE_SKIP_DRIVER_IN_PATH=true) and run again.")
sys.exit(1)
caps = driver.capabilities
driver_version = caps["chrome"]["chromedriverVersion"].split(" ")[0]
print(f"Chrome {caps['browserVersion']} with ChromeDriver {driver_version}")
return driver
if __name__ == "__main__":
driver = start_chrome(
browser_version=os.environ.get("CHROME_VERSION"),
binary=os.environ.get("CHROME_BINARY"),
driver_path=os.environ.get("CHROMEDRIVER_PATH"),
)
try:
driver.get("https://example.com/")
print(driver.title)
finally:
driver.quit()El script solo necesita pip install selenium; sin variables de entorno, inicia el Chrome instalado. Dejamos en inglés los mensajes que imprime el script para que coincidan con la salida real de abajo.
Cómo se ve la salida
Lo ejecutamos cinco veces en Windows 11 con Selenium 4.50.0, Chrome for Testing 154 en CHROME_BINARY (ejecuciones 1, 2, 3 y 5) y la caché de Selenium Manager en la carpeta del proyecto. Las líneas que empiezan por # son nuestras etiquetas; las rutas están acortadas:
# 1. ChromeDriver 152 on PATH
The chromedriver version (152.0.7977.82) detected in PATH at ...\chromedriver.exe might not be compatible with the detected chrome version (154.0.8037.92); currently, chromedriver 154.0.8037.92 is recommended for chrome 154.*, so it is advised to delete the driver in PATH and retry
ChromeDriver 152 cannot drive Chrome 154.
Selenium used the chromedriver on PATH: ...\152.0.7977.82\chromedriver-win64\chromedriver.EXE
Delete that file (or set SE_SKIP_DRIVER_IN_PATH=true) and run again.
# 2. CHROMEDRIVER_PATH set to ChromeDriver 152
ChromeDriver 152 cannot drive Chrome 154.
The fixed path is stale: ...\152.0.7977.82\chromedriver-win64\chromedriver.exe
Remove driver_path and let Selenium Manager pick the driver.
# 3. No driver anywhere: Selenium Manager downloads 154
Chrome 154.0.8037.92 with ChromeDriver 154.0.8037.92
Example Domain
# 4. CHROME_VERSION=153 (with SE_FORCE_BROWSER_DOWNLOAD=true)
Chrome 153.0.8010.52 with ChromeDriver 153.0.8010.52
Example Domain
# 5. Run 1 again with SE_SKIP_DRIVER_IN_PATH=true
Chrome 154.0.8037.92 with ChromeDriver 154.0.8037.92
Example DomainLa primera línea de la ejecución 1 es la advertencia propia de Selenium Manager, impresa a través del módulo logging de Python.
Otros mensajes de «session not created»
No todos los session not created tienen que ver con versiones. Durante las pruebas aparecieron otros dos, y el script los deja pasar sin cambios:
| Mensaje tras «session not created» | Qué pasó | Qué revisar |
|---|---|---|
from unknown error: no chrome binary at ... | binary_location apunta a un archivo que no existe | La ruta en options.binary_location |
Chrome failed to start: crashed. con DevToolsActivePort file doesn't exist | Chrome se cerró justo después de abrirse; aquí, otra sesión usaba la misma carpeta de perfil | Un --user-data-dir por sesión, o ninguno |
Dónde aparece este error
- Scrapers y controles de precios programados que funcionan sin supervisión: la primera ejecución tras una actualización de Chrome falla antes de cargar ninguna página.
- Suites de pruebas en portátiles de desarrollo con un driver de una guía de instalación antigua todavía en el
PATH. - Pipelines de CI después de que cambie la imagen del runner o la imagen base de Docker.
- Servidores compartidos donde alguien instaló chromedriver para todos hace años.
La comprobación de versión se hace antes de que Chrome cargue una sola página, así que la red nunca es la causa. Un scraper detrás de Proxies de centro de datos falla igual que uno conectado desde casa, y cambiar de proxy no cambia nada.
Errores frecuentes
- Volver a escribir en el código la ruta de un driver recién descargado. Funciona hasta que Chrome avanza dos versiones, ahora unas cuatro semanas.
- Actualizar la copia equivocada. Un driver más nuevo en una carpeta no sirve mientras haya uno más antiguo antes en el
PATH. - Bajar de versión el Chrome que usas a diario para que encaje con un driver viejo. Renuncias a las correcciones de seguridad; si necesitas un navegador más antiguo, usa Chrome for Testing.
- Confiar en el margen de una versión. La advertencia acaba en un registro que nadie lee.
- Añadir
--disable-build-checka ChromeDriver. Este parámetro sin soporte se salta la comparación y hace que el driver advierta de que no se deben reportar los fallos que solo aparecen con él. Oculta el desajuste en lugar de corregirlo.
Guía de decisión
| Lo que ves | Qué hacer |
|---|---|
| Versión principal del driver dos o más por debajo de Chrome | Quita la ruta fija; deja que Selenium Manager elija el driver |
| Advertencia de Selenium Manager sobre un driver en el PATH | Borra ese archivo o define SE_SKIP_DRIVER_IN_PATH=true |
| Driver más nuevo que Chrome | Actualiza Chrome desde Información de Google Chrome o fija la versión con browser_version |
| Las pruebas deben usar el mismo navegador durante semanas | Fija Chrome y ChromeDriver con Chrome for Testing |
| Error tras reconstruir la imagen de Docker | Instala ambos desde una misma versión de Chrome for Testing o usa una imagen de Selenium con etiqueta completa |
| Selenium anterior a 4.6 | Actualiza Selenium |
| El mismo mensaje en msedgedriver | Los mismos pasos con webdriver.Edge(); revisa edge://settings/help |
Preguntas frecuentes
¿Por qué ChromeDriver dejó de funcionar si no cambié nada?
Chrome se actualizó solo y aplicó la actualización la siguiente vez que se abrió, mientras el archivo chromedriver se quedó en su versión antigua. Cuando el navegador va dos versiones principales por delante, o el driver es más nuevo que el navegador, la sesión se rechaza.
¿ChromeDriver 153 puede manejar Chrome 154?
Sí, con una advertencia en el registro del driver; en nuestra prueba la sesión se inició con normalidad. ChromeDriver 153 rechaza Chrome 155 y cualquier versión anterior a la 153.
¿Dónde guarda Selenium Manager los drivers que descarga?
En ~/.cache/selenium, dentro de tu carpeta de usuario, ordenados por driver, plataforma y versión, junto con las compilaciones de Chrome for Testing que haya descargado. Define SE_CACHE_PATH para guardar la caché en una carpeta del proyecto.
¿Debo impedir que Chrome se actualice para que el driver siga coincidiendo?
No en el navegador que usas a diario, porque las actualizaciones traen correcciones de seguridad. Para pruebas que no deben cambiar, usa Chrome for Testing: nunca se actualiza solo y tú decides cuándo pasar a una versión más nueva.
¿Puede un proxy causar «session not created»?
No. ChromeDriver compara las versiones antes de que Chrome abra cualquier página, y el argumento --proxy-server solo afecta al tráfico posterior. Eso sí, un proxy corporativo puede bloquear la descarga de Selenium Manager; define SE_PROXY para que la descarga pase por él.
¿La misma solución funciona en Java, C# y JavaScript?
Sí. Selenium Manager viene con todos los paquetes oficiales de Selenium desde la 4.6: en Java, quita System.setProperty("webdriver.chrome.driver", ...); en C# y JavaScript, deja de pasar una ruta de driver.
En resumen
«This version of ChromeDriver only supports Chrome version N» significa que Chrome se actualizó solo y el archivo del driver no. ChromeDriver acepta la misma versión principal y, con una advertencia, una versión más nueva, así que con el ciclo de dos semanas de Chrome un driver congelado dura unas cuatro semanas. Quita las rutas fijas del driver y las copias antiguas del PATH, deja que Selenium Manager elija el driver correspondiente y fija ambos con Chrome for Testing donde las ejecuciones deban ser idénticas.
Cuando la sesión vuelva a iniciarse, el siguiente paso en la mayoría de las tareas de scraping es la configuración de red; nuestra guía para usar un proxy con Selenium cubre Chrome, Edge, autenticación y SOCKS5.
Para los sitios que juzgan a sus visitantes por la reputación de su dirección IP, envía ese tráfico por los Proxies residenciales, que salen a internet desde conexiones domésticas.




