Как взаимодействуют клиентская библиотека Selenium, драйвер браузера и сам браузер?

🔹 Участники

  1. Клиентская библиотека Selenium

    • Это твой код на Python, Java, C#, JS и т.д.

    • Ты пишешь команды: driver.find_element(...), driver.click().

    • Эти команды не напрямую управляют браузером, а формируют HTTP-запросы в формате JSON Wire Protocol (старый) или W3C WebDriver Protocol (новый стандарт).


  1. Драйвер браузера

    • Это исполняемый файл (например: chromedriver, geckodriver, msedgedriver).

    • Драйвер — это сервер, который слушает команды от клиентской библиотеки Selenium.

    • Он переводит JSON-запросы (например, “click this element”) в нативные команды браузера через DevTools API, Automation API или внутренние механизмы движка браузера.


  1. Браузер

    • Это реальный 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()

Как это работает под капотом:

  1. driver.get("https://example.com") → клиентская библиотека формирует HTTP-запрос POST /url к chromedriver.

  2. Chromedriver получает запрос → вызывает Chrome DevTools API → Chrome открывает страницу.

  3. find_element("id", "login") → клиент отправляет запрос POST /element с параметром id=login → драйвер ищет элемент через движок браузера.

  4. element.click() → клиент отправляет запрос POST /element/{id}/click` → драйвер передаёт браузеру команду кликнуть.

  5. Браузер кликает и возвращает результат → драйвер шлёт его обратно клиенту → твой 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?