Answer a question

I am trying to get the text in the header on this page:

enter image description here

iShares FTSE MIB UCITS ETF EUR (Dist)

The tag looks like this:

<h1 class="product-title" title="iShares FTSE MIB UCITS ETF EUR (Dist)"> iShares FTSE MIB UCITS ETF EUR (Dist) </h1>

I am using this xPath:

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

Retrieving via .text in Selenium WebDriver for Python:

new_name = driver.find_element_by_xpath(xp_name).text

The driver finds the xpath, but when I print new_name, macOS Terminal only prints a blank string: ""

What could be the reason for this?

enter image description here


Note: I also tried some other xpath alternatives, getting the same result, for example with:

xp_name = ".//*[@id='fundHeader']//h1"

Answers

The problem is that there are two h1 elements with totally the same outer HTML: the first is hidden, the second is not. You can check it with

print(len(driver.find_elements_by_xpath('//h1[@class="product-title "]')))

text property allow you to get text from only visible elements while textContent attribute also allow to get text of hidden one

Try to replace

new_name = driver.find_element_by_xpath(xp_name).text

with

new_name = driver.find_element_by_xpath(xp_name).get_attribute('textContent')

or simply handle the second (visible) header:

driver.find_elements_by_xpath('//h1[@class="product-title "]')[1].text
Logo

学AI,认准AI Studio!GPU算力,限时免费领,邀请好友解锁更多惊喜福利 >>>

更多推荐