/
Вопросы и ответы
/
Тестирование
/

Selenium получить значение атрибута

Selenium получить значение атрибута

3 года назад

Nikolai Gagarinov

Ответы

1

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

Пример кода на Python, который позволит получить значение атрибута "href" у элемента с id "link":

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from selenium import webdriver

# Создание экземпляра драйвера
driver = webdriver.Chrome()

# Открытие веб-страницы
driver.get("https://www.example.com")

# Нахождение элемента по id
element = driver.find_element_by_id("link")

# Получение значения атрибута "href"
attribute_value = element.get_attribute("href")

print(attribute_value)

# Закрытие браузера
driver.quit()

Этот код найдет элемент на веб-странице с id "link" и получит значение атрибута "href" у этого элемента, после чего выведет его на экран.

2 года назад

Olga Pejenkova

0

Значение атрибута возвращает метод get_attribute() у найденного элемента:

1
2
3
4
5
6
7
8
9
10
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://ru.hexlet.io")

link = driver.find_element(By.CSS_SELECTOR, "a")
print(link.get_attribute("href"))   # выведет адрес ссылки

driver.quit()

Если атрибута нет, метод вернёт None.

Частые примеры

1
2
3
4
5
6
7
8
9
10
field = driver.find_element(By.NAME, "email")
print(field.get_attribute("value"))        # что введено в поле
print(field.get_attribute("placeholder"))  # подсказка в поле

img = driver.find_element(By.TAG_NAME, "img")
print(img.get_attribute("src"))            # адрес картинки

button = driver.find_element(By.ID, "submit")
print(button.get_attribute("class"))       # классы элемента
print(button.get_attribute("disabled"))    # "true" или None

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

1
print(button.text)

HTML внутри элемента: element.get_attribute("innerHTML").

get_attribute, get_dom_attribute и get_property

В Selenium 4 есть три метода:

МетодЧто возвращает
get_attribute(name)свойство элемента, а если его нет — атрибут из HTML
get_dom_attribute(name)атрибут ровно как в HTML-коде
get_property(name)текущее свойство элемента в браузере

Разница видна на ссылках и полях ввода:

1
2
link.get_dom_attribute("href")  # "/courses" — как написано в HTML
link.get_attribute("href")      # "https://ru.hexlet.io/courses" — полный адрес

Для значения поля, которое пользователь изменил после загрузки, используйте get_property("value") или get_attribute("value").

Если get_attribute не работает

ОшибкаПричина и решение
AttributeError: 'WebDriver' object has no attribute 'find_element_by_...'методы find_element_by_* удалены в Selenium 4. Пишите find_element(By.ID, "...")
NoSuchElementExceptionэлемент не найден: неверный селектор или страница ещё не загрузилась
Возвращает Noneу элемента нет такого атрибута. Проверьте имя в DevTools
StaleElementReferenceExceptionстраница перерисовалась, найдите элемент заново

Если элемент появляется не сразу, дождитесь его:

1
2
3
4
5
6
7
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

link = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, "a.course"))
)
print(link.get_attribute("href"))

Selenium на Python разбирают на курсе «Python: Selenium», автотесты с нуля — на профессии «Автоматизатор тестирования на Python».

4 дня назад

Никита Вихров

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845