⚖️ Старый vs Новый: стратегии поиска элементов
⚡ Главное изменение
Selenium 3 имел отдельные методы для каждой стратегии. Selenium 4 унифицировал всё через find_element(By.X, "val"). Старые методы удалены из Selenium 4.
# Старый способ (Selenium 3 — УДАЛЁН в Selenium 4)
driver.find_element_by_id("username")
driver.find_element_by_xpath("//button")
driver.find_elements_by_class_name("btn")
# Новый способ (Selenium 4 — актуально)
from selenium.webdriver.common.by import By
driver.find_element(By.ID, "username")
driver.find_element(By.XPATH, "//button")
driver.find_elements(By.CLASS_NAME, "btn")
Selenium 3 → Selenium 4: поиск элементов
Методы
find_element_by_* и find_elements_by_* были объявлены устаревшими в Selenium 3.11 и полностью удалены в Selenium 4. В лекции могут присутствовать примеры на старом API — ниже показано современное соответствие.
Поиск по ID
Старый (из лекции — устарело)
# Selenium 3
driver.find_element_by_id("username")
Новый (Selenium 4 — актуально)
# Selenium 4
from selenium.webdriver.common.by import By
driver.find_element(By.ID, "username")
Поиск по XPath
Старый (устарело)
# Selenium 3
driver.find_element_by_xpath("//button[text()='Login']")
Новый (актуально)
# Selenium 4
driver.find_element(By.XPATH, "//button[text()='Login']")
Поиск по CSS-селектору
Старый (устарело)
# Selenium 3
driver.find_element_by_css_selector("button[type='submit']")
Новый (актуально)
# Selenium 4
driver.find_element(By.CSS_SELECTOR, "button[type='submit']")
Поиск по тексту ссылки
Старый (устарело)
# Selenium 3
driver.find_element_by_link_text("Программы")
driver.find_element_by_partial_link_text("Прог")
Новый (актуально)
# Selenium 4
driver.find_element(By.LINK_TEXT, "Программы")
driver.find_element(By.PARTIAL_LINK_TEXT, "Прог")
Поиск всех элементов
Старый (устарело)
# Selenium 3
driver.find_elements_by_class_name("btn")
driver.find_elements_by_tag_name("a")
Новый (актуально)
# Selenium 4
driver.find_elements(By.CLASS_NAME, "btn")
driver.find_elements(By.TAG_NAME, "a")
Полная таблица соответствий
| Selenium 3 (устарело) | Selenium 4 (актуально) |
|---|---|
find_element_by_id(v) | find_element(By.ID, v) |
find_element_by_name(v) | find_element(By.NAME, v) |
find_element_by_class_name(v) | find_element(By.CLASS_NAME, v) |
find_element_by_tag_name(v) | find_element(By.TAG_NAME, v) |
find_element_by_link_text(v) | find_element(By.LINK_TEXT, v) |
find_element_by_partial_link_text(v) | find_element(By.PARTIAL_LINK_TEXT, v) |
find_element_by_css_selector(v) | find_element(By.CSS_SELECTOR, v) |
find_element_by_xpath(v) | find_element(By.XPATH, v) |
find_elements_by_*(v) | find_elements(By.*, v) |
webdriver-manager в лекционных примерах
В лекционных решениях встречается явная инициализация через ChromeDriverManager(). В Selenium 4 это не нужно: Selenium Manager управляет драйверами автоматически.
Из лекции (старый стиль)
# Selenium 3 / webdriver-manager явно
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(ChromeDriverManager().install())
Современный способ (Selenium 4)
# Selenium 4 — Selenium Manager сам найдёт драйвер
driver = webdriver.Chrome()