CoderCastrov logo
CoderCastrov
Selenium

Как использовать метод поиска элемента по xpath в Selenium Python

Как использовать метод поиска элемента по xpath в Selenium Python
просмотров
4 мин чтение
#Selenium

Selenium - это инструмент автоматизации тестирования с открытым исходным кодом, который может использоваться для автоматизации действий веб-браузера. Python является популярным языком для автоматизированного тестирования и парсинга, и Selenium предоставляет привязку для Python для этой цели.

Существует множество методов для поиска элементов на веб-странице. В Selenium есть 8 различных методов для поиска элементов. Один из методов, который Selenium предоставляет для поиска элементов на веб-странице, это метод find_element (By.XPATH, xpath) (ранее find_element_by_xpath(xpath)). В этом блоге мы подробно рассмотрим метод поиска элемента по xpath в Selenium Python.

Что такое XPath?

XPath (XML Path Language) - это язык, используемый для обхода XML- и HTML-документов. Выражения XPath используются для навигации по элементам и атрибутам в XML- или HTML-документе. XPath использует нотацию пути, аналогичную путям файловой системы, где каждый элемент в пути представляет собой узел в документе.

Что такое метод find_element_by_xpath?

Метод find_element_by_xpath - это метод Selenium Python, который можно использовать для поиска элемента на веб-странице с использованием выражений XPath. Этот метод принимает один аргумент, который представляет собой выражение XPath, используемое для поиска элемента.

Синтаксис:

find_elements(By.XPATH, xpath)
find_element(By.XPATH, xpath)

Параметры: xpath: Строка, представляющая выражение XPath, используемое для поиска элемента.

Возвращаемое значение: Этот метод возвращает объект WebElement, представляющий первый элемент, соответствующий выражению XPath.

Пример:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
# Создание экземпляра веб-драйвера
driver = webdriver.Chrome(service=Service(r"C:\chromedriver.exe"))
# Переход на веб-страницу
driver.get("https://www.kushalstudy.com")
# Поиск всех заголовков блогов на странице с использованием выражения XPath
titles = driver.find_elements(By.XPATH, "//a[@class='wp-block-latest-posts__post-title']")
# Вывод всех заголовков в консоль
for title in titles:
        print(title.get_attribute('innerText'))
# Закрытие окна браузера
driver.close()

В приведенном выше коде мы сначала создаем экземпляр webdriver и переходим на веб-страницу. Затем мы используем метод find_elements(By.XPATH, …) для поиска элемента на веб-странице с использованием выражения XPath. В приведенном выше примере мы парсим все заголовки блогов, отображаемые на странице. После получения элемента мы можем выполнять действия с ним с помощью различных методов, предоставляемых классом WebElement.

Выражения XPath могут быть довольно сложными, но они предоставляют мощный способ поиска элементов на веб-странице. Некоторые распространенные выражения XPath, используемые для поиска элементов:

  • //tagname: Выбирает все элементы с указанным именем тега.
  • //tagname[@attribute=’value’]: Выбирает все элементы с указанным именем тега и значением атрибута.
  • //tagname[text()=’text’]: Выбирает все элементы с указанным именем тега и текстовым значением.

В Selenium существует два типа XPath:

  1. Абсолютный путь: XPath можно использовать для поиска элемента в абсолютных терминах. Абсолютное выражение XPATH содержит все элементы от корневого узла (HTML), от начала пути до нужного элемента. В нашем примере HTML-кода нам нужно найти текст Open Website, тогда код Selenium будет выглядеть следующим образом:
driver.find_element(By.XPATH, "/html/body/div/div/a")
  1. Относительный путь: Если у элемента есть класс или идентификатор, то мы можем использовать относительный путь. В нашем примере HTML-кода нам нужно найти текст Open Website, тогда код Selenium будет выглядеть следующим образом:
driver.find_element(By.XPATH, "//*[@class='someClassName']")

Напишите динамический XPath для поиска элемента

1. Использование одного атрибута (тип относительного XPath):

Ниже приведены некоторые примеры для поиска элемента <a>.

# Поиск по атрибуту HREF
driver.find_element(By.XPATH,"//a[@href='https://www.kushalstudy.com/']")
 
# Поиск по ID
driver.find_element(By.XPATH,"//a[@id='someIDName']")
# Поиск по имени класса
driver.find_element(By.XPATH, "//a[@class='someClassName']")
 
# Поиск по имени
driver.find_element(By.XPATH,"//a[@name='someName']")
 
# Поиск по другому/пользовательскому атрибуту
driver.find_element(By.XPATH, "//a[@data-name='some server data']")

2. Использование нескольких атрибутов (тип относительного XPath)

Вы можете комбинировать два или более атрибутов, разделяя их пробелом. В приведенном ниже коде мы комбинируем ID и класс для поиска элемента.

driver.find_element(By.XPATH,"//a[@id='someIDName'] [@class='someClassName']")

3. Поиск с использованием ключевого слова starts-with в XPath

Вы можете найти элемент, соответствующий значению атрибута, начинающемуся с заданного текста.

driver.find_element(By.XPATH,"//a[starts-with(@id, 'someID')]")

4. Поиск с использованием ключевого слова contains в XPath

Вы можете найти элемент, соответствующий значению атрибута, содержащему заданный текст.

driver.find_element(By.XPATH,"//a[contains(@id, 'meIDNa')]")

5. Использование ключевого слова text() для поиска в XPath

Вы можете найти элементы по тексту тега с точным совпадением, используя следующий код.

driver.find_element(By.XPATH,"//a[text()='Открыть веб-сайт']")

6. Использование ключевого слова text() для поиска с помощью contains в XPath

Вы можете найти элементы по соответствию текста тега любой части текста с помощью следующего кода.

driver.find_element(By.XPATH,"//a[contains(text(), 'Website')]")

Заключение:

Метод find_element_by_xpath в Selenium Python является мощным способом нахождения элементов на веб-странице с использованием выражений XPath. Понимая, как работают выражения XPath и синтаксис метода find_element_by_xpath, вы можете написать мощные и надежные скрипты автоматизации для тестирования и парсинга веб-приложений. Вы также можете проверить блог Как искать и находить элементы в Selenium Python для всех используемых методов в Python Selenium.