Python Selenium如何获取元素文本值?无固定ID元素定位及报错解决
报错原因拆解
- 第一个
'list' object has no attribute 'text'错误:调用find_elements_*系列方法返回的是符合条件的元素列表,列表本身没有text属性,必须先取出列表中对应位置的元素,再调用text属性。 - 第二个
'str' object has no attribute 'find_elements_by_tag_name'错误:你在获取元素的语句末尾直接加了.text,导致变量存储的是字符串类型的文本值,不是WebElement对象,自然无法调用元素查找方法。 - 你当前代码第二个值输出为空:是因为XPath定位规则没有匹配到secret对应的td节点,Reddit偏好应用页的secret字段需要通过前置的label定位。
正确实现方案
前置依赖
建议用显式等待避免元素未加载导致的定位失败,先导入对应模块:
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC
元素定位代码
# 初始化10秒显式等待 wait = WebDriverWait(browser, 10) # 1. 获取app id(h3标签下的应用ID,多应用可自行调整索引) app_id = wait.until(EC.presence_of_all_elements_located((By.TAG_NAME, "h3")))[1].text print("app id:", app_id) # 2. 获取secret密钥:定位文本为secret的th节点,取相邻td节点的文本 secret = wait.until(EC.presence_of_element_located( (By.XPATH, "//th[text()='secret']/following-sibling::td[1]") )).text print("api密钥:", secret)
注意事项
- 如果页面有多个创建好的应用,调整h3元素的索引值即可,索引从0开始计数。
- 若后续还需要操作对应元素,不要在获取WebElement的语句末尾直接加
.text,先存储WebElement对象,需要取值时再调用.text属性即可。
内容的提问来源于stack exchange,提问作者ConfusedCode
相关产品推荐
相关产品推荐

