Перед началом изучения этой темы необходимо понять, что такое локаторы, потому что с ними будем работать постоянно.
Локатор — это способ идентификации элементов на странице. Это аргумент, передаваемый методам поиска элементов.
Локаторы играют очень важную роль при работе с Selenium. Они обеспечивают путь к веб-элементам, которые необходимы для автоматизации определенных действий, таких как клик, ввод, установка флага и др.
Для начала, импортируем класс By из модуля selenium.webdriver.common.by:
from selenium.webdriver.common.by import By
Класс By — это, по сути, перечисление, которое содержит различные стратегии поиска элементов на веб-странице. Использование By позволяет сделать код более читаемым и поддерживаемым, так как это стандартизирует способы поиска элементов.
By.ID – Поиск элемента по уникальному идентификатору (id). Этот метод очень быстрый и надежный, но требует, чтобы у элемента был атрибут id
element = driver.find_element(By.ID, "some_id")
By.CSS_SELECTOR – Поиск элемента или элементов, используя селекторы CSS. Это гибкий и мощный метод, который может выразить сложные критерии поиска.
elements = driver.find_elements(By.CSS_SELECTOR, ".some_class")
By.XPATH – Поиск элемента с помощью языка XPath. XPath позволяет создать более сложные запросы, но он менее читаемый и, возможно, будет работать медленнее, чем другие методы.
element = driver.find_element(By.XPATH, "//div[@attribute='value']")
By.NAME – Поиск элемента по атрибуту name. Этот метод хорошо подходит для форм.
element = driver.find_element(By.NAME, "username")
By.TAG_NAME – Поиск элемента по названию HTML-тега. Этот метод полезен, если нужно выбрать, например, все изображения на странице.
images = driver.find_elements(By.TAG_NAME, "img")
By.CLASS_NAME – Поиск элемента или элементов по классу. Этот метод полезен, если у элементов есть общий класс.
buttons = driver.find_elements(By.CLASS_NAME, "btn")
By.LINK_TEXT – Поиск элемента по точному тексту ссылки. Очень удобно, если текст уникален.
element = driver.find_element(By.LINK_TEXT, "Continue")
By.PARTIAL_LINK_TEXT – Поиск элемента по частичному тексту ссылки. Удобно, когда точный текст ссылки неизвестен или динамичен.
element = driver.find_element(By.PARTIAL_LINK_TEXT, "Cont")
Локаторы используются с помощью двух универсальных методов — find_element(), который возвращает ровно один элемент, найденный первым, и find_elements(), который возвращает список найденных элементов.
.find_element()
Метод find_element() используется, когда вам нужно найти один конкретный элемент на странице. Он возвращает первый элемент, который соответствует заданным критериям поиска. Если элемент не найден, Selenium сгенерирует исключение NoSuchElementException.
# Ищем элемент с тегом img elements = driver.find_element(By.TAG_NAME, 'img') .find_elements()
Метод find_elements() полезен, когда вы хотите получить список всех элементов, которые соответствуют заданным критериям. В отличие от find_element(), этот метод вернёт пустой список, если ничего не найдено, вместо того чтобы генерировать исключение.
# Ищем все элементы с классом some_class elements = driver.find_elements(By.CLASS_NAME, 'some_class')
Пример кода с поиском элемента и клика по нему..find_element(By.ID, «sale_button»)
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
browser = webdriver.Chrome()
browser.get('https://mob25.com/')
button = browser.find_element(By.ID, "sale_button").click()
time.sleep(10)