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 и уходит лишнее трение от неподдерживаемых слоёв, не помогающих решать конфликт версий.