Найти в Дзене
PRIVAT SOFT NULLED 2025

Selenium Manager (бета-версия) 2026

Selenium Manager — это инструмент командной строки, реализованный на Rust, который обеспечивает автоматическое управление драйверами и браузерами для Selenium. Привязки Selenium используют этот инструмент по умолчанию, поэтому вам не нужно скачивать его, добавлять что-либо в свой код или делать что-то ещё, чтобы использовать его. Вкратце: Selenium Manager — это официальный менеджер драйверов проекта Selenium, который поставляется вместе с каждой новой версией Selenium. Selenium использует встроенную поддержку, реализованную в каждом браузере, для автоматизации процессов. По этой причине пользователям Selenium необходимо установить компонент под названием драйвер (chromedriver, geckodriver, msedgedriver и т. д.) между скриптом, использующим Selenium API, и браузером. В течение многих лет управление этими драйверами осуществлялось пользователями Selenium вручную. Таким образом, им нужно было скачать необходимый драйвер для браузера (chromedriver для Chrome, geckodriver для Firefox и т. д
Оглавление

Selenium Manager (бета-версия)

Selenium Manager — это инструмент командной строки, реализованный на Rust, который обеспечивает автоматическое управление драйверами и браузерами для Selenium. Привязки Selenium используют этот инструмент по умолчанию, поэтому вам не нужно скачивать его, добавлять что-либо в свой код или делать что-то ещё, чтобы использовать его.

Мотивация

Вкратце: Selenium Manager — это официальный менеджер драйверов проекта Selenium, который поставляется вместе с каждой новой версией Selenium.

Selenium использует встроенную поддержку, реализованную в каждом браузере, для автоматизации процессов. По этой причине пользователям Selenium необходимо установить компонент под названием драйвер (chromedriver, geckodriver, msedgedriver и т. д.) между скриптом, использующим Selenium API, и браузером. В течение многих лет управление этими драйверами осуществлялось пользователями Selenium вручную. Таким образом, им нужно было скачать необходимый драйвер для браузера (chromedriver для Chrome, geckodriver для Firefox и т. д.) и поместить его в PATH или экспортировать путь к драйверу как системное свойство (Java, JavaScript и т. д.). Но этот процесс был сложным и приводил к проблемам с поддержкой.

Давайте рассмотрим пример. Представьте, что вы вручную скачали необходимый драйвер chromedriver для управления Chrome с помощью Selenium. Когда вы это делали, стабильной версией Chrome была 113, поэтому вы скачали chromedriver 113 и поместили его в папку PATH. В этот момент ваш скрипт Selenium запустился корректно. Но проблема в том, что Chrome является вечнозелёным. Это название относится к способности Chrome автоматически и незаметно обновляться до следующей стабильной версии, если она доступна. Эта функция удобна для конечных пользователей, но потенциально опасна для автоматизации браузера. Давайте вернёмся к примеру, чтобы разобраться в этом. Ваш локальный Chrome в конечном счёте обновится до версии 115. И в этот момент ваш скрипт Selenium перестанет работать из-за несовместимости между загруженным вручную драйвером (113) и версией Chrome (115). Таким образом, ваш скрипт Selenium завершается ошибкой со следующим сообщением: «сессия не создана: эта версия ChromeDriver поддерживает только Chrome версии 113».

Эта проблема является основной причиной существования так называемых менеджеров драйверов (таких как WebDriverManager для Java, webdriver-manager для Python, webdriver-manager для JavaScript, WebDriverManager.Net для C# и webdrivers для Ruby). Все эти проекты послужили источником вдохновения и стали явным признаком того, что сообществу нужна эта функция в Selenium. Таким образом, в рамках проекта Selenium был создан Selenium Manager, официальный менеджер драйверов для Selenium, который поставляется вместе с каждой новой версией Selenium, начиная с версии 4.6.

Использование

Вкратце: Selenium Manager используется привязками Selenium, когда драйверы (chromedriver, geckodriver и т. д.) недоступны.

Управление драйверами через Selenium Manager является дополнительной функцией для привязок Selenium. Таким образом, пользователи могут продолжать управлять своими драйверами вручную (указывая драйвер в PATH или используя системные свойства) или полагаться на сторонний менеджер драйверов, который сделает это автоматически. Selenium Manager используется только в качестве запасного варианта: если драйвер не указан, на помощь приходит Selenium Manager.

Selenium Manager — это инструмент с интерфейсом командной строки (CLI), реализованный на Rust для обеспечения кроссплатформенного выполнения и скомпилированный для Windows, Linux и macOS. Бинарные файлы Selenium Manager поставляются с каждой новой версией Selenium. Таким образом, каждый язык привязки Selenium вызывает Selenium Manager для автоматизированного управления драйверами и браузерами, как описано в следующих разделах.

Автоматическое управление драйверами

Вкратце: Selenium Manager автоматически находит, загружает и кэширует драйверы, необходимые для Selenium, если эти драйверы недоступны.

Основная функция Selenium Manager называется автоматизированное управление драйверами. Давайте рассмотрим пример, чтобы понять, как это работает. Предположим, мы хотим использовать Chrome в качестве драйвера с Selenium (см. документацию о том, как запустить сеанс с Selenium). Перед началом сеанса, когда драйвер недоступен, Selenium Manager управляет chromedriver за нас. Мы используем термин управление для обозначения этой функции (а не просто загрузка), поскольку этот процесс шире и включает в себя различные этапы:

  1. Определение версии браузера. Selenium Manager определяет версию браузера (например, Chrome, Firefox, Edge), установленную на компьютере, на котором выполняется Selenium. На этом этапе используются команды оболочки (например, google-chrome --version).
  2. Определение версии драйвера. На основе обнаруженной версии браузера определяется подходящая версия драйвера. На этом этапе используются онлайн-метаданные/конечные точки, поддерживаемые производителями браузеров (например, chromedriver, geckodriver или msedgedriver).
  3. Загрузка драйвера. URL-адрес драйвера определяется с учетом разрешенной версии драйвера; по этому URL-адресу загружается, распаковывается и сохраняется локально артефакт драйвера.
  4. Кэш драйвера. Распакованные двоичные файлы драйвера сохраняются в локальной папке кэша (~/.cache/selenium). При следующем обращении к тому же драйверу он будет использован из кэша, если драйвер уже есть в кэше.

Автоматизированное управление браузерами

Вкратце: Selenium Manager автоматически находит, загружает и кэширует браузеры, поддерживаемые Selenium (Chrome, Firefox и Edge), если эти браузеры не установлены в локальной системе.

Начиная с версии Selenium 4.11.0, Selenium Manager также реализует автоматическое управление браузерами. Благодаря этой функции Selenium Manager позволяет обнаруживать, загружать и кэшировать различные версии браузеров, обеспечивая их доступность для Selenium. Внутри Selenium Manager использует аналогичную процедуру управления, описанную в предыдущем разделе, но на этот раз для версий браузеров.

Браузеры, автоматически управляемые Selenium Manager:

Давайте ещё раз рассмотрим типичный пример управления Chrome с помощью Selenium. На этот раз предположим, что Chrome не установлен на локальном компьютере при запуске нового сеанса). В этом случае текущая стабильная версия CfT будет обнаружена, загружена и кэширована (в ~/.cache/selenium/chrome) Selenium Manager.

Но это ещё не всё. Помимо стабильной версии браузера, Selenium Manager также позволяет загружать более старые версии браузера (в случае с CfT — начиная с версии 113, первой версии, опубликованной как CfT). Чтобы установить версию браузера с помощью Selenium, мы используем параметр браузера browserVersion.

Давайте рассмотрим ещё один простой пример. Предположим, мы установили browserVersion на 114 с помощью параметров Chrome. В этом случае Selenium Manager проверит, установлен ли уже Chrome 114. Если да, то он будет использоваться. Если нет, то Selenium Manager будет управлять (то есть обнаруживать, загружать и кэшировать) Chrome 114. В любом случае будет управляться и chromedriver. Наконец, Selenium запустит Chrome для программного управления, как обычно.

Но это ещё не всё. Помимо фиксированных версий браузеров (например, 113, 114, 115, и т. д.), мы можем использовать следующие метки для browserVersion:

  • stable: Текущая версия CfT.
  • beta: Следующая версия после стабильной.
  • dev: Версия, находящаяся в разработке.
  • canary: Ночная сборка для разработчиков.
  • esr: Выпуск с расширенной поддержкой (только для Firefox).

When these labels are specified, Selenium Manager first checks if a given browser is already installed (beta, dev, etc.), and when it is not detected, the browser is automatically managed.

Edge in Windows

Automated Edge management by Selenium Manager in Windows is different from other browsers. Both Chrome and Firefox (and Edge in macOS and Linux) are downloaded automatically to the local cache (~/.cache/selenium) by Selenium Manager. Nevertheless, the same cannot be done for Edge in Windows. The reason is that the Edge installer for Windows is distributed as a Microsoft Installer (MSI) file, designed to be executed with administrator rights. This way, when Edge is attempted to be installed with Selenium Manager in Windows with a non-administrator session, a warning message will be displayed by Selenium Manager as follows:

edge can only be installed in Windows with administrator permissions

Therefore, administrator permissions are required to install Edge in Windows automatically through Selenium Manager, and Edge is eventually installed in the usual program files folder (e.g., C:\Program Files (x86)\Microsoft\Edge).

Data collection

Selenium Manager will report anonymised usage statistics to Plausible. This allows the Selenium team to understand more about how Selenium is being used so that we can better focus our development efforts. The data being collected is:

DataPurposeSelenium versionThis allows the Selenium developers to safely deprecate and remove features, as well as determine which new features may be available to youLanguage bindingProgramming language used to execute Selenium scripts (Java, JavaScript, Python, .Net, Ruby)OS and architecture Selenium Manager is running onThe Selenium developers can use this information to help prioritise bug reports, and to identify if there are systemic OS-related issuesBrowser and browser versionHelping for prioritising bug reportsRough geolocationDerived from the IP address you connect from. This is useful for determining where we need to focus our documentation efforts

Selenium Manager sends these data to Plausible once a day. This period is based on the TTL value (see configuration).

Opting out of data collection

Data collection is on by default. To disable it, set the SE_AVOID_STATS environment variable to true. You may also disable data collection in the configuration file (see below) by setting avoid-stats = true.

Configuration

TL;DR: Selenium Manager should work silently and transparently for most users. Nevertheless, there are scenarios (e.g., to specify a custom cache path or setup globally a proxy) where custom configuration can be required.

Selenium Manager — это инструмент командной строки. Поэтому на базовом уровне привязки Selenium вызывают Selenium Manager с помощью команд оболочки. Как и в любом другом инструменте командной строки, в Selenium Manager можно использовать аргументы для указания конкретных возможностей. Различные аргументы, поддерживаемые Selenium Manager, можно проверить с помощью следующей команды:

$ ./selenium-manager --help

Помимо аргументов командной строки, Selenium Manager поддерживает два дополнительных механизма настройки:

  • Файл конфигурации. Selenium Manager использует файл под названием se-config.toml, расположенный в кэше Selenium (по умолчанию в папке ~/.cache/selenium), для пользовательских значений конфигурации. Этот файл TOML содержит набор пар «ключ-значение», используемых для пользовательской конфигурации.
  • Переменные среды. Каждому ключу конфигурации соответствует переменная среды, при этом имя ключа преобразуется в верхний регистр, символ дефиса (-) заменяется на символ подчеркивания (_), а к имени добавляется префикс SE_.

Selenium Manager учитывает файл конфигурации, если он присутствует и не указан соответствующий параметр интерфейса командной строки. Кроме того, переменные среды используются, если не указан ни один из предыдущих параметров (аргументы интерфейса командной строки и файл конфигурации). Другими словами, порядок предпочтения пользовательской конфигурации Selenium Manager следующий:

  1. Аргументы командной строки.
  2. Файл конфигурации.
  3. Переменные среды.

Обратите внимание, что в привязках Selenium для указания значений конфигурации используются аргументы командной строки, которые, в свою очередь, определяются в каждой привязке с помощью параметров браузера.

В следующей таблице приведены все поддерживаемые Selenium Manager аргументы и соответствующие им ключи в файле конфигурации и переменных среды.

Аргумент CLIКонфигурационный файлПеременная EnvОписание--browser BROWSERbrowser = "BROWSER"SE_BROWSER=BROWSERНазвание браузера: chrome, firefox, edge, iexplorer, safari, safaritp или webview2--driver <DRIVER>driver = "DRIVER"SE_DRIVER=DRIVERИмя водителя: chromedriver, geckodriver, msedgedriver, IEDriverServer или safaridriver--browser-version <BROWSER_VERSION>browser-version = "BROWSER_VERSION"SE_BROWSER_VERSION=BROWSER_VERSIONОсновная версия браузера (например, 105, 106, и т. д. Также: beta, dev, canary — или nightly — и esr — в Firefox)--driver-version <DRIVER_VERSION>driver-version = "DRIVER_VERSION"SE_DRIVER_VERSION=DRIVER_VERSIONВерсия драйвера (например, 106.0.5249.61, 0.31.0 и т. д.)--browser-path <BROWSER_PATH>browser-path = "BROWSER_PATH"SE_BROWSER_PATH=BROWSER_PATHПуть к браузеру (абсолютный) для определения версии браузера (например, /usr/bin/google-chrome, /Applications/Google Chrome.app/Contents/MacOS/Google Chrome, C:\Program Files\Google\Chrome\Application\chrome.exe)--driver-mirror-url <DRIVER_MIRROR_URL>driver-mirror-url = "DRIVER_MIRROR_URL"SE_DRIVER_MIRROR_URL=DRIVER_MIRROR_URLЗеркальный URL-адрес для репозиториев драйверов--browser-mirror-url <BROWSER_MIRROR_URL>browser-mirror-url = "BROWSER_MIRROR_URL"SE_BROWSER_MIRROR_URL=BROWSER_MIRROR_URLЗеркальный URL-адрес для репозиториев браузера--output <OUTPUT>output = "OUTPUT"SE_OUTPUT=OUTPUTТип вывода: LOGGER (с использованием INFO, WARN, и т. д.), JSON (пользовательская нотация JSON), SHELL (как в Unix) или MIXED (INFO, WARN, DEBUG, и т. д. в stderr и минимальный JSON в stdout). По умолчанию: LOGGER--os <OS>os = "OS"SE_OS=OSОперационная система для драйверов и браузеров (например, windows, linux, или macos)--arch <ARCH>arch = "ARCH"SE_ARCH=ARCHСистемная архитектура для драйверов и браузеров (например, x32, x64, или arm64)--proxy <PROXY>proxy = "PROXY"SE_PROXY=PROXYHTTP-прокси для сетевого подключения (например, myproxy:port, myuser:mypass@myproxy:port)--timeout <TIMEOUT>timeout = TIMEOUTSE_TIMEOUT=TIMEOUTТаймаут для сетевых запросов (в секундах). По умолчанию: 300--offlineoffline = trueSE_OFFLINE=trueOffline mode (i.e., disabling network requests and downloads)--force-browser-downloadforce-browser-download = trueSE_FORCE_BROWSER_DOWNLOAD=trueForce to download browser, e.g., when a browser is already installed in the system, but you want Selenium Manager to download and use it--avoid-browser-downloadavoid-browser-download = trueSE_AVOID_BROWSER_DOWNLOAD=trueAvoid to download browser, e.g., when a browser is supposed to be downloaded by Selenium Manager, but you prefer to avoid it--skip-driver-in-pathskip-driver-in-path = trueSE_SKIP_DRIVER_IN_PATH=trueNot using drivers found in the PATH--skip-browser-in-pathskip-browser-in-path = trueSE_SKIP_BROWSER_IN_PATH=trueNot using browsers found in the PATH--debugdebug = trueSE_DEBUG=trueDisplay DEBUG messages--tracetrace = trueSE_TRACE=trueDisplay TRACE messages--cache-path <CACHE_PATH>cache-path="CACHE_PATH"SE_CACHE_PATH=CACHE_PATHLocal folder used to store downloaded assets (drivers and browsers), local metadata, and configuration file. See next section for details. Default: ~/.cache/selenium. For Windows paths in the TOML configuration file, double backslashes are required (e.g., C:\\custom\\cache).--ttl <TTL>ttl = TTLSE_TTL=TTLTime-to-live in seconds. See next section for details. Default: 3600 (1 hour)--language-binding <LANGUAGE>language-binding = "LANGUAGE"SE_LANGUAGE_BINDING=LANGUAGELanguage that invokes Selenium Manager (e.g., Java, JavaScript, Python, DotNet, Ruby)--avoid-statsavoid-stats = trueSE_AVOID_STATS=trueНе отправляйте статистику использования на plausible.io. По умолчанию: false

В дополнение к ключам конфигурации, указанным в таблице выше, есть несколько особых случаев, а именно:

  • Версия браузера. В дополнение к browser-version мы можем использовать специальные ключи конфигурации для указания пользовательских версий для каждого поддерживаемого браузера. Таким образом, поддерживаются ключи chrome-version, firefox-version, edge-version и т. д. То же самое относится к переменным среды (например, SE_CHROME_VERSION, SE_FIREFOX_VERSION, SE_EDGE_VERSION и т. д.).
  • Версия драйвера. По тому же принципу мы можем использовать chromedriver-version, geckodriver-version, msedgedriver-version и т. д. (в файле конфигурации) и SE_CHROMEDRIVER_VERSION, SE_GECKODRIVER_VERSION, SE_MSEDGEDRIVER_VERSION и т. д. (в качестве переменных среды).
  • Путь к браузеру. По тому же принципу мы можем использовать chrome-pathfirefox-path, edge-path и т. д. (в файле конфигурации) и SE_CHROME_PATHSE_FIREFOX_PATH, SE_EDGE_PATH и т. д. (в качестве переменных среды). Привязки Selenium также позволяют указывать пользовательское расположение пути к браузеру с помощью параметров, а именно: Chrome), Edge или Firefox.
  • Зеркало драйвера. По тому же принципу мы можем использовать chromedriver-mirror-urlgeckodriver-mirror-url, msedgedriver-mirror-url и т. д. (в файле конфигурации) и SE_CHROMEDRIVER_MIRROR_URLSE_GECKODRIVER_MIRROR_URL, SE_MSEDGEDRIVER_MIRROR_URL и т. д. (в качестве переменных среды).
  • Зеркало браузера. По тому же принципу мы можем использовать chrome-mirror-url, firefox-mirror-url, edge-mirror-url, etc. (в файле конфигурации) и SE_CHROME_MIRROR_URL, SE_FIREFOX_MIRROR_URL, SE_EDGE_MIRROR_URL, etc. (в качестве переменных среды).

