XPath находит элемент, содержащий текст, но возвращает пустую строку

Я пытаюсь получить текстовое содержимое <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>

person P A N    schedule 27.06.2016    source источник
comment
Пожалуйста, включите HTML, с которым вы работаете   -  person Mo H.    schedule 27.06.2016
comment
@MoH. Это связано в вопросе и в коде.   -  person P A N    schedule 27.06.2016
comment
Это хорошо, но я не нажимаю ссылку на внешний сайт, пожалуйста, включите весь соответствующий код в свой вопрос   -  person Mo H.    schedule 27.06.2016
comment
@MoH. Добавил часть кода.   -  person P A N    schedule 27.06.2016
comment
Какая логика стоит за xpath?   -  person Padraic Cunningham    schedule 27.06.2016
comment
@PadraicCunningham Он ищет любой узел типов p, span или div, а затем возвращает элемент, если он содержит текст в match_string.   -  person P A N    schedule 27.06.2016
comment
Итак, любые / все 3, содержащие match_string?   -  person Padraic Cunningham    schedule 27.06.2016
comment
@PadraicCunningham Да, для конкретной веб-страницы это будет узел p.   -  person P A N    schedule 27.06.2016
comment
Но совпадет только один?   -  person Padraic Cunningham    schedule 27.06.2016
comment
@PadraicCunningham Да, на этой веб-странице будет соответствовать только один, потому что match_string очень специфичен. Но другие узлы присутствуют, потому что код развернут на других страницах (если вы хотели отредактировать узлы). Я не знаю, вызывают ли они проблему, но я так не думаю, потому что код работает на других страницах.   -  person P A N    schedule 27.06.2016
comment
Используя //*[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.2016
comment
Странно, tag_name - p, родительский - div elmnt.find_element_by_xpath("./preceding-sibling::h2").get_attribute("class") показывает option1, поэтому вы определенно находите правильный тег, но по какой-то причине селен дает вам пустую строку   -  person Padraic Cunningham    schedule 27.06.2016
comment
Хорошо, я сохранил как источник из запросов, так и то, что вернул driver.page_source, html сломан с использованием chrome и firefox, используя driver = webdriver.PhantomJS() == No issue, сохраните его самостоятельно и просмотрите его в хорошем редакторе с html, и вы увидите красный везде, также просмотрите это в браузере, и вы видите проблемы с кодировкой. lxml действительно справляется с этим нормально, но, очевидно, селен не так много   -  person Padraic Cunningham    schedule 27.06.2016
comment
@PadraicCunningham Спасибо, что взглянули на это поближе. Я немного удивлен, что ошибка кажется распространенной, потому что у меня эта ошибка была на нескольких страницах, в то время как код работает на большинстве страниц, которые я пытался очистить. Проблема может быть больше связана с Selenium, чем с чем-либо. Я не смогу перейти на PhantomJS для этого проекта, но, возможно, для следующего :)   -  person P A N    schedule 28.06.2016
comment
Не беспокойтесь, это должна быть проблема синтаксического анализа, поскольку вы действительно попадаете в тег, но по какой-то причине текст, который должен присутствовать, кажется, там отсутствует. Вы можете попробовать другую версию firefox, у меня есть более старый двоичный файл, который я опробую и посмотрю.   -  person Padraic Cunningham    schedule 28.06.2016
comment
К сожалению, та же проблема, не могли бы вы включить lxml в свой код? Или действительно bs4?   -  person Padraic Cunningham    schedule 28.06.2016
comment
@PadraicCunningham Может быть, можно будет выполнить синтаксический анализ через bs4. Раньше не пробовал lxml. Если найду решение, попробую что-нибудь здесь выложить.   -  person P A N    schedule 28.06.2016
comment
Lxml работает для меня, разбирая исходный код из Firefox и Chrome, поэтому это может быть более надежный вариант   -  person Padraic Cunningham    schedule 28.06.2016
comment
@Winterflags, можешь поделиться еще одним работающим и еще одним неработающим сайтом?   -  person Padraic Cunningham    schedule 28.06.2016