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

Selenium报错:'list' object has no attribute 'text' 求助排查

问题分析与解决方案

核心错误原因

  1. 'list' object has no attribute 'text':你用driver.find_elements()获取内容,这个方法返回元素列表,列表没有text属性,自然报错。应该用driver.find_element()(单数形式)获取单个目标元素。
  2. 分页逻辑缺失:循环1到78页,但代码里没有任何分页跳转操作,一直停在第一页,后续页面的内容根本没被爬取。
  3. 元素失效问题:点击详情页返回列表后,之前定位的标题、链接元素会因为页面刷新变成"过时元素",必须重新定位才能继续操作。
  4. 缺失模块导入:代码里用了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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:25:21