Пример se-config.toml

  • файл se-config.toml

browser = "chrome" # --browser BROWSER
driver = "chromedriver" # --driver DRIVER
browser-version = "106" # --browser-version BROWSER_VERSION
driver-version = "106.0.5249.61" # --driver-version DRIVER_VERSION
browser-path = "/usr/bin/google-chrome" # --browser-path BROWSER_PATH
driver-mirror-url = "https://custom-driver-mirror.com" # --driver-mirror-url DRIVER_MIRROR_URL
browser-mirror-url = "https://custom-browser-mirror.com" # --browser-mirror-url BROWSER_MIRROR_URL
output = "LOGGER" # --output OUTPUT
os = "linux" # --os OS
arch = "x64" # --arch ARCH
proxy = "myproxy:8080" # --proxy PROXY
timeout = 300 # --timeout TIMEOUT
offline = true # --offline
force-browser-download = true # --force-browser-download
avoid-browser-download = false # --avoid-browser-download
debug = true # --debug
trace = true # --trace
cache-path = "/custom/cache/path" # --cache-path CACHE_PATH
ttl = 3600 # --ttl TTL
language-binding = "Python" # --language-binding LANGUAGE
avoid-stats = true # --avoid-stats

Посмотреть полный кодПосмотреть на GitHub

