Python Selenium定位指定文本a标签后提取同tr行多td内容问题
问题根因
错误来自两个XPath写法的常见误区:
- 相对XPath开头加了
//会从整个HTML文档根节点开始查找,而非基于你已定位的first元素上下文,所以始终返回整个页面第一个符合条件的节点,也就是首行对应数据 - 你定位到的
<a>标签的直接父节点是<td>,而非行节点<tr>,直接找<a>的同级节点是找不到其他列的<td>的
修正后可运行代码
from selenium import webdriver # 高版本Selenium(4.0+)需要导入Service,3.x旧版本可以省略下面这行 from selenium.webdriver.chrome.service import Service # 4.0+版本驱动写法 driver = webdriver.Chrome(service=Service('C:\\Users\\Carl\\Downloads\\chromedriver.exe')) # 3.x旧版本驱动写法,二选一即可 # driver = webdriver.Chrome('C:\\Users\\Carl\\Downloads\\chromedriver.exe') driver.get('https://www.ncaa.com/stats/football/fbs/current/team/27') team = "Coastal Carolina" # 定位到目标学校的a标签 team_a = driver.find_element_by_xpath(f'//a[text()="{team}"]') # 先找到a标签所属的最近一级tr行节点,XPath开头加.代表基于当前节点上下文查找 current_tr = team_a.find_element_by_xpath('./ancestor::tr[1]') # 按tr下的td列顺序取值,索引对应表格列的实际顺序 tds = current_tr.find_element_by_xpath('./td[4]').text total_points = current_tr.find_element_by_xpath('./td[10]').text ppg = current_tr.find_element_by_xpath('./td[11]').text print(tds, total_points, ppg) driver.quit()
关键逻辑说明
- 所有相对XPath开头加
.,强制基于已定位的元素上下文查找,避免全局匹配错误 - 先通过
./ancestor::tr[1]找到当前a标签所属的行节点,再按列索引取对应字段,逻辑和表格的视觉顺序完全对应,不容易写错索引
内容的提问来源于stack exchange,提问作者Molten Marlin
相关产品推荐
相关产品推荐

