🔖 Справочник: Локаторы Selenium

← К оглавлению урока

⚡ Быстрая шпаргалка

# Импорт
from selenium.webdriver.common.by import By

# Найти первый элемент
driver.find_element(By.ID, "id-value")
driver.find_element(By.CSS_SELECTOR, "#id .class [attr]")
driver.find_element(By.XPATH, "//tag[@attr='val']")

# Найти все элементы
driver.find_elements(By.CSS_SELECTOR, ".card")

# Проверить видимость
element.is_displayed()   # True / False

# Прочитать текст
element.text

Стратегии By.*

Стратегия Пример Когда использовать
By.ID find_element(By.ID, "username") Лучший выбор, если ID уникален
By.NAME find_element(By.NAME, "email") Для полей форм с атрибутом name
By.CLASS_NAME find_element(By.CLASS_NAME, "btn-primary") Только один класс, без пробелов
By.TAG_NAME find_element(By.TAG_NAME, "h1") Заголовки, уникальные теги
By.LINK_TEXT find_element(By.LINK_TEXT, "Программы") Ссылка с точным текстом
By.PARTIAL_LINK_TEXT find_element(By.PARTIAL_LINK_TEXT, "Прог") Ссылка с частичным текстом
By.CSS_SELECTOR find_element(By.CSS_SELECTOR, "#id .class") Гибко, быстро — по умолчанию
By.XPATH find_element(By.XPATH, "//button[text()='OK']") Поиск по тексту, сложные условия

CSS-селекторы: шпаргалка

Селектор Что ищет Пример HTML
#username Элемент с id="username" <input id="username">
.btn-primary Элемент с class="btn-primary" <button class="btn-primary">
[name="email"] Элемент с атрибутом name="email" <input name="email">
.container button Все button внутри .container Любая глубина вложенности
.container > button Только прямые button в .container Один уровень вложенности
a[href*="/products/"] Ссылки, href содержит "/products/" <a href="/products/view/1">
button[type="submit"] Кнопка с type="submit" <button type="submit">
button[lang="ru"] Кнопка с lang="ru" <button lang="ru">

XPath: шпаргалка

XPath Что ищет
//*[@id="username"] Любой элемент с id="username"
//*[@name="email"] Любой элемент с name="email"
//*[@class="btn-primary"] Любой элемент с классом btn-primary (точное совпадение!)
//button[text()="View"] Кнопка с текстом "View"
//a[contains(@href,"/products/")] Ссылка, href содержит "/products/"
//img[contains(@src,"serious_cat")] Картинка, src содержит "serious_cat"
//div[@class="btn-group"]/button Прямые button-потомки div.btn-group
//div[@class="card-body"]//button Все button внутри div.card-body
//p[@name="Vova"] Элемент p с атрибутом name="Vova"

Методы find_element / find_elements

# Синтаксис find_element
element = driver.find_element(By.LOCATOR, "значение")
# → WebElement или NoSuchElementException

# Синтаксис find_elements
elements = driver.find_elements(By.LOCATOR, "значение")
# → list[WebElement] или []

# Свойство text
print(element.text)  # Видимый текст элемента

# Метод is_displayed()
element.is_displayed()  # True — видим, False — скрыт

# Обработка исключения
from selenium.common.exceptions import NoSuchElementException
try:
    element = driver.find_element(By.ID, "some-id")
except NoSuchElementException:
    print("Элемент не найден")