# Импорт
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("Элемент не найден")