如何修复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
相关产品推荐
相关产品推荐

