python中带有硒的tr标签从其特定td标签的查找索引

时间:2018-10-27 09:15:25

标签: python python-3.x selenium

我有一个动态的表,所以我不知道它将有多少个tr。 这是抽象代码:

<table id='detail'>
  <tbody>
  <tr>
    <td class='multi_row'>Outbound Rail Unloading</td>
    <td class='multi_row'>MONTREAL, QC ,CANADA</td>
    <td class='ico_a'>2018</td>
  </tr>
  <tr>
    <td class='multi_row'>some text</td>
    <td class='multi_row'>some another text</td>
    <td class='ico_a'>2018</td>
  <tr>
    <td class='multi_row'>some text</td>
    <td class='multi_row'>some another text</td>
    <td class='i_e'>2019</td>
  </tr>
 </tbody>
</table>

所以我想要最后一个ico_a的索引(列表中的最后一个ico_a显示产品在哪里,这就是为什么我需要它)在本示例中为1(必须从0开始计数)。因为我需要在同一张表中添加一些其他数据,所以我宁愿选择一个解决方案,该方法可以获取整个表并进行迭代,同时我还可以得到一些像这样的数据:

event_path = driver.find_elements_by_xpath("//table[@id='detail']//tr/td[2]")
event = [driver.execute_script('return arguments[0].firstChild.textContent;', cell).strip() for cell in event_path]

place_path = driver.find_elements_by_xpath("//table[@id='detail']//tr//td[3]")
place = [driver.execute_script('return arguments[0].firstChild.textContent;', cell).strip() for cell in place_path]

如果您有更好的解决方案来解析此表中的数据,我建议您摆放它。

1 个答案:

答案 0 :(得分:3)

要获取所有tr标记中带有ico_a类的所有td [3],

element= driver.find_elements_by_xpath("//table//td[3][@class='ico_a']")
elementvalues = [element.text  for element in elements]

要获取带有ico_a类的最后一个td的tr索引,

cell=driver.find_element_by_xpath("(//table//td[@class='ico_a'])[last()]/parent::tr")
driver.execute_script('return arguments[0].rowIndex;', cell)
# 1 

索引从0此处开始

要使用ico_a类获取最后的td,

driver.find_element_by_xpath("(//table//td[@class='ico_a'])[last()]").text
# 2018

要获取包含ico_a类的最后一个td的行的td [2]值,

driver.find_element_by_xpath("(//table//td[@class='ico_a'])[last()]/preceding-sibling::td[1]")).text
# some another text

要获取包含ico_a类的最后一个td的行的td [1]值,

driver.find_element_by_xpath("(//table//td[@class='ico_a'])[last()]/preceding-sibling::td[1]")).text
# some another text