TypeError:类型为'WebElement'的对象在python中使用Selenium Webdriver循环搜索网页中的所有img标签时是否没有len错误?

问题描述

当前在python中使用硒,并在整个网页中通过“ img”标签定位元素后尝试进行循环。我试图将所有的url和img名称保存到我的2个数组中。

imgurl = []
imgname = []
allimgtags = browser.find_element_by_tag_name("img")

for a in len(allimgtags):
    imgurl.append(wholeimgtags.get_attribute("src"))
    imgname.append(wholeimgtags.get_attribute("alt"))

但是我在终端中收到此错误。如何将子网址和名称保存到2个数组中?

Traceback (most recent call last):
  File "scrpy_selenium.py",line 31,in <module>
    for a in len(wholeimgtags):
TypeError: object of type 'WebElement' has no len()

解决方法

您应该使用:

find_elements_by_tag_name(name)

(请注意复数)

这将返回一个元素列表,然后您可以循环抛出它们。

https://www.selenium.dev/selenium/docs/api/py/webdriver_remote/selenium.webdriver.remote.webdriver.html#selenium.webdriver.remote.webdriver.WebDriver.find_elements_by_tag_name

,

尝试获取所有img标签并遍历它们。

allimgtags  = driver.find_elements_by_tag_name("img")
for img in allimgtags:
    imgurl.append(img.get_attribute("src"))
    imgname.append(img.get_attribute("alt"))
,

此错误消息...

TypeError: object of type 'WebElement' has no len()

...表示您的程序中已在WebElement上调用了len()方法,其中len()方法用于获取给定 string ,数组列表元组字典等。


解决方案

要调用len()而不是find_element_by_tag_name(),则需要使用find_elements_by_tag_name(),它会返回一个 list 。因此,您的有效代码块将是:

imgurl = []
imgname = []
allimgtags = browser.find_elements_by_tag_name("img")
for imgtag in allimgtags:
    imgurl.append(imgtag.get_attribute("src"))
    imgname.append(imgtag.get_attribute("alt")) 

替代

作为打印 src alt 属性的替代方法,可以使用以下代码行:

  • src

    print([my_elem.get_attribute("src") for my_elem in browser.find_elements_by_tag_name("img")])
    
  • alt

    print([my_elem.get_attribute("alt") for my_elem in browser.find_elements_by_tag_name("img")])