Кэширование

Вкратце: драйверы и браузеры, управляемые Selenium Manager, хранятся в локальной папке (~/.cache/selenium).

Кэш в Selenium Manager — это локальная папка (~/.cache/selenium по умолчанию), в которой хранятся загруженные ресурсы (драйверы и браузеры). Для повышения производительности, если драйвер или браузер уже есть в кэше (т. е. есть подсказка о кэше), Selenium Manager использует их оттуда.

Помимо загруженных драйверов и браузеров, в корневом каталоге кэша находятся ещё два файла:

  • Файл конфигурации (se-config.toml). Этот файл является необязательным и, как объяснялось в предыдущем разделе, позволяет хранить пользовательские значения конфигурации для Selenium Manager. Этот файл создается конечным пользователем и считывается Selenium Manager.
  • Файл метаданных (se-metadata.json). Этот файл содержит версии, обнаруженные Selenium Manager при выполнении сетевых запросов (например, с использованием конечных точек CfT JSON), а также срок их действия (TTL). Selenium Manager автоматически поддерживает этот файл.

TTL в Selenium Manager основан на TTL для DNS, хорошо известном механизме, который определяет, как долго некоторые значения кэшируются перед их автоматическим обновлением. В случае Selenium Manager эти значения представляют собой версии, найденные путем выполнения сетевых запросов для определения версии драйвера и браузера. По умолчанию значение TTL равно 3600 секундам (т.е. 1 часу), и его можно настроить с помощью значений конфигурации или отключить, установив для этого значения конфигурации значение 0.

