JavaRush /Курси /Python SELF UA /Пошук елементів за HTML-атрибутами: id, class

Пошук елементів за HTML-атрибутами: id, class

Python SELF UA
Рівень 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 використовується для тестування веб-додатків, моніторингу змін на сайтах і навіть для швидкого відновлення забутого пароля на вашій улюбленій соцмережі, якщо раптом алгоритми вирішили, що на цих фото з пандою це не ви.

Коментарі (1)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
-_- Рівень 19
13 травня 2025
Прийміть до уваги що всі by_* методи з Selenium 3 тепер замінені на сучасний формат із By. у Selenium 4. Та тепер мають такий вигляд find_element(By.ID, 'magic_button_id') Знаходить елемент за ID. find_element(By.NAME, 'name') Дозволяє знайти елемент через його атрибут name. find_element(By.CLASS_NAME, 'class') Знаходить елемент за класом. find_element(By.TAG_NAME, 'tag') Використовує ім'я тегу для пошуку елементів, наприклад, div, p, a. PS Нажаль javarush не спішить оновлювати свій матеріал (