在以下示例中:
<tr>
<td>
</td>
<td>
</td>
<td>
</td>
<td>
</td>
<td>
text1
<br>
<img>
<br>
text2
</td>
</tr>
当我尝试在第5个td中获取文本时:
something = elem.find_element_by_xpath('./td[5]').text
我在同一个变量中得到两个文本。我可以分开它们,但我想知道我是否可以某种方式将它们放入个别变量中,所以我不会为分裂而烦恼。但是当我尝试这样的事情时:
something = elem.find_element_by_xpath('./td[5]/text()[1]')
我收到以下错误消息:
InvalidSelectorException: invalid selector:
The result of the xpath expression "./td[5]/text()[1]" is: [object Text].
It should be an element.
我可以以某种方式解决这个错误吗?
答案 0 :(得分:3)
您可以尝试以下代码来获取两个单独的文本节点:
something = elem.find_element_by_xpath('./td[5]')
text1 = driver.execute_script('return arguments[0].firstChild.textContent;', something).strip()
text2 = driver.execute_script('return arguments[0].lastChild.textContent;', something).strip()
答案 1 :(得分:1)
在您使用的初始代码试用中:
something = elem.find_element_by_xpath('./td[5]').text
你有两个元素 text1 和 text2 ,因为这两个文本都属于<td[5]>
在您使用下一次代码试用时:
something = elem.find_element_by_xpath('./td[5]/text()[1]')
提出 InvalidSelectorException
,因为虽然 ./ td [5] / text()是有效的xpath
表达式,但目前不支持通过 Selenium 。因此提出了错误。
要从您提供的 HTML 中提取文字 text1 和 text2 ,您可以使用str.splitlines
方法,如下所示:
text1 = driver.find_element_by_xpath("//tr//following-sibling::td[5]").get_attribute("innerHTML").splitlines()[1]
text2 = driver.find_element_by_xpath("//tr//following-sibling::td[5]").get_attribute("innerHTML").splitlines()[5]