2025, Nov 21 15:02
Как запустить Selenium с Chrome 137: конфликт с ChromeDriver
Решаем SessionNotCreatedException в Selenium при конфликте версий Chrome 137 и ChromeDriver: укажите browser_version и используйте стандартный драйвер.
Когда корпоративная политика фиксирует вас на конкретной сборке Chrome, обычная настройка Selenium может внезапно завершиться громким SessionNotCreatedException. Частая причина — несоответствие между установленной версией Chrome и ChromeDriver, который пытается использовать Selenium. Если у вас только Chrome 137, а драйвер рассчитан на 138, сессия так и не запустится.
Проблема: несовпадение версий в условиях корпоративных ограничений
Ниже приведённая конфигурация пытается управлять браузером через undetected_chromedriver и минимальный набор ChromeOptions. На машине, где Chrome закреплён на версии 137, Selenium сообщает, что может работать только с Chrome 138, и завершает работу с SessionNotCreatedException.
from selenium import webdriver
import undetected_chromedriver as stealth
import time
from selenium.webdriver.common.by import By
import urllib
opts = webdriver.ChromeOptions()
opts.add_argument("--disable-extensions")
client = stealth.Chrome(options=opts)
client.get('https://www....')
Ошибка прямо указывает, что используемый ChromeDriver поддерживает лишь Chrome 138, тогда как установленный браузер — 137. Поскольку драйвер не может подключиться к другой мажорной версии, сессия не инициализируется.
Почему это происходит
ChromeDriver обязан совпадать с мажорной версией Chrome. Если драйвер для 138, а браузер — 137, Chrome отклоняет подключение, и Selenium выдаёт SessionNotCreatedException. Ни дополнительные флаги, ни повторы не меняют этого базового требования. Ещё одна практическая деталь: некорректно переданная версия браузера может вызвать InvalidArgumentException; версию нужно указывать строкой.
Есть и дополнительный источник сложности. Обычный сценарий Selenium работает корректно, как только выбран подходящий драйвер. Дополнительный слой в виде undetected_chromedriver здесь не помогает; его называют устаревшим и неподдерживаемым. Убрав его, вы избавляетесь от лишних элементов и возвращаетесь к рабочей конфигурации.
Решение: закрепите версию браузера и используйте штатный драйвер Selenium
Если Chrome 137 установлен и доступен в PATH, перед созданием драйвера задайте свойство browser_version и переключитесь на стандартный Chrome-драйвер Selenium. Инструменты подтянут совместимый ChromeDriver 137 и запустят локально установленный Chrome 137. Убедитесь, что передаёте версию строкой.
from selenium import webdriver
cfg = webdriver.ChromeOptions()
cfg.browser_version = "137"
cfg.add_argument("--disable-extensions")
driver = webdriver.Chrome(options=cfg)
driver.get("https://www....")
Такая конфигурация использует соответствующий ChromeDriver 137 и запускает сессию с Chrome 137 без конфликта версий.
Почему это важно
Совпадение мажорных версий Chrome и ChromeDriver — не просто рекомендация, а жёсткое условие для старта сессии. В средах, где обновить Chrome невозможно, явная фиксация драйвера на установленной версии браузера предотвращает хрупкие конфигурации и разблокирует запуск тестов и автоматизации. Это также избавляет от бесполезных попыток подбирать флаги и обходные пути, которые не устранят несовместимость драйвера и браузера.
Стоит отметить: в этом случае удаление undetected_chromedriver позволило целевой странице загрузиться. Если сайт блокирует доступ из‑за обнаружения автоматизации, это уже другая задача. Приведённое решение устраняет только несоответствие версий и проблему создания сессии; оно не влияет на механизмы детектирования на стороне сайта.
Выводы
Если вы ограничены Chrome 137, сразу укажите эту версию и используйте стандартный Chrome-драйвер Selenium. Передавайте версию строкой, оставляйте параметры минимальными и позвольте инструментам сами подобрать соответствующий ChromeDriver. Так стек остаётся согласованным, исчезает SessionNotCreatedException и уходит лишнее трение от неподдерживаемых слоёв, не помогающих решать конфликт версий.