如何用Selenium WebDriver获取文本?报错'list'无'text'属性
问题解决:'list'对象没有属性'text'
错误根源
driver.find_elements(By.CLASS_NAME, 'quote')返回的是匹配到的所有元素组成的列表,列表本身没有.text属性——只有单个WebElement对象才有这个属性。而且你原代码里每次循环都重复调用find_elements,既浪费资源又容易触发不必要的DOM查询。
修正后的完整代码
from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By options = Options() # 可按需添加配置,比如无头模式:options.add_argument('--headless=new') driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options) pages = 10 for page in range(1, pages + 1): # 修正范围,确保遍历到第10页 url = f"http://quotes.toscrape.com/js/page/{page}/" # 用f-string简化URL拼接 driver.get(url) # 一次性获取当前页所有quote元素,避免重复查询 quote_elements = driver.find_elements(By.CLASS_NAME, 'quote') for quote_elem in quote_elements: # 定位到quote内的文本子元素,提取纯文本 quote_text = quote_elem.find_element(By.CLASS_NAME, 'text').text print(quote_text) # 若需要保存结果,可添加到total列表 # total.append(quote_text) driver.quit() # 操作完成后关闭浏览器,释放资源
核心优化点
- 先获取完整的元素列表,再遍历列表中的单个元素调用
.text属性 - 将元素查询放在循环外,减少不必要的DOM交互
- 修正
range范围,确保覆盖所有目标页面 - 直接定位到
.text子元素,避免拿到quote容器的冗余内容 - 添加
driver.quit(),防止浏览器进程残留占用内存
内容的提问来源于stack exchange,提问作者jmur
相关产品推荐
相关产品推荐

