このヘッダーのテキストを取得しようとしていますページ:
iShares FTSE MIB UCITS ETF EUR (分配型)
タグは次のようになります。
<h1 class="product-title" title="iShares FTSE MIB UCITS ETF EUR (Dist)"> iShares FTSE MIB UCITS ETF EUR (Dist) </h1>
私は次のxPathを使用しています:
xp_name = ".//*[@class[contains(normalize-space(.), 'product-title')]]"
.text
Selenium WebDriver for Python経由で取得:
new_name = driver.find_element_by_xpath(xp_name).text
ドライバーは xpath を見つけますが、印刷するとnew_name
、macOS ターミナルは空の文字列のみを印刷します。""
その理由は何でしょうか?
注: 他の xpath の代替方法もいくつか試しましたが、同じ結果が得られました。たとえば、次のようになります。
xp_name = ".//*[@id='fundHeader']//h1"
ベストアンサー1
問題は、h1
全く同じ外側の要素が2つあることですHTML
。最初の要素は非表示ですが、2番目の要素は非表示ではありません。
print(len(driver.find_elements_by_xpath('//h1[@class="product-title "]')))
text
プロパティを使用すると、テキストを取得できます見えるだけ要素の属性はtextContent
テキストの取得も可能にします隠されたもの
置き換えてみる
new_name = driver.find_element_by_xpath(xp_name).text
と
new_name = driver.find_element_by_xpath(xp_name).get_attribute('textContent')
または、単に 2 番目の (表示される) ヘッダーを処理します。
driver.find_elements_by_xpath('//h1[@class="product-title "]')[1].text