如何从使用 xpath 找到的元素中检索属性 aria-label 的值,就像使用 Selenium 的 html 一样



我有以下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"属性?

aria-label是span元素的属性,而不是按钮。 你可以这样得到它:

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

或者,如果您的目标是查找具有span包含属性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)]')

以下在 Java 中为我工作,

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

根据您的问题和您共享的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
# 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() 

我改用了这些方法,它奏效了!

如果 xpath 看起来很复杂,您可以使用类名检索它并使用 get_attribute 方法访问它。

value = driver.find_element(By.CLASS_NAME, 'glyphsSpriteHeart__filled__24__red_5 u-__7')
output = value.get_attribute("aria-label")

最新更新