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

如何修复Selenium Python报错:'list' object has no attribute 'text'

错误触发原因
  • Selenium 中 find_elements_by_xxx 系列方法返回的是符合定位条件的WebElement列表,即使实际只匹配到1个元素,返回结果仍然是list类型,而列表本身没有text属性,因此调用.text时抛出AttributeError。
  • 额外逻辑问题:你当前写的三层嵌套for循环逻辑错误,会把所有元素两两组合输出888=512次,不符合输出对应时间点三个城市数据的需求。
修复方案

方案1:修改元素定位方法(推荐)

把所有元素定位语句的find_elements_by_xpath改为find_element_by_xpath(去掉末尾的s),直接返回单个WebElement对象,具备text属性。
再修改循环逻辑,用zip函数同时遍历三个数据列表的同索引元素:

# 元素定位代码修改示例,所有语句统一把find_elements改成find_element
Davao14 = wd1.find_element_by_xpath('/html/body/div[2]/div[4]/div/div[3]/div[1]/div[1]/div/div/div[1]')
# 其余Davao、Cebu、Manila的定位语句统一修改,这里省略重复内容

data1 = [Davao14, Davao15, Davao16, Davao17, Davao18, Davao19, Davao20, Davao21]
data2 = [Cebu14, Cebu15, Cebu16, Cebu17, Cebu18, Cebu19, Cebu20, Cebu21]
data3 = [Manila14, Manila15, Manila16, Manila17, Manila18, Manila19, Manila20, Manila21]

# 循环修改为同索引遍历
for davao_item, cebu_item, manila_item in zip(data1, data2, data3):
    print("***DAVAO-CITY***\n\n")
    print(davao_item.text)
    print("\n\n")
    print("***CEBU-CITY***\n\n")
    print(cebu_item.text)
    print("\n\n")
    print("***MANILA-CITY***\n\n")
    print(manila_item.text)
    print("="*50) # 可选加分隔线区分不同组结果

方案2:不修改定位语句,取列表第一个元素

如果不想调整定位代码,也可以在调用.text前取列表的第0位元素(需确保你的xpath确实只匹配到1个元素):

# 循环部分修改为取列表第一个元素
for datas1, datas2, datas3 in zip(data1, data2, data3):
    print("***DAVAO-CITY***\n\n")
    print(datas1[0].text)
    print("\n\n")
    print("***CEBU-CITY***\n\n")
    print(datas2[0].text)
    print("\n\n")
    print("***MANILA-CITY***\n\n")
    print(datas3[0].text)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:48:01