问题描述
当前在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)
(请注意复数)
这将返回一个元素列表,然后您可以循环抛出它们。
,尝试获取所有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")])