You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Python Selenium中获取span元素的首个<tr>祖先元素

解决从节点获取首个祖先节点的问题

你的核心问题是XPath未从目标元素出发做相对查找,导致匹配到了页面上无关的节点。以下是具体修正方案:

正确的XPath写法

针对目标元素,获取它的首个祖先有两种可靠方式:

  1. 基于祖先轴的相对查找(推荐,DOM结构变动时更稳定)

    class_parent_tr = element_to_search.find_element(By.XPATH, "./ancestor::tr[1]")
    
    • ./ 指定从当前element_to_search(即目标)开始查找
    • ancestor::tr 匹配所有祖先节点
    • [1] 取距离当前元素最近的那个(也就是第一个祖先)
  2. 基于父节点层级跳转(适合结构固定的场景)
    根据你描述的DOM结构:<span> → <div> → <td> → <tr>,可以直接向上跳转三级父节点:

    class_parent_tr = element_to_search.find_element(By.XPATH, "../../..")
    

修正其他代码问题

  1. 把硬编码的文本替换为变量,适配动态内容:

    class_parent_tr_02 = element_to_search.find_element(By.XPATH, f"//tr[.//span[text()='{myList[1]}']]")
    
  2. 修复最后一行获取的语法错误,同时用相对路径限定在当前范围内:

    result = class_parent_tr.find_element(By.XPATH, "./td[6]")
    

完整修正后的代码片段

替换原代码中从driver.get("https://www.nba.com/stats/teams/traditional")开始的部分:

driver.get("https://www.nba.com/stats/teams/traditional")
element_to_search = wait.until(EC.visibility_of_element_located((By.LINK_TEXT, myList[1])))
classes = element_to_search.find_element(By.XPATH, "./..")
print("-works well")
print(classes.get_attribute("class"))

# 正确获取首个<tr>祖先
class_parent_tr = element_to_search.find_element(By.XPATH, "./ancestor::tr[1]")
print("--")
print(class_parent_tr.get_attribute("class"))

# 用变量替代硬编码文本的写法
class_parent_tr_02 = element_to_search.find_element(By.XPATH, f"//tr[.//span[text()='{myList[1]}']]")
print("---")
print(class_parent_tr_02.get_attribute("class"))

# 修正语法错误并使用相对路径获取<td>
result = class_parent_tr.find_element(By.XPATH, "./td[6]")
print(result.text)

driver.quit()

内容的提问来源于stack exchange,提问作者xlmaster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 18:01:15