【问题标题】:Selenium find_all method raises AttributeError: 'list' object has no attribute 'find_elements'Selenium find_all 方法引发 AttributeError:\'list\' 对象没有属性 \'find_elements\'
【发布时间】:2022-12-09 21:13:44
【问题描述】:

我正在观看有关 Python 的 Selenium Python Selenium Tutorial - Tech with Tim 的 YouTube 教程视频。该视频是 2 年前上传的,似乎 python 的 Selenium 发生了变化( find_elements_by_... 函数被 find_elements(by = ...) 取代)。我的问题是,当我尝试转换代码时,我得到一个 AttributeError 作为:AttributeError: 'list' object has no attribute 'find_elements'。我正在共享代码的旧版本和新版本。旧版本之间有什么区别,为什么会出现以下错误?我该如何解决?提前致谢!

###Old Version###
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("s")
search.send_keys("test")
search.send_keys(Keys.RETURN)

try:
    main = WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.ID, "main")))
    articles = main.find_element_by_class_name("entry-title")

finally:
    driver.quit()
###My New Version###
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:
    main = WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.ID, "main")))
    articles = main.find_elements(By.CLASS_NAME, "entry-title")

finally:
    driver.quit()

视频中,导师试图获取ID:main中的文章。但是,当我尝试重写代码时,出现属性错误。

【问题讨论】:

    标签: python selenium selenium-webdriver webdriverwait attributeerror


    【解决方案1】:

    find_elements()方法只能应用于WebDriver对象或WebElement对象。
    这里main = WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.ID, "main")))main是一个列表WebElement 个对象。因此,要应用 find_elements,您必须使用另一个 expected_conditions,例如 presence_of_element_located,这样 main 将是单个 WebElement 对象

    main = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "main")))
    articles = main.find_elements(By.CLASS_NAME, "entry-title")
    

    或者从列表中提取单个元素,如下所示:

    main = WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.ID, "main")))
    articles = main[0].find_elements(By.CLASS_NAME, "entry-title")
    

    【讨论】:

      猜你喜欢
      • 2023-02-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-28
      • 2014-10-23
      • 2017-04-25
      • 2020-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多