发现只有'第一个匹配的兄弟姐妹

时间:2017-11-08 00:43:54

标签: python selenium selenium-webdriver

我想知道如何找到与特定标准相匹配的第一个先前兄弟(即.class =' a')?现在,当我运行搜索时,它会找到所有匹配的节点。这是我的意思的一个例子:

tr class = 'a'
tr class = 'b'
tr class = 'b'
tr class = 'a'
tr class = 'b'
tr class = 'a'
tr class = 'b'
tr class = 'b'
tr class = 'b'

对于b的每个实例,我试图找到第一个具有类' a'的前一个tr,但是当我运行代码时,它会找到所有前面的tr,它们有类' a& #39 ;.我也不能使用tr [1],因为有不同长度的课程' b'在每个班级以下' a'。以下是我要进入的内容:

//tr[@class='b']/preceding-sibling::tr[@class='a'] 

如果需要,我可以发布我的实际代码,但我认为这个例子说明了一切。

1 个答案:

答案 0 :(得分:0)

也许我误解了这个问题但是,如果html是这样的话:

<table>
   <tr class = 'a'>
      <th>1</th>
   </tr>
   <tr class = 'b'>
      <th>2</th>
   </tr>
   <tr class = 'b'>
      <th>3</th>
   </tr>
   <tr class = 'a'>
      <th>4</th>
   </tr>
   <tr class = 'b'>
      <th>5</th>
   </tr>
   <tr class = 'a'>
      <th>6</th>
   </tr>
   <tr class = 'b'>
      <th>7</th>
   </tr>
   <tr class = 'b'>
      <th>8</th>
   </tr>
   <tr class = 'b'>
      <th>9</th>
   </tr>
</table>

如果我执行此操作:

elList= driver.find_elements_by_xpath("//tr[@class='b']/preceding-sibling::tr[@class='a'] ")

print("len List: " + str(len(elList)))

for el in elList:
    print ("value: " + el.text)

输出结果为:

len List: 3
value: 1
value: 4
value: 6