如何在python中使用selenium Xpath从tr标签中获取所有td [3]标签

Posted

技术标签:

【中文标题】如何在python中使用selenium Xpath从tr标签中获取所有td [3]标签【英文标题】:How to get all td[3] tags from the tr tags with selenium Xpath in python 【发布时间】: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@ 有迭代工具。

【问题讨论】:

【参考方案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)

【讨论】:

以上是关于如何在python中使用selenium Xpath从tr标签中获取所有td [3]标签的主要内容,如果未能解决你的问题,请参考以下文章

使用selenium phantomjs上传文件时,Python脚本会挂起

selenium java 怎么向右拖动

selenium元素定位

如何在 Python 中使用 Selenium?

org.openqa.selenium.WebDriverException:未知错误:调用函数结果缺少“值”

如何使用 python 和 Selenium 将 cookie 保存在浏览器中