Урок 6. Работа с XPath и продвинутыми CSS-селекторами в Selenium

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

Что такое XPath?

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

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

driver = webdriver.Chrome()
driver.get("https://parsertools.ru/test")
time.sleep(10)  # небольшая пауза

# Поиск по XPath
element = driver.find_element(By.XPATH, "//div[@class='do-not-print']")
print(element.get_attribute("textContent")) # Хоть текст и невидимый мы всё равно его видим

В примере выше мы нашли <div> с классом do-not-print.

Основные приёмы работы с XPath

  • //tag — поиск всех элементов с указанным тегом.
  • //tag[@attr=’value’] — поиск элемента по атрибуту.
  • //tag[contains(@attr,’часть_значения’)] — поиск по части атрибута.
  • //tag[text()=’Текст’] — поиск по точному совпадению текста.
  • //tag[contains(text(),’фрагмент’)] — поиск по части текста.
# Примеры XPath
title = driver.find_element(By.XPATH, "//h1")  # Первый заголовок h1
button = driver.find_element(By.XPATH, "//button[contains(text(),'Отправить')]")
link = driver.find_element(By.XPATH, "//a[@href='/contacts']")

Расширенные возможности CSS-селекторов

CSS-селекторы обычно короче, чем XPath, и Selenium отлично работает с ними. Вы уже использовали поиск по классу и атрибуту, но можно применять и более сложные варианты:

  • div > span — выбор только прямого потомка.
  • .menu li:first-child — выбор первого элемента в списке.
  • input[type=’text’] — выбор по атрибуту.
  • button[class*=’submit’] — выбор по части атрибута.
# Примеры CSS-селекторов
first_item = driver.find_element(By.CSS_SELECTOR, ".menu li:first-child")
text_field = driver.find_element(By.CSS_SELECTOR, "input[type='text']")
submit_btn = driver.find_element(By.CSS_SELECTOR, "button[class*='submit']")

Когда использовать XPath, а когда CSS?

CSS-селекторы быстрее и лучше подходят для простых поисков (по классам, атрибутам). — XPath мощнее, так как позволяет искать по тексту и строить сложные запросы, включая навигацию по дереву DOM.

Обычно стоит начинать с CSS, а XPath использовать там, где CSS уже не справляется.

Заключение

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

Больше уроков по парсингу на parsertools.ru/lessons.