Python Selenium如何在跨度后从div获取文本

时间:2016-04-06 14:50:53

标签: python selenium web-scraping

我希望在跨度后选择div中的文本。

来源看起来像这样:

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

我只想要&#34; (4),pp 100-200&#34;。

我知道如何从整个div或每个范围中获取文本,但是如何仅获取最后一个文本?这个XPATH不起作用。 ISSUE_XPATH =&#34; // * [@ id = \&#34;引用\&#34;] / text()[3]&#34;

并显示以下错误消息:

selenium.common.exceptions.InvalidSelectorException:消息:{&#34; errorMessage&#34;:&#34; xpath表达式的结果\&#34; // * [@ id = \&#34;引文\&#34;] /文本()[3] \&#34;是:[对象文本]。它应该是一个元素。&#34;

1 个答案:

答案 0 :(得分:2)

不幸的是,//*[@id=\"citation\"]/text()[3]无法在selenium中运行 - 您只能定位实际元素,而不是文本节点。

在这种情况下我要做的是另外使用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)