Python

Element.get_attribute в Python Selenium: как получить href, class, value и другие атрибуты

element.get_attribute() в Selenium нужен, когда вы уже нашли HTML-элемент на странице и хотите получить значение его атрибута: href, src, class, id, value, placeholder, data-* и так далее. Это не то же самое, что получить текст элемента. Текст — это то, что пользователь видит между тегами, а атрибуты лежат внутри самого HTML-тега

Например, у ссылки есть видимый текст и адрес

<a href="https://example.com/catalog" class="nav-link">Каталог</a>

Текст ссылки — Каталог, а атрибут href — https://example.com/catalog. Selenium позволяет получить оба значения, но разными способами

Короткий ответ

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

browser = webdriver.Chrome()
browser.get("https://example.com")

link = browser.find_element(By.TAG_NAME, "a")

print(link.text)
print(link.get_attribute("href"))

browser.quit()

link.text вернет видимый текст ссылки, а link.get_attribute("href") вернет адрес из атрибута href

Как получить href у всех ссылок

Частый сценарий — собрать все ссылки на странице

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

browser = webdriver.Chrome()
browser.get("https://example.com")

links = browser.find_elements(By.TAG_NAME, "a")

for link in links:
    href = link.get_attribute("href")
    text = link.text.strip()

    if href:
        print(text, "->", href)

browser.quit()

Проверка if href нужна, потому что у некоторых ссылок может не быть полноценного адреса, либо атрибут может быть пустым

Как получить value из input

Для полей формы часто нужен не текст, а атрибут value. Например, пользователь ввел значение в поле, а вы хотите проверить, что оно появилось

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

browser = webdriver.Chrome()
browser.get("https://example.com/form")

field = browser.find_element(By.NAME, "email")
field.send_keys("test@example.com")

value = field.get_attribute("value")
print(value)

browser.quit()

У input обычно нет видимого текста между тегами, поэтому field.text часто будет пустым. Для поля ввода почти всегда нужен value

Как получить class или data-атрибут

Метод работает не только с href и value

button = browser.find_element(By.CSS_SELECTOR, "button.buy")

print(button.get_attribute("class"))
print(button.get_attribute("data-product-id"))
print(button.get_attribute("aria-label"))

Это удобно, когда сайт хранит служебные данные в data-* атрибутах или когда нужно проверить состояние элемента по классу

Почему get_attribute возвращает None

Если get_attribute() возвращает None, это обычно значит одно из трех: атрибута нет, вы нашли не тот элемент, или страница еще не успела обновиться. Начинать лучше с проверки HTML в браузере: откройте инструменты разработчика и убедитесь, что нужный атрибут реально есть у выбранного элемента

Еще одна причина — вы ищете атрибут у родительского элемента, хотя он лежит внутри дочернего. Например, href есть у тега a, а вы нашли карточку товара div. В таком случае нужно найти ссылку внутри карточки

card = browser.find_element(By.CSS_SELECTOR, ".product-card")
link = card.find_element(By.TAG_NAME, "a")
print(link.get_attribute("href"))

Чем get_attribute отличается от text

text возвращает видимый текст элемента

button = browser.find_element(By.CSS_SELECTOR, "button")
print(button.text)

get_attribute() возвращает значение атрибута

print(button.get_attribute("type"))
print(button.get_attribute("disabled"))

Если задача звучит как «получить адрес ссылки», «получить значение input», «получить src картинки», нужен get_attribute(). Если задача звучит как «прочитать надпись на кнопке», нужен .text

Как получить src у картинки

image = browser.find_element(By.CSS_SELECTOR, "img.logo")
print(image.get_attribute("src"))
print(image.get_attribute("alt"))

src покажет путь к изображению, а alt — альтернативный текст, если он задан

Как дождаться элемента перед get_attribute

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

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

browser = webdriver.Chrome()
browser.get("https://example.com")

wait = WebDriverWait(browser, 10)
link = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "a")))

print(link.get_attribute("href"))

browser.quit()

Так код подождет до 10 секунд, пока элемент появится в DOM

Мини-практика

Создайте простую HTML-страницу page.html

<!doctype html>
<html lang="ru">
<body>
  <a href="https://aglamov.biz" class="site-link">Блог</a>
  <input name="city" value="Казань" placeholder="Ваш город">
  <img src="logo.png" alt="Логотип">
</body>
</html>

Откройте ее через Selenium и попробуйте получить href, class, value, placeholder, src и alt. Так вы быстро почувствуете разницу между текстом элемента и атрибутами

Частые ошибки

Первая ошибка — писать get_attribute(href) без кавычек. Имя атрибута должно быть строкой

link.get_attribute("href")

Вторая ошибка — ждать результат от .text у поля input. У поля ввода берите value

field.get_attribute("value")

Третья ошибка — искать атрибут не у того элемента. Если нужен href, убедитесь, что переменная содержит именно тег a, а не внешний контейнер

Что почитать дальше по Python

Если нужен общий маршрут по теме, откройте рубрику Python. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x