Механизм TTL — это способ повысить общую производительность Selenium. Он основан на том факте, что обнаруженные версии драйвера и браузера (например, подходящая версия chromedriver для Chrome 115 — 115.0.5790.170) в краткосрочной перспективе, скорее всего, не изменятся. Поэтому обнаруженные версии записываются в файл метаданных и считываются оттуда, а не запрашиваются повторно. Таким образом, при определении версии драйвера (шаг 2 ранее описанного процесса автоматического управления драйверами) Selenium Manager сначала считывает метаданные файла. Если найдено актуальное решение (т. е. версия драйвера/браузера, действительная в течение срока жизни), используется эта версия (что позволяет сэкономить время на отправке нового сетевого запроса). Если решение не найдено или срок жизни истек, отправляется сетевой запрос, а результат сохраняется в файле метаданных.

Давайте рассмотрим пример. Привязка Selenium запрашивает у Selenium Manager разрешение на использование chromedriver. Selenium Manager определяет, что установлен Chrome 115, и отправляет сетевой запрос на конечные точки CfT, чтобы узнать правильную версию chromedriver (на тот момент 115.0.5790.170). Эта версия сохраняется в файле метаданных и считается действительной в течение следующего часа (TTL). Если в это время Selenium Manager запрашивает chromedriver (что может произойти при выполнении набора тестов), версия chromedriver определяется путем чтения файла метаданных, а не путем отправки нового запроса на конечные точки CfT. Через час версия chromedriver, хранящаяся в кэше, будет считаться устаревшей, и Selenium Manager обновит ее, отправив новый сетевой запрос на соответствующую конечную точку.

