Python Selenium:查找h1元素但返回空文本字符串

Win*_*ags 11 python selenium xpath hidden

我想在此页面的标题中获取文本:

在此输入图像描述

iShares FTSE MIB UCITS ETF EUR(Dist)

标签看起来像这样:

<h1 class="product-title" title="iShares FTSE MIB UCITS ETF EUR (Dist)"> iShares FTSE MIB UCITS ETF EUR (Dist) </h1>
Run Code Online (Sandbox Code Playgroud)

我正在使用这个xPath:

xp_name = ".//*[@class[contains(normalize-space(.), 'product-title')]]"
Run Code Online (Sandbox Code Playgroud)

.text在Selenium WebDriver for Python中检索:

new_name = driver.find_element_by_xpath(xp_name).text
Run Code Online (Sandbox Code Playgroud)

驱动程序找到xpath,但是当我打印时new_name,macOS Terminal只打印一个空字符串:""

这可能是什么原因?

在此输入图像描述


注意:我还尝试了一些其他的xpath替代方案,获得相同的结果,例如:

xp_name = ".//*[@id='fundHeader']//h1"
Run Code Online (Sandbox Code Playgroud)

And*_*son 17

问题是有两个h1外部完全相同的元素HTML:第一个是隐藏的,第二个不是.你可以检查一下

print(len(driver.find_elements_by_xpath('//h1[@class="product-title "]')))
Run Code Online (Sandbox Code Playgroud)

text属性允许您仅从可见元素获取文本,而textContent属性也允许获取隐藏元素的文本

尝试更换

new_name = driver.find_element_by_xpath(xp_name).text
Run Code Online (Sandbox Code Playgroud)

new_name = driver.find_element_by_xpath(xp_name).get_attribute('textContent')
Run Code Online (Sandbox Code Playgroud)

或者只是处理第二个(可见)标题:

driver.find_elements_by_xpath('//h1[@class="product-title "]')[1].text
Run Code Online (Sandbox Code Playgroud)