如何通过Selenium和Python从HTML DOM中获取不同的文本

时间:2018-03-28 09:56:18

标签: python selenium

在以下示例中:

<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.

我可以以某种方式解决这个错误吗?

2 个答案:

答案 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]