Selenium Manager включает два дополнительных аргумента для управления кэшем, а именно:

  • --clear-cache: Чтобы удалить папку кэша (эквивалентно переменной среды SE_CLEAR_CACHE=true).
  • --clear-metadata: Чтобы удалить файл метаданных (эквивалентно переменной среды SE_CLEAR_METADATA=true).

Управление версиями

Selenium Manager использует ту же схему управления версиями, что и Selenium. Тем не менее мы используем основную версию 0 для релизов Selenium Manager, поскольку он все еще находится на стадии бета-тестирования. Например, двоичные файлы Selenium Manager, поставляемые с Selenium 4.12.0, соответствуют версии 0.4.12.

Получение Selenium Manager

Большинству пользователей не требуется напрямую взаимодействовать с Selenium Manager, поскольку он используется внутри привязок Selenium. Тем не менее, если вы хотите поиграть с Selenium Manager или использовать его для решения задач, связанных с управлением драйверами или браузерами, вы можете получить двоичные файлы Selenium Manager разными способами:

  • Из репозитория Selenium. Исходный код Selenium Manager хранится в основном репозитории Selenium в папке rust. Кроме того, скомпилированные версии для Windows, Linux и macOS можно найти в репозитории Selenium Manager Artifacts. Стабильные двоичные файлы Selenium Manager (то есть те, которые распространяются в последней стабильной версии Selenium) указаны в этом файле.
  • Из рабочего процесса сборки. Selenium Manager компилируется с помощью рабочего процесса GitHub Actions. Этот рабочий процесс создает двоичные файлы для Windows, Linux и macOS. Вы можете загрузить эти двоичные файлы из результатов выполнения рабочих процессов.
  • Из кэша. Начиная с версии 4.15.0 привязок Selenium Java, двоичный файл Selenium Manager извлекается и копируется в папку кэша. Например, двоичный файл Selenium Manager, поставляемый с Selenium 4.15.0, хранится в папке ~/.cache/selenium/manager/0.4.15).

