选择 Selenium 中 td span 的第二个出现的 CSS 选择器:nth-child(2)。

6

css选择器td span:nth-child(2)表示td的第二个子节点span。我想要选择第n个td span:nth-child(2),类似于:

driver.find_element_by_css_selector("td span:nth-child(2):eq(4)")

我知道我可以使用
driver.find_elements_by_css_selector("td span:nth-child(2)")[4]

或者使用XPath替代:
driver.find_elements_by_xpath('(//td/span[2])[4]')

我只想知道是否可以使用CSS选择器做同样的事情。

2个回答

3

使用CSS选择器无法做到这一点。 :eq() 来自jQuery,不是任何标准的一部分。

td:nth-child(4) span:nth-child(2) 的含义完全不同,只在非常特定的情况下才能使用,例如当恰好有一个包含四个 td 元素且所有元素都至少包含两个 span子元素的表格行时:

<body>
  ...
  <table>
    <!-- The first, or only, row in the entire document
         with this many cells containing this many spans -->
    <tr>
      <td>
        <span></span>
        <span></span>
      <td>
        <span></span>
        <span></span>
      <td>
        <span></span>
        <span></span>
      <td>
        <span></span>
        <span></span>
  </table>
  ...
</body>

在这个例子中,它不会匹配你要查找的元素,因为每个 tr 只有两个 td 子元素,所以 td:nth-child(4) 永远不会匹配:

<body>
  ...
  <table>
    <tr>
      <td>
        <span></span>
        <span></span>
      <td>
        <span></span>
        <span></span>
    <tr>
      <td>
        <span></span>
        <span></span>
      <td>
        <span></span>
        <span></span> <!-- (//td/span[2])[4] -->
  </table>
  ...
</body>

如果您确定在您的情况下td:nth-child(4) span:nth-child(2)是可行的,请随意使用它。


谢谢,我正在处理后一种情况。我会使用 xpath - LittleQ

2

如果我理解你的问题正确,你也可以在 td 上使用 nth-child()

driver.find_elements_by_css_selector("td:nth-child(4) span:nth-child(2)")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接