硒CSS选择器,用于td跨度的第n次出现:nth-​​child(2)

Lit*_*leQ 5 python selenium xpath css-selectors

CSS选择td span:nth-child(2)意味着第二个孩子节点spantd。我想选择第n个td span:nth-child(2),类似于:

driver.find_element_by_css_selector("td span:nth-child(2):eq(4)")
Run Code Online (Sandbox Code Playgroud)

我知道我可以用

driver.find_elements_by_css_selector("td span:nth-child(2)")[4]
Run Code Online (Sandbox Code Playgroud)

或xpath代替:

driver.find_elements_by_xpath('(//td/span[2])[4]')
Run Code Online (Sandbox Code Playgroud)

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

Bol*_*ock 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>
Run Code Online (Sandbox Code Playgroud)

它不会与您在本示例中查找的元素匹配,因为每个元素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>
Run Code Online (Sandbox Code Playgroud)

如果您知道td:nth-child(4) span:nth-child(2)保证可以在您的情况下工作,请随意使用它。