如何在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() < last()]/td[3]
@iman_sh77,试试这个//table[@id='sailing']//tr[1]/td[3] | //table[@id='sailing']//tr[position() > 1 and position() < 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 从第三个<td>
的每一个中,您可以使用get_attribute()
方法或text
属性,您可以使用以下任一解决方案:
使用 CssSelector 和 get_attribute()
:
print(driver.find_elements_by_css_selector("table.table_type1#sailing tr td:nth-child(3)").get_attribute("innerHTML"))
使用 CssSelector 和 text
属性:
print(driver.find_elements_by_css_selector("table.table_type1#sailing tr td:nth-child(3)").text)
使用 XPath 和 get_attribute()
:
print(driver.find_elements_by_xpath('//table[@class='table_type1' and @id="sailing"]//tr//following::td[3]').get_attribute("innerHTML"))
使用 XPath 和 text
属性:
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脚本会挂起