无法获取元素的文本.我想在这里使用动态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

如果您想全部返回它们,假设您的xpath是正确的,则必须使用find_elements_by_xpath。然后它返回一个它找到的所有元素的列表。

hElementsText = browser.driver.find_elements_by_xpath(hElements)
for el in hElementsText:
print(el.text)

使用browser.driver.find_element_by_xpath期望文本的方式将返回第一个元素的文本,该文本是空的,正如我在您共享的HTML中看到的那样。CCD_ 2在存在多个元素的情况下定位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)

所需的元素是一个启用JavaScript的元素,因此要从元素中检索文本,您需要为visibility_of_element_located()引入WebDriverWait,并且可以使用以下定位器策略之一:

  • 使用CSS_SELECTORget_attribute()方法:

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.w3-bar.w3-theme.w3-card-2.w3-wide.notranslate a#navbtn_tutorials"))).get_attribute("innerHTML"))
    
  • 使用XPATH文本属性:

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='w3-bar w3-theme w3-card-2 w3-wide notranslate']//a[@id='navbtn_tutorials']"))).text)
    
  • 注意:您必须添加以下导入:

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

最新更新