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

Python Selenium中get_attribute()方法报错及获取指定<tr>下第6个<td>元素的问题

解决Selenium get_attribute报错及获取目标内容的方案

先聊聊报错的根源

你碰到的Did you mean 'getattribute'错误,本质是两个基础用法错误导致的:

  1. 错误使用element.parent:Python Selenium的WebElement对象并没有parent属性用来直接获取父元素,用这个方式拿到的不是有效的WebElement实例,自然没法调用get_attribute()方法。
  2. XPATH定位语法错误:你写的element_to_search.find_element(By.XPATH(".."))是错的,By.XPATH是By类下的常量属性,正确调用格式是find_element(By.XPATH, "..")——要把定位方式和表达式作为两个独立参数传入,而非把By.XPATH当函数调用。

实现核心需求的具体方案

你的目标是:定位球队名称所在的 → 找到所属的 → 获取该下第6个的内容。这里给你两种实现方式,按需选择:

方式1:简洁链式定位

直接从球队名称元素出发,用XPATH一步定位到目标:

# 定位到球队名称元素后,直接获取目标<td>
target_td = element_to_search.find_element(By.XPATH, "./../td[6]")
# 打印目标内容
print(target_td.text)
  • ./代表当前元素(球队名称所在的)
  • ../代表它的直接父元素()
  • td[6]代表下的第6个(XPATH索引从1开始计数)

方式2:分步定位(便于调试)

如果需要分步验证每一步的元素是否正确,可以拆分步骤:

# 1. 正确获取球队<td>的父元素<tr>
parent_tr = element_to_search.find_element(By.XPATH, "..")
# 验证父元素:打印它的class属性(现在不会报错了)
print(parent_tr.get_attribute("class"))

# 2. 在<tr>下找到第6个<td>
target_td = parent_tr.find_element(By.XPATH, "./td[6]")
# 输出目标内容
print(target_td.text)

修正后的完整代码

把你原代码中出错的部分替换,完整代码如下:

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from datetime import datetime

driver = webdriver.Chrome(r"C:\Users\Admin\Downloads\chromedriver_win32 (1)\chromedriver.exe")
driver.get("https://www.nba.com/schedule?pd=false&region=1")
driver.implicitly_wait(5)

# 同意隐私政策
element_to_click = driver.find_element(By.ID, "onetrust-accept-btn-handler")
element_to_click.click()

# 获取球队列表并写入文件
element_to_save = driver.find_element(By.XPATH, "//div/div/div/div/h4")
f = open('result_file00.txt', 'w+')  # 用w+避免文件残留旧内容
f.write(element_to_save.text)
f.write("\n")
f.write(str(datetime.today()))
myList = []
myList.append(1)
elements_to_save = driver.find_elements(By.XPATH, "//*[@data-id='nba:schedule:main:team:link']")
for element in elements_to_save:
    f.write(" ")
    f.write(element.text)
    myList.append(element.text)
    f.write(" \n ")
    f.write(str(datetime.today()))
f.close()

# 读取并打印文件内容
f = open('result_file00.txt', 'r+')
print(f.read())
f.close()
print(myList)
print(type(myList))

# 跳转到球队数据页面
time.sleep(1)
driver.get("https://www.nba.com/stats/teams/traditional")
driver.implicitly_wait(5)  # 页面跳转后加等待,确保元素加载完成

# 定位到第一个球队名称元素
element_to_search = driver.find_element(By.LINK_TEXT, myList[1])

# --- 核心修正部分 ---
# 方式1:直接获取目标内容
target_td = element_to_search.find_element(By.XPATH, "./../td[6]")
print("目标内容:", target_td.text)

# 若需要分步验证,可替换为方式2
# parent_tr = element_to_search.find_element(By.XPATH, "..")
# print("父元素class:", parent_tr.get_attribute("class"))
# target_td = parent_tr.find_element(By.XPATH, "./td[6]")
# print("目标内容:", target_td.text)

driver.quit()

额外小提示

  1. 页面跳转后建议加隐式等待或显式等待,避免因页面未加载完成出现元素找不到的问题。
  2. 如果By.LINK_TEXT定位失败,可尝试By.PARTIAL_LINK_TEXT或XPATH定位,比如//a[text()='{}']".format(myList[1])。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 16:13:11