【问题标题】:How to get all td[3] tags from the tr tags with selenium Xpath in python如何在python中使用selenium Xpath从tr标签中获取所有td [3]标签
【发布时间】:2019-03-28 12:32:20
【问题描述】:

我有一个这样的网页 HTML:

<table class="table_type1" id="sailing">
  <tbody>
    <tr>
      <td class="multi_row"></td>
      <td class="multi_row"></td>
      <td class="multi_row">1</td>
      <td class="multi_row"></td>
    </tr>
    <tr>
      <td class="multi_row"></td>
      <td class="multi_row"></td>
      <td class="multi_row">1</td>
      <td class="multi_row"></td>
    </tr>
  </tbody>
</table>

并且 tr 标签是动态的,所以我不知道它们中有多少存在,我需要列表中任何 tr 标签的所有 td[3] 来进行一些切片。如果@,使用内置工具进行迭代会更好987654322@ 有迭代工具。

【问题讨论】:

    标签: python-3.x selenium xpath css-selectors web-crawler


    【解决方案1】:

    试试

    cells = driver.find_elements_by_xpath("//table[@id='sailing']//tr/td[3]")
    

    获取每行的第三个单元格

    编辑

    对于迭代,只需使用 for 循环:

    print ([i.text for i in cells])
    

    【讨论】:

    • 如何在没有对象奇怪代码的情况下用纯文本打印它?
    • 我以某种方式使用了相同的方法:对于单元格中的单元格:打印(cell.text)并且它起作用了。谢谢
    • 如果我想要所有 tr 标签,除了表中的最后一个标签,xpath 会做 tr[:-1]/td[4] 吗?
    • @iman_sh77 ,试试这个以获取每一行的第三个单元格(最后一个除外) //table[@id='sailing']//tr[position() &lt; last()]/td[3]
    • @iman_sh77,试试这个//table[@id='sailing']//tr[1]/td[3] | //table[@id='sailing']//tr[position() &gt; 1 and position() &lt; last()]/td[3]
    【解决方案2】:

    试试下面的代码:

    tdElements = driver.find_elements_by_xpath("//table[@id="sailing "]/tbody//td")
    

    编辑:第三个元素

    tdElements = driver.find_elements_by_xpath("//table[@id="sailing "]/tbody/tr/td[3]")
    

    【讨论】:

    • 我知道 XPath 部分,但我不知道如何对其进行迭代并提取第三个 td 的文本
    • tdElements = driver.find_elements_by_xpath("//table[@id="sailing "]/tbody/tr/td[3]") 你可以用这段代码得到它。
    【解决方案3】:

    打印文本,例如1 从第三个&lt;td&gt; 的每一个中,您可以使用get_attribute() 方法或text 属性,您可以使用以下任一解决方案:

    • 使用 CssSelectorget_attribute():

      print(driver.find_elements_by_css_selector("table.table_type1#sailing tr td:nth-child(3)").get_attribute("innerHTML"))
      
    • 使用 CssSelectortext 属性:

      print(driver.find_elements_by_css_selector("table.table_type1#sailing tr td:nth-child(3)").text)
      
    • 使用 XPathget_attribute():

      print(driver.find_elements_by_xpath('//table[@class='table_type1' and @id="sailing"]//tr//following::td[3]').get_attribute("innerHTML"))
      
    • 使用 XPathtext 属性:

      print(driver.find_elements_by_xpath('//table[@class='table_type1' and @id="sailing"]//tr//following::td[3]').text)
      

    【讨论】:

      【解决方案4】:

      要获取每行的第三个 td,您可以尝试使用 xpath

      driver.find_elements_by_xpath('//table[@id="sailing"]/tbody//td[3]')
      

      或者你可以试试css选择器

      driver.find_elements_by_css_selector('table#sailing td:nth-child(3)')
      

      当它返回列表时,您可以为每个列表进行迭代,

      elements=driver.find_elements_by_xpath('//table[@id="sailing"]/tbody//td[3]')
      
      for element in elements:
          print(element.text)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-24
        • 2012-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多