属性错误:"list"对象没有属性"find_element"-Selenium驱动程序

1tu0hz3e  于 2023-01-30  发布在  其他
关注(0)|答案(2)|浏览(116)

我正在重写这个使用旧版本Selenium的旧pyton脚本(https://github.com/muvvasandeep/BuGL/blob/master/Scripts/DataExtraction.py)。这个脚本的目的是从github的开源项目中提取开放和关闭的问题。我对python和Selenium都是新手。我很难重写它里面的一些东西。目前我正在努力让它工作:

repo_closed_url = [link.get_attribute('href') for link in driver.find_elements(By.XPATH,'//div[@aria-label="Issues"]').find_element(By.CLASS_NAME,'h4')]

上面的代码应该从github页面获取所有已关闭的问题链接,并将其存储在repo_closed_url数组中。但是我得到了AttributeError:“list”对象没有属性“find_element”错误。请帮助。

pw136qt2

pw136qt21#

我不确定这条代码行是否有效。
它使用driver.find_elements(By.XPATH,'//div[@aria-label="Issues"]')方法,然后尝试将find_element(By.CLASS_NAME,'h4')应用于之前方法的输出。
但是driver.find_elements(By.XPATH,'//div[@aria-label="Issues"]')返回一个web元素对象的列表,而find_element(By.CLASS_NAME,'h4')只能应用于webdriverwebelement对象,不能应用于对象列表。
该代码可以按照dm2所述进行重构

repo_closed_url = [link.find_element(By.CLASS_NAME,'h4').get_attribute('href') for link in driver.find_elements(By.XPATH,'//div[@aria-label="Issues"]')]

在本例中,driver.find_elements(By.XPATH,'//div[@aria-label="Issues"]')输出是web元素对象的列表,您使用for link in (output of)(driver.find_elements(By.XPATH,'//div[@aria-label="Issues"]'))对此列表执行内联迭代,然后将.find_element(By.CLASS_NAME,'h4').get_attribute('href')应用于先前接收到的链接列表中的每个link元素

eeq64g8w

eeq64g8w2#

find_elements返回一个列表,而列表没有方法find_element(根据错误消息)。
您可以将find_element方法移动到link

repo_closed_url = [link.find_element(By.CLASS_NAME,'h4').get_attribute('href') for link in driver.find_elements(By.XPATH,'//div[@aria-label="Issues"]')]

这看起来更像是您要做的事情,不是迭代单个元素,而是迭代find_elements方法中的元素列表。

相关问题