Я пытаюсь получить текстовое содержимое <p>
, содержащего конкретный текст, с помощью Selenium для Python.
Мой код работает для большинства страниц, на которых я его развернул, но не для этого конкретную страницу и некоторые другие, с которыми я встречался.
Если в противном случае код возвращает текстовое содержимое найденного <p>
, здесь он действительно находит элемент, но возвращает то, что кажется пустой строкой.
Что может быть причиной этого?
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("https://advisors.vanguard.com/VGApp/iip/site/advisor/investments/productoverview?fundId=4415")
match_string = "seeks to track the"
elmnt = driver.find_element_by_xpath((
"//*[self::p or self::span or self::div]" +
"[text()[contains(., '%s')]]" % match_string
)).text
print "Result:" + elmnt
Часть HTML страницы, где я хочу получить текст в <p>
:
<div style="margin:0px;">
<h2 style="margin-bottom:8px" class="option1"><!--PPE:Content-188-->Summary of this fund<!--End PPE--></h2>
<p>Vanguard International Dividend Appreciation ETF seeks to track the performance of a benchmark index that measures the investment return of non-U.S. companies that have a history of increasing dividends.</p>
</div>
p
,span
илиdiv
, а затем возвращает элемент, если он содержит текст вmatch_string
. - person P A N   schedule 27.06.2016p
. - person P A N   schedule 27.06.2016match_string
очень специфичен. Но другие узлы присутствуют, потому что код развернут на других страницах (если вы хотели отредактировать узлы). Я не знаю, вызывают ли они проблему, но я так не думаю, потому что код работает на других страницах. - person P A N   schedule 27.06.2016//*[self::p or self::span or self::div][text()[contains(., 'seeks to track the')]]/text()
, хотя и с запросами и lxml, я получаю'Vanguard International Dividend Appreciation ETF seeks to track the performance of a benchmark index that measures the investment return of non-U.S. companies that have a history of increasing dividends.', 'Vanguard International Dividend Appreciation ETF seeks to track the performance of a benchmark index that measures the investment return of non-U.S. companies that have a history of increasing dividends.'
- person Padraic Cunningham   schedule 27.06.2016div
elmnt.find_element_by_xpath("./preceding-sibling::h2").get_attribute("class")
показываетoption1
, поэтому вы определенно находите правильный тег, но по какой-то причине селен дает вам пустую строку - person Padraic Cunningham   schedule 27.06.2016driver = webdriver.PhantomJS() == No issue
, сохраните его самостоятельно и просмотрите его в хорошем редакторе с html, и вы увидите красный везде, также просмотрите это в браузере, и вы видите проблемы с кодировкой. lxml действительно справляется с этим нормально, но, очевидно, селен не так много - person Padraic Cunningham   schedule 27.06.2016PhantomJS
для этого проекта, но, возможно, для следующего :) - person P A N   schedule 28.06.2016bs4
. Раньше не пробовалlxml
. Если найду решение, попробую что-нибудь здесь выложить. - person P A N   schedule 28.06.2016