首页 > 解决方案 > 无法获取元素的文本。我想在这里使用动态xpath来获取标题元素的文本

问题描述

这是HTML。我想在这里使用动态 xpath 来获取标题元素的文本。

<div class="w3-bar w3-theme w3-card-2 w3-wide notranslate">
<a class="w3-bar-item w3-button w3-hover-white w3-padding-16 hidesm" onclick="w3_open()" href="javascript:void(0)">
<a id="navbtn_tutorials" class="w3-bar-item w3-button barex w3-hover-white w3-padding-16" onclick="w3_open_nav('tutorials')" href="javascript:void(0)">
TUTORIALS
<i class="fa fa-caret-down"></i>
<i class="fa fa-caret-up" style="display:none"></i>
</a>

hElements = "//div[@class='w3-bar w3-theme w3-card-2 w3-wide notranslate']//a" 
#is my xpath fetches all the header elements
hElementsSize = len(browser.driver.find_elements_by_xpath(hElements)) 
#fetches the size of the header elements
print("Total Header Elements:", hElementsSize)
hElementsText = browser.driver.find_element_by_xpath(hElements).text
print(hElementsText) 
#i'm not able to get the text of the header elements

标签: pythonseleniumselenium-webdriver

解决方案


您期望使用文本的方式browser.driver.find_element_by_xpath将返回第一个元素的文本,正如我在您共享的 HTML 中看到的那样,该文本是空的。findElement如果存在多个元素,则定位 DOM 中的第一个元素。

需要使用find_elements并循环检查预期的

hElements = "//div[@class='w3-bar w3-theme w3-card-2 w3-wide notranslate']//a"
listOfElement = driver.find_elements_by_xpath(hElements)
print("Total Header Elements:", len(listOfElement))

for element in listOfElement:
    print(element.text)

推荐阅读