在xpath查询中按父节点的属性选择

问题描述 投票:0回答:1

我正在抓一个具有以下结构的网站:

<tbody>
   <tr class='Leaguestitle'>
      <td>...<\td>
      <td>...<\td>
   <\tr>
   <tr id='tr1_abababa'>
      <td>...<\td>
      <td>...<\td>
   <\tr>
   <tr id='tr2_abababa'>..<\tr>
    .
    .
   <tr id='tr1_acacaca'>..<\tr>
   <tr id='tr2_acacaca'>..<\tr>
   <tr align='center'>..<\tr>
    .
    .
   <tr id='tr1_cbcbcbc'>..<\tr>
   <tr id='tr2_cbcbcbc'>--<\tr>
<\tbody>

我想要的是循环遍历所有tr的类,并且所有tr都使用其id中的tr1,直到我到达具有对齐中心的节点,当我停止查询时。为此,我尝试使用以下xpath:

allrows=table.find_elements_by_xpath(
        './/tr[@class="Leaguestitle"] | .//tr[contains(@id,"tr1")] | .//tr[@align="center"]')

我对每个节点进行分类的想法是这样的:

for row in allrows:

   try:
     if 'Leaguestitle' in row.get_attribute('class'): something
   except:pass       

   try:
     if 'tr1' in row.get_attribute('id'): something else
   except:pass

   try:       
     if 'center' in row.get_attribute('align'): break
   except:pass

问题是,我得到的节点不是结构

<tr attributes>
  <td>...<\td>
  <td>...<\td>
<\tr>

但直接所有的儿童标签。为了尝试解决它,我做到了

for row in allrows:
   row=row.find_element_by_xpath('..')

那,当打印给我整个父标签,但我仍然无法使用我的分类代码,因为get_attribute返回空结果。

缺什么?

python-3.x xpath selenium-webdriver nodes
1个回答
0
投票

请尝试以下方法:

allrows = table.find_elements_by_xpath("//tr[@class='Leaguestitle' or contains(@id,'tr1') and not (@align='center')]")
© www.soinside.com 2019 - 2024. All rights reserved.