使用Python在Selenium中第二次出现元素后获取td的文本

时间:2015-03-16 22:35:41

标签: python selenium xpath

我正在尝试在表单中的备注字段后找到该文本。但是,该表有多个备注字段。我希望能够抓住第二个备注字段的td之后的td中的文本。我有以下html:

<table>
  <tbody>
    <tr>...</tr> 
    <tr>...</tr>
    <tr>
      <td>Remarks:</td>
      <td>this is the first remarks field
    </tr>
    <tr>
      <td>AnotherField:</td>
      <td>Content of that field</td>
    </tr>
    <tr>
      <td>Remarks:</td>
      <td>this is the second remarks field</td>
    </tr>
    <tr>...</tr>
  </tbody>
</table>

要从第一个备注字段中抓取文本,我可以执行以下操作:

ret = driver.find_element_by_xpath("//td[contains(text(),'Remarks')]/following::td")
print ret.text

但是,我需要从第二个备注字段中获取内容。这必须基于“备注”出现的索引而不是基于索引来完成。我想尝试这样的事情:

ret = self.driver.find_element_by_xpath("//td[contains(text(),'Remarks')][1]/following::td")

或:

rets = self.driver.find_elements_by_xpath("//td[contains(text(),'Remarks')]")[1]
ret = elements.find_element_by_xpath("/following::td")

理解,这些不起作用。有办法做到这一点吗?在第n次发生备注后使用“字段”行的命令是我正在寻找的。

P.S。这必须使用xpath完成。原因是,我正在尝试将同事代码转换为来自另一个应用程序的selenium,该应用程序的所有内容都围绕着xpath。

我正在使用Selenium-2.44.0和Python 2.7。

1 个答案:

答案 0 :(得分:1)

索引从XPath中的1开始:

(//td[contains(., 'Remarks')]/following-sibling::td)[2]

或者,您可以使用find_elements_by_xpath()并获取第二项:

elements = self.driver.find_elements_by_xpath("//td[contains(., 'Remarks')]/following-sibling::td")
print elements[1].text