Примеры

Давайте рассмотрим типичный пример: нам нужно автоматически управлять chromedriver. Для этого мы вызываем Selenium Manager следующим образом (обратите внимание, что флаг --debug необязателен, но он помогает нам понять, что делает Selenium Manager):

$ ./selenium-manager --browser chrome --debug
DEBUG chromedriver not found in PATH
DEBUG chrome detected at C:\Program Files\Google\Chrome\Application\chrome.exe
DEBUG Detected browser: chrome 139.0.7258.67
DEBUG Discovering versions from https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json
DEBUG Required driver: chromedriver 139.0.7258.68
DEBUG Acquiring lock: C:\Users\boni\.cache\selenium\chromedriver\win64\139.0.7258.68\sm.lock
DEBUG Downloading chromedriver 139.0.7258.68 from https://storage.googleapis.com/chrome-for-testing-public/139.0.7258.68/win64/chromedriver-win64.zip
INFO Driver path: C:\Users\boni\.cache\selenium\chromedriver\win64\139.0.7258.68\chromedriver.exe
INFO Browser path: C:\Program Files\Google\Chrome\Application\chrome.exe

В этом случае локальный Chrome (в Windows) определяется Selenium Manager. Затем с помощью его версии и конечных точек CfT в локальный кэш загружается подходящая версия chromedriver (в данном примере 115). Наконец, Selenium Manager предоставляет два результата: i) путь к драйверу (загруженному) и ii) путь к браузеру (локальному).

