我有一个动态的表,所以我不知道它将有多少个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]
如果您有更好的解决方案来解析此表中的数据,我建议您摆放它。
答案 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