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

时间:2018-10-24 07:23:38

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

我有一个类似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]来进行切片。如果使用{ {1}}具有迭代工具。

4 个答案:

答案 0 :(得分:1)

尝试以下代码:

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

编辑:对于第三个元素

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

答案 1 :(得分:1)

尝试

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

获取每行的第三个单元格

修改

要进行迭代,请使用for循环:

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

答案 2 :(得分:1)

要获取每行的第三个时标,您可以尝试使用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)

答案 3 :(得分:1)

要打印文字,例如在第三个<td>中,每个 1 都可以使用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)