css选择器td span:nth-child(2)
表示span
的第二个子节点td
。我想选择第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选择器做同样的事情。
答案 0 :(得分:2)
使用CSS选择器无法执行此操作。 :eq()
来自jQuery,不属于任何标准。
td:nth-child(4) span:nth-child(2)
意味着完全不同的东西,并且只会在非常特定的情况下工作,例如当只有一个包含四个td
元素的表行时,所有这些元素都包含至少两个{{1}孩子们:
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>
可以保证在您的情况下有效,请随时使用。
答案 1 :(得分:1)
如果我正确理解您的问题,您也可以nth-child()
使用td
:
driver.find_elements_by_css_selector("td:nth-child(4) span:nth-child(2)")