Давайте рассмотрим другой пример. Теперь мы хотим использовать бета-версию Chrome. Поэтому мы вызываем Selenium Manager, указывая метку версии следующим образом (обратите внимание, что бета-версия CfT обнаруживается, загружается и сохраняется в локальном кэше):

$ ./selenium-manager --browser chrome --browser-version beta --debug
DEBUG chromedriver not found in PATH
DEBUG chrome not found in PATH
DEBUG chrome beta not found in the system
DEBUG Discovering versions from https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions-with-downloads.json
DEBUG Required browser: chrome 140.0.7339.16
DEBUG Acquiring lock: C:\Users\boni\.cache\selenium\chrome\win64\140.0.7339.16\sm.lock
DEBUG Downloading chrome 140.0.7339.16 from https://storage.googleapis.com/chrome-for-testing-public/140.0.7339.16/win64/chrome-win64.zip
DEBUG chrome 140.0.7339.16 is available at C:\Users\boni\.cache\selenium\chrome\win64\140.0.7339.16\chrome.exe
DEBUG Discovering versions from https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json
DEBUG Required driver: chromedriver 140.0.7339.16
DEBUG Acquiring lock: C:\Users\boni\.cache\selenium\chromedriver\win64\140.0.7339.16\sm.lock
DEBUG Downloading chromedriver 140.0.7339.16 from https://storage.googleapis.com/chrome-for-testing-public/140.0.7339.16/win64/chromedriver-win64.zip
INFO Driver path: C:\Users\boni\.cache\selenium\chromedriver\win64\140.0.7339.16\chromedriver.exe
INFO Browser path: C:\Users\boni\.cache\selenium\chrome\win64\140.0.7339.16\chrome.exe

Использование Selenium Manager из привязок

Все языки привязок Selenium (Java, JavaScript, Python, .Net, Ruby) используют Selenium Manager для внутреннего управления драйверами и браузерами. Процесс автоматического управления запускается перед началом нового сеанса Selenium, то есть каждый раз, когда скрипт Selenium создает объект драйвера (например, ChromeDriver, FirefoxDriver, и т. д.). В следующих фрагментах кода показано различие между устаревшим способом ручного управления драйверами и встроенным автоматизированным механизмом Selenium Manager.

public void testSetupWithoutManager() {
System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");
WebDriver driver = new ChromeDriver();
driver.get("https://www.selenium.dev/documentation/selenium_manager/");
driver.quit();
}

Посмотреть полный кодПосмотреть на GitHub

Менеджер Selenium

public void testSetupWithManager() {
WebDriver driver = new ChromeDriver();
driver.get("https://www.selenium.dev/documentation/selenium_manager/");
driver.quit();
}

Посмотреть полный кодПосмотреть на GitHub

Selenium Grid

Selenium Manager позволяет автоматически настраивать драйверы при установке Selenium Grid. Для этого нужно указать аргумент --selenium-manager true в команде для запуска Selenium Grid. Подробнее см. на странице запуска Selenium Grid.

Кроме того, Selenium Manager позволяет автоматически управлять выпусками Selenium Grid. Для этого используется следующий аргумент: --grid

$ ./selenium-manager --grid

After this command, Selenium Manager discovers the latest version of Selenium Grid, storing the selenium-server.jar in the local cache.

Optionally, the argument --grid allows to specify a Selenium Grid version (--grid <GRID_VERSION>).

Known Limitations

Connectivity issues

Selenium Manager requests remote endpoints (like Chrome for Testing (CfT), among others) to discover and download drivers and browsers from online repositories. When this operation is done in a corporate environment with a proxy or firewall, it might lead to connectivity problems like the following:

error sending request for url (https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json)

error trying to connect: dns error: failed to lookup address information

error trying to connect: An existing connection was forcibly closed by the remote host. (os error 10054)

When that happens, consider the following solutions:

  • Use the proxy capabilities of Selenium (see documentation). Alternatively, use the environment variable SE_PROXY to set the proxy URL or use the configuration file (see configuration).
  • Review your network setup to enable the remote requests and downloads required by Selenium Manager.

