使用Selenium提取表格中首个fakeheader下的datatable__rowtd元素求助
解决方法
错误分析
你之前的第二个XPATH语句失效有三个核心问题:
- XPATH索引是1-based而非0-based,
[0]无法定位到第一个元素,需改用[1] - class拼写错误:把
datatable--test写成了datatable-test(少一个连字符),导致无法匹配目标表格 - 错误使用子元素路径
//tr,实际目标datatable__rowtd是第一个fakeheader的同级元素,并非子元素
可行方案
方案1:直接取前4个目标元素(简单直接)
如果确认前4个datatable__rowtd就是所需内容,直接用位置筛选:
rows = driver.find_elements(By.XPATH, "//table[@class='datatable datatable--test datatable--tester ']/tbody/tr[@class='datatable__rowtd'][position()<=4]")
方案2:精准匹配第一个fakeheader后的目标元素(更鲁棒)
若后续元素数量可能变化,用此方法可精准定位第一个fakeheader与第二个fakeheader之间的所有datatable__rowtd:
rows = driver.find_elements(By.XPATH, "//table[@class='datatable datatable--test datatable--tester ']/tbody/tr[@class='datatable__rowtd'][preceding-sibling::tr[@class='datatable__rowtd datatable__rowtd--fakeheader'][1] and not(preceding-sibling::tr[@class='datatable__rowtd datatable__rowtd--fakeheader'][2])]")
方案3:分步定位(可读性更高)
先定位第一个fakeheader,再提取其后方的同级目标元素:
# 定位第一个fakeheader行 first_fake_header = driver.find_element(By.XPATH, "//table[@class='datatable datatable--test datatable--tester ']/tbody/tr[@class='datatable__rowtd datatable__rowtd--fakeheader'][1]") # 提取它后面的所有datatable__rowtd(自动匹配前4个,下一个fakeheader会截断后续元素) rows = first_fake_header.find_elements(By.XPATH, "./following-sibling::tr[@class='datatable__rowtd']")
内容的提问来源于stack exchange,提问作者terminxd
相关产品推荐
相关产品推荐

