Selenium报错:'list' object has no attribute 'text' 求助排查
问题分析与解决方案
核心错误原因
- 'list' object has no attribute 'text':你用
driver.find_elements()获取内容,这个方法返回元素列表,列表没有text属性,自然报错。应该用driver.find_element()(单数形式)获取单个目标元素。 - 分页逻辑缺失:循环1到78页,但代码里没有任何分页跳转操作,一直停在第一页,后续页面的内容根本没被爬取。
- 元素失效问题:点击详情页返回列表后,之前定位的标题、链接元素会因为页面刷新变成"过时元素",必须重新定位才能继续操作。
- 缺失模块导入:代码里用了
time.sleep()但没导入time模块,会触发导入错误。
修复后的完整代码
from selenium.webdriver import Chrome from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import Select from selenium.webdriver.common.by import By from bs4 import BeautifulSoup from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager import time # 新增导入time模块 driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) driver.get('https://www.suwon.go.kr/sw-www/www01/www01-01.jsp?q_tabs=open') driver.implicitly_wait(10) # 延长隐式等待时间,提升稳定性 content = driver.find_element(By.TAG_NAME, 'iframe') driver.switch_to.frame(content) dropdown = Select(driver.find_element(By.XPATH,'//*[@id="dateType"]')) dropdown.select_by_index(4) driver.find_element(By.XPATH,'//*[@id="searchBtn"]').click() complaint_list = [] contents_list = [] def complaint_Scraping(): for page in range(1, 78): # 遍历77页,最后一页通过异常判断终止 # 每次进入页面都重新定位标题和链接,避免元素失效 titles = driver.find_elements(By.CSS_SELECTOR,'tbody > tr > td.left') for complaint in titles: name = BeautifulSoup(complaint.text, "html.parser").get_text(strip=True) complaint_list.append(name) links = driver.find_elements(By.CSS_SELECTOR,'tbody > tr > td.left > a') for link in links: link.click() time.sleep(2) # 用find_element获取单个元素,解决列表无text属性的问题 content_element = driver.find_element(By.XPATH,'//*[@id="txt"]/div[1]/div[1]/div/div[2]') content_text = BeautifulSoup(content_element.text, "html.parser").get_text(strip=True) contents_list.append(content_text) driver.back() time.sleep(1) # 返回后等待页面加载完成 # 分页跳转:点击下一页按钮 try: next_page_btn = driver.find_element(By.CSS_SELECTOR, 'div.paging > a.next') next_page_btn.click() time.sleep(2) except: # 找不到下一页按钮说明到最后一页,退出循环 break complaint_Scraping() # 可选:打印爬取结果统计 print(f"共爬取{len(complaint_list)}条标题,{len(contents_list)}条内容")
关键修改说明
- 将获取内容的
driver.find_elements()改为driver.find_element(),确保拿到单个元素后再调用text属性。 - 每次分页循环时重新定位标题和链接元素,解决页面返回后元素失效的问题。
- 添加分页跳转逻辑,通过点击"下一页"按钮切换页面,同时增加异常处理避免最后一页报错。
- 导入缺失的
time模块,延长隐式等待时间提升爬取稳定性。 - 用
get_text(strip=True)清理解析后的文本,去除多余空格和换行。
内容的提问来源于stack exchange,提问作者film lie
相关产品推荐
相关产品推荐