Custom package managers

If you are using a Linux package manager (Anaconda, snap, etc) that requires a specific driver be used for your browsers, you’ll need to either specify the driver location, the browser location, or both, depending on the requirements.

Alternative architectures

Selenium supports all five architectures managed by Google’s Chrome for Testing, and all six drivers provided for Microsoft Edge.

Each release of the Selenium bindings comes with three separate Selenium Manager binaries — one for Linux, Windows, and Mac.

  • The Mac version supports both x64 and aarch64 (Intel and Apple).
  • The Windows version should work for both x86 and x64 (32-bit and 64-bit OS).
  • The Linux version has only been verified to work for x64.

Reasons for not supporting more architectures:

  1. Neither Chrome for Testing nor Microsoft Edge supports additional architectures, so Selenium Manager would need to manage something unofficial for it to work.
  2. We currently build the binaries from existing GitHub actions runners, which do not support these architectures
  3. Any additional architectures would get distributed with all Selenium releases, increasing the total build size

If you are running Linux on arm64/aarch64, 32-bit architecture, or a Raspberry Pi, Selenium Manager will not work for you. The biggest issue for people is that they used to get custom-built drivers and put them on PATH and have them work. Now that Selenium Manager is responsible for locating drivers on PATH, this approach no longer works, and users need to use a Service class and set the location directly. There are a number of advantages to having Selenium Manager look for drivers on PATH instead of managing that logic in each of the bindings, so that’s currently a trade-off we are comfortable with.

Однако начиная с версии Selenium 4.13.0 привязки Selenium позволяют находить двоичный файл Selenium Manager с помощью переменной среды SE_MANAGER_PATH. Если эта переменная задана, привязки будут использовать ее значение в качестве пути к Selenium Manager в локальной файловой системе. Эта функция позволяет пользователям создавать собственные сборки Selenium Manager, например, если двоичные файлы по умолчанию (скомпилированные для Windows, Linux и macOS) несовместимы с конкретной системой (например, ARM64 в Linux).

Зависимости от браузера

При автоматическом управлении браузерами в Linux Selenium Manager использует версии, опубликованные производителями браузеров (например, Chrome, Firefox и Edge). В большинстве случаев эти версии переносимы. Тем не менее могут возникнуть ситуации, когда потребуются существующие библиотеки. В Linux такая проблема может возникнуть при попытке запустить Firefox, например, следующим образом:

libdbus-glib-1.so.2: cannot open shared object file: No such file or directory
Couldn't load XPCOM.

Если это произойдёт, решение будет заключаться в установке этой библиотеки, например, следующим образом:

sudo apt-get install libdbus-glib-1-2

Аналогичная проблема может возникнуть при попытке запустить Chrome для тестирования в Linux:

error while loading shared libraries: libatk-1.0.so.0: cannot open shared object file: No such file or directory

В данном случае необходимо установить следующую библиотеку:

sudo apt-get install libatk-bridge2.0-0

Использование переменной среды для указания пути к драйверу

Можно использовать переменную среды для указания пути к драйверу без использования Selenium Manager. Поддерживаются следующие переменные среды:

  • SE_CHROMEDRIVER
  • SE_EDGEDRIVER
  • SE_GECKODRIVER
  • SE_IEDRIVER

For example, to specify the path to the chromedriver, you can set the SE_CHROMEDRIVER environment variable to the path of the chromedriver executable. The following bindings allow you to specify the driver path using an environment variable:

  • Ruby
  • Java
  • Python

Эта функция доступна в привязке Selenium Ruby начиная с версии 4.25.0 и в привязке Python начиная с версии 4.26.0.

Создание собственного менеджера Selenium

Чтобы создать собственный менеджер Selenium, который будет работать в архитектуре, не поддерживаемой нами в настоящее время, выполните следующие действия:

  1. Установите среду разработки Rust
  2. клонируйте Selenium на локальный компьютер git clone https://github.com/SeleniumHQ/selenium.git --depth 1
  3. Перейдите в папку с клоном cd selenium/rust
  4. Скомпилируйте Selenium cargo build --release
  5. Установите следующую переменную среды для пути к драйверу SE_MANAGER_PATH=~/selenium/rust/target/release/selenium-manager
  6. Поместите нужный драйвер в папку на системном пути
  7. Теперь Selenium будет использовать встроенный Selenium Manager для поиска драйвера, загруженного вручную, в папке PATH

Selenium Manager (бета-версия) продолжение... Загрузки