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

Selenium代码转换报错:AttributeError: 'list'对象无find_elements属性

Selenium新旧代码差异、报错原因及解决方法

一、新旧代码核心差异

  • 元素定位API更新:旧版本使用find_element_by_*/find_elements_by_*系列方法(如find_element_by_name、find_element_by_class_name),新版本统一替换为find_element(By.XXX, value)/find_elements(By.XXX, value)形式,参数通过By类指定定位策略。
  • 潜在逻辑差异:旧代码中main变量理论上会因presence_of_all_elements_located返回列表而报错,但可能是讲师笔误或旧版本兼容问题未触发;新代码严格遵循新版本API,直接暴露了这个逻辑错误。

二、报错原因

你使用了EC.presence_of_all_elements_located等待条件,该方法会返回匹配定位条件的元素列表,而Python列表对象没有find_elements方法——这就是AttributeError: 'list' object has no attribute 'find_elements'的根源。

另外,ID为main的页面元素是唯一的,用presence_of_all_elements_located(等待所有匹配元素)本身就不符合业务逻辑,应该用等待单个元素的条件。

三、解决方法

  1. 修正等待条件:将EC.presence_of_all_elements_located替换为EC.presence_of_element_located,该方法返回单个WebElement对象,支持调用find_elements等元素定位方法。
  2. 保留新版本定位语法:继续使用find_elements(By.CLASS_NAME, "entry-title")获取main容器下的所有文章标题元素。

修正后的完整代码:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

PATH = "my_path"
driver = webdriver.Chrome(PATH)

driver.get("https://techwithtim.net")

search = driver.find_element(By.NAME, value="s")
search.send_keys("test")
search.send_keys(Keys.RETURN)

try:
    # 等待单个ID为main的元素加载完成
    main = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "main")))
    # 获取main下所有文章标题元素
    articles = main.find_elements(By.CLASS_NAME, "entry-title")
    # 遍历输出标题(可选)
    for article in articles:
        print(article.text)
finally:
    driver.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:20:31