Как получить значение атрибута aria-label из элемента, найденного с помощью xpath, в соответствии с html с использованием Selenium

У меня есть следующий диапазон HTML:

<button class="coreSpriteHeartOpen oF4XW dCJp8">
    <span class="glyphsSpriteHeart__filled__24__red_5 u-__7" aria-label="Unlike"></span>
</button>

У меня также есть webElement, представляющий кнопку, содержащую этот диапазон, который я нашел с помощью xpath. Как я могу получить значение aria-label (в отличие от) из элемента?

Я пытался сделать:

btn = drive.find_element(By.xpath, "xpath") 
btn.get_attribute("aria-label")

но ничего не возвращает. Как получить текстовое значение элемента с атрибутом aria-label из объекта элемента?


person ben    schedule 24.08.2018    source источник
comment
Можете ли вы опубликовать более полный пример кода/документа с содержащей его кнопкой и кодом, который создает btn в Python?   -  person ggorlen    schedule 24.08.2018
comment
Достаточно ли сейчас?   -  person ben    schedule 24.08.2018
comment
Это помогает, но как вы запустили драйвер? Я должен был сослаться на минимальный, полный и проверяемый пример, иначе мне придется делать предположения о вашем коде, которые могут быть неточными. Тем не менее, "xpath" выглядит для меня довольно подозрительным xpath.   -  person ggorlen    schedule 24.08.2018
comment
поделитесь локатором xpath, который вы использовали   -  person Sers    schedule 24.08.2018
comment
Не могли бы вы объяснить мне, как Instagram js определяет, какую кнопку «Нравится» вы нажали, поскольку на одной странице есть несколько кнопок «Нравится» с одинаковым именем класса?   -  person user1788736    schedule 13.07.2019


Ответы (4)


aria-label является атрибутом элемента span, а не кнопки. Вы можете получить это следующим образом:

btn = drive.find_element(By.xpath, "xpath") 
aria_label = btn.find_element_by_css_selector('span').get_attribute("aria-label")

Или, если ваша цель — найти кнопку с диапазоном, содержащим атрибут aria-label="Unlike":

btn = drive.find_element(By.XPATH, '//button[./span[@aria-label="Unlike"]]')
#you can add class to xpath also if you need
btn = drive.find_element(By.XPATH, '//button[./span[@aria-label="Unlike"] and contains(@class,"coreSpriteHeartOpen)]')
person Sers    schedule 24.08.2018

Следующее работало для меня на Java,

WebElement btnelement= driver.findElement(
                        By.xpath("//span[@aria-label='Unlike']"));
System.out.println("Attribute value is " + btnelement.getAttribute("value"));
person Vishal Kharde    schedule 22.10.2019

Судя по вашему вопросу и предоставленному вами HTML, этот элемент представляет собой React. элемент, поэтому для получения атрибута aria-label вам нужно вызвать WebDriverWait, чтобы желаемый элемент был видимым, и вы можете использовать следующее решение :

print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "element_xpath_you_found"))).get_attribute("aria-label"))

Примечание. Вы должны добавить следующие импорты:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
person DebanjanB    schedule 24.08.2018

# Like method
lov = el.find_element_by_class_name('glyphsSpriteHeart__outline__24__grey_9').click()  

# Unlike method
lov = el.find_element_by_class_name('glyphsSpriteHeart__filled__24__red_5').click() 

Вместо этого я использовал эти методы, и это сработало!

person Abhijeet Shevate    schedule 24.09.2019