Как взаимодействуют клиентская библиотека Selenium, драйвер браузера и сам браузер?
🔹 Участники
Клиентская библиотека Selenium
Это твой код на Python, Java, C#, JS и т.д.
Ты пишешь команды:
driver.find_element(...)
,driver.click()
.Эти команды не напрямую управляют браузером, а формируют HTTP-запросы в формате JSON Wire Protocol (старый) или W3C WebDriver Protocol (новый стандарт).
Драйвер браузера
Это исполняемый файл (например:
chromedriver
,geckodriver
,msedgedriver
).Драйвер — это сервер, который слушает команды от клиентской библиотеки Selenium.
Он переводит JSON-запросы (например, “click this element”) в нативные команды браузера через DevTools API, Automation API или внутренние механизмы движка браузера.
Браузер
Это реальный Chrome, Firefox, Edge или Safari.
Получает команды от драйвера и выполняет их: открывает страницу, находит элемент, кликает, вводит текст и т.д.
После выполнения возвращает ответ (например,
{"status":0}
= успех, или ошибку) обратно драйверу → затем в клиентскую библиотеку.
🔹 Поток взаимодействия (пример)
Представь, что ты написал:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://example.com")
element = driver.find_element("id", "login")
element.click()
Как это работает под капотом:
driver.get("https://example.com")
→ клиентская библиотека формирует HTTP-запрос POST /url кchromedriver
.Chromedriver получает запрос → вызывает Chrome DevTools API → Chrome открывает страницу.
find_element("id", "login")
→ клиент отправляет запрос POST /element с параметромid=login
→ драйвер ищет элемент через движок браузера.element.click()
→ клиент отправляет запрос POST /element/{id}/click` → драйвер передаёт браузеру команду кликнуть.Браузер кликает и возвращает результат → драйвер шлёт его обратно клиенту → твой Python-код идёт дальше.
🔹 Визуально (схема)
Твой код (Python/Java/JS)
|
v
Selenium Client (WebDriver API)
|
HTTP (JSON Wire / W3C Protocol)
|
v
Browser Driver (chromedriver, geckodriver...)
|
Native browser APIs (DevTools, Marionette, WebKit Remote Debugging)
|
v
Браузер (Chrome, Firefox, Edge...)
👉 Таким образом:
Клиент Selenium = “пишешь тесты”
Драйвер = “переводчик команд”
Браузер = “исполнитель действий”
Last updated
Was this helpful?