我的脚本存在此问题:TypeError:“ FirefoxWebElement”对象不可迭代

时间:2018-11-25 14:06:11

标签: python selenium object iterable

我在执行此脚本时遇到问题:

pic_hrefs = [elem.get_attribute('a href') for elem in hrefs]

Traceback (most recent call last):
  File "IB.py", line 56, in <module>
    kidCudix.like_photo('comfort')
  File "IB.py", line 41, in like_photo
    pic_hrefs = [elem.get_attribute('a href') for elem in hrefs]
TypeError: 'FirefoxWebElement' object is not iterable

1 个答案:

答案 0 :(得分:0)

首先,elem.get_attribute('a href')是有问题的,因为'a href'不是有效的属性。相反,您想使用elem.get_attribute('href')

但是,这不是您遇到的错误。

错误消息(TypeError: 'FirefoxWebElement' object is not iterable)表示您的输入可迭代(hrefs)的类型为FirefoxWebElement,由于单个{{ 1}}是不可迭代的。您需要在列表理解中使用元素的 list 而不是单个元素。 (列表推导从另一个可迭代的输入创建列表)。您的理解应该类似于:

FirefoxWebElement

示例:

问题很模糊,但是您可能试图在网页上创建链接列表。要获取所有链接的列表,通常的模式是:

  • 创建一个网络驱动程序
  • 导航到页面
  • 找到代表锚标签的所有元素
  • 从每个元素中提取hrefs = [elem.get_attribute('href') for elem in elements] 属性,并将它们存储在列表中

您可以使用以下代码来做到这一点:

href

请注意,from selenium import webdriver driver = webdriver.Firefox() driver.get('https://some_url') elements = driver.find_elements_by_tag_name('a') hrefs = [elem.get_attribute('href') for elem in elements] 返回了find_elements_by_tag_name('a') list ,我将在随后的列表理解中使用它。另请注意,所使用的方法是WebElement(复数)。这与find_elements_by_tag_name(单数)不同,后者只能定位单个元素。