我希望在跨度后选择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;
答案 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)