2016-04-06 2 views
1

Я хочу выбрать текст в div после пролета.Python Selenium как получить текст из div после пробела

Источник выглядит следующим образом:

<div id="citation"> 
    <cite>Journal</cite> 
    ", " 
    <span class="year">2014</span> 
    ", " 
    <span class="volume">100</span> 
    " (4), pp 100-200" 
</div> 

Я только хочу "(4), стр 100-200".

Я знаю, как получить текст из всего div или каждого пролета, но как я могу получить только последний текст? Этот XPATH не будет работать. ISSUE_XPATH = "// * [@ ид = \" цитата \ "]/текст() [3]"

И показывает это сообщение об ошибке:

selenium.common.exceptions.InvalidSelectorException: Сообщение: {» errorMessage ":" Результат выражения xpath \ "// * [@ id = \" citation \ "]/text() [3] \" is: [object Text]. Это должен быть элемент. "

ответ

1

К сожалению, //*[@id=\"citation\"]/text()[3] не собирается работать в селене - вы можете ориентировать только фактические элементы, а не текстовые узлы.

Что я буду делать в этом случае дополнительно использовать BeautifulSoup HTML-парсер, который помог бы найти определенный текст родственный после span элемента с class="volume":

from bs4 import BeautifulSoup 

citation = driver.find_element_by_id("citation") 
html = citation.get_attribute("outerHTML") 

soup = BeautifulSoup(html, "html.parser") 
desired_text = soup.find("span", class_="volume").next_sibling 
print(desired_text) 
+0

Спасибо! Я пробовал этот код, но я продолжаю получать эту ошибку: «AttributeError: объект« NoneType »не имеет атрибута« next_sibling ». Я не уверен, почему. – moglido

+0

@moglido Что делать, если вы печатаете 'html' - что вы получаете? Благодарю. – alecxe

+0

Печать html дает мне html из div выше. однако в тексте вывода терминала нет кавычек. – moglido

Смежные вопросы