JavaRush /Курсы /Python SELF /Поиск элементов по HTML-атрибутам: id, class

Поиск элементов по HTML-атрибутам: id, class

Python SELF
35 уровень , 3 лекция
Открыта

1. Основы поиска элементов

Методы поиска элементов

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

  • find_element_by_id(): Ищет элемент по его уникальному идентификатору (id).
  • find_element_by_name(): Позволяет найти элемент через его атрибут name.
  • find_element_by_class_name(): Ищет элементы, у которых указан определенный класс (class).
  • find_element_by_tag_name(): Использует имя тега для поиска элементов, например, div, p, a.

Начнем с простого примера — поиска элемента по id. Представьте, что мы потеряли кнопку с надписью "Волшебная кнопка", и нам нужно ее найти:

Python

from selenium import webdriver

# Настройка драйвера и открытие браузера
driver = webdriver.Chrome()
driver.get('https://example.com')

# Поиск элемента по его id
magic_button = driver.find_element_by_id('magic_button_id')

# Работа с найденным элементом (например, извлечение текста)
print(magic_button.text)

# Завершение сессии
driver.quit()

Работа с найденными элементами

После того как мы нашли элемент, самое время решить, что с ним делать. Включаем фантазию и используем методы Selenium, такие как text для получения текстового содержимого элемента или get_attribute('attribute_name'), чтобы извлечь значение любого атрибута элемента.

Допустим, наш элемент — это ссылка, и мы хотим узнать, куда она ведет. Вот как мы это сделаем:

Python

# Поиск элемента со ссылкой
link_element = driver.find_element_by_class_name('link_class')

# Извлечение URL из атрибута href
link_url = link_element.get_attribute('href')
print(f'Эта ссылка ведет на: {link_url}')

2. Метод find_element_by_id()

Метод find_element_by_id() – один из самых быстрых и надежных способов поиска элемента на веб-странице. Он позволяет находить элементы по их уникальному атрибуту id. В HTML атрибут id является уникальным идентификатором, поэтому можно быть уверенным, что метод вернет единственный нужный элемент.

Пример использования:

Python

element = driver.find_element_by_id("submit-button")

В этом примере Selenium ищет элемент с id="submit-button" и сохраняет его в переменной element. Такой подход удобен для поиска кнопок, форм, полей ввода и других уникальных элементов, которые редко дублируются на странице.

Когда использовать?

Использование find_element_by_id() рекомендовано всегда, когда у элемента есть уникальный идентификатор id, поскольку этот метод обеспечивает быстрый и точный доступ к элементу.

2. Метод find_element_by_name()

Метод find_element_by_name() ищет элементы по атрибуту name. Он часто используется для форм и полей ввода, особенно когда элементы могут иметь одинаковый класс или id, но различный name. В отличие от id, атрибут name не обязательно уникален, и иногда на странице может быть несколько элементов с одним и тем же name.

Пример использования:

Python

element = driver.find_element_by_name("username")

Этот код ищет элемент с name="username". Обычно это поле для ввода имени пользователя в формах авторизации.

Когда использовать?

Этот метод полезен, если элемент на странице не имеет уникального id, но у него указан атрибут name. Он особенно эффективен для форм ввода, где элементы часто имеют идентификацию по name.

3. Метод find_element_by_class_name()

Метод find_element_by_class_name() ищет элемент по его классу (class). Он удобен для работы с CSS и позволяет находить элементы с одинаковым стилевым оформлением. Следует учитывать, что class может быть присвоен нескольким элементам, поэтому, если требуется найти только один элемент, важно уточнить уникальный класс или использовать другой метод.

Пример использования:

Python

element = driver.find_element_by_class_name("main-header")

В этом примере Selenium ищет первый элемент с классом main-header.

Когда использовать?

find_element_by_class_name() часто используется для поиска заголовков, кнопок и других стилизованных элементов. Этот метод особенно полезен, если у элементов нет уникального id или name, а также в случаях, когда нужно искать элементы по стилистическим особенностям.

4. Метод find_element_by_tag_name()

Метод find_element_by_tag_name() ищет элементы по названию тега, например, div, p, a, input. Он полезен для получения всех элементов одного типа, особенно если структура страницы позволяет легко ориентироваться по тэгам.

Пример использования:

Python

element = driver.find_element_by_tag_name("h1")

Здесь Selenium ищет первый элемент с тэгом h1, который обычно используется для заголовков на странице.

Когда использовать?

Метод find_element_by_tag_name() хорошо подходит для поиска заголовков, изображений, абзацев и других элементов, которые на странице представлены определенным типом тега. Однако, поскольку тегов одного типа на странице может быть много, этот метод не всегда точно укажет на конкретный элемент.

5. Особенности и ошибки

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

Хрупкость селекторов

При работе с атрибутами, такими как id и class, помните, что они могут изменяться. Выбор элемента по его id, который внезапно изменился, может привести к ошибке. Особенно это актуально для динамически сгенерированных страниц, где идентификаторы могут быть случайными. Решение? Используйте более устоявшиеся атрибуты или комбинированные подходы.

6. Практическое применение

Теперь мы знаем, как искать элементы по id, классу и имени. Польза от этого знания огромна, особенно когда дело доходит до автоматизации взаимодействия с веб-страницами. Успешно найденные элементы могут использоваться для заполнения форм, нажатия кнопок или извлечения информации — действий, которые могут существенно ускорить вашу работу и избавить от однообразных задач.

Представьте себе компанию, в которой каждый сотрудник тратит по 10 минут в день, заполняя одну и ту же форму на сайте. И вот тут на сцену выходит Selenium: он за несколько минут управится со всей рутиной, пока вы наслаждаетесь утренним кофе.

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

Комментарии (3)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Юрий Уровень 49
24 сентября 2025
метод find_element_by_id был удалён в более новых версиях Selenium (начиная с версии 4.0). Вместо этого теперь используется метод find_element с указанием стратегии поиска.
Anonymous #3577564 Уровень 57
2 июля 2025
Очень странный пассаж: "Метод find_element_by_name() ищет элементы по атрибуту name. Он часто используется для форм и полей ввода, особенно когда элементы могут иметь одинаковый класс или id, но различный name. В отличие от id, атрибут name не обязательно уникален, и иногда на странице может быть несколько элементов с одним и тем же name." Id уникален в пределах документа. И логичнее было бы сказать, что name имеет смысл использовать, например, если id просто отсутвует, или при других кейсах. Но такая формулировка, как сгенерирована авторами, дезинформирует студента.
Vlad Tagunkov Уровень 50
10 января 2025
те кто будет решать эти задачки НЕ используйте методы из лекции 😂 для извлечения элементов. валидатор мне выдал вот это

Используйте driver.find_element(By.CLASS_NAME, 'footer-link') для поиска элемента по классу, так как find_element_by_class_name устарел.

Авторы курса зачем вы учите в лекции тому что устарело и даже ваш валидатор говорит об этом.