用于第n次出现td span的Selenium CSS选择器:nth-​​child(2)

时间:2015-08-03 02:28:45

标签: python selenium xpath css-selectors

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选择器做同样的事情。

2 个答案:

答案 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)")