Python 3.x 如何在selenium中处理延迟加载的图像? 标记为副本之前,请考虑我已经浏览过许多相关的堆栈溢出帖子,以及网站和文章。我还没有找到解决办法

Python 3.x 如何在selenium中处理延迟加载的图像? 标记为副本之前,请考虑我已经浏览过许多相关的堆栈溢出帖子,以及网站和文章。我还没有找到解决办法,python-3.x,selenium,web-scraping,webdriver,lazy-loading,Python 3.x,Selenium,Web Scraping,Webdriver,Lazy Loading,这个问题是这个问题的后续问题。通过更新代码以更优雅的方式工作,我确定问题实际上不是来自xpath方法: for item in feed: img_div = item.find_element_by_class_name('listing-cover-photo ') img = WebDriverWait(img_div, 10).until( EC.visibility_of_element_located((By.TAG_NAME, 'img'))

这个问题是这个问题的后续问题。通过更新代码以更优雅的方式工作,我确定问题实际上不是来自xpath方法:

for item in feed:
    img_div = item.find_element_by_class_name('listing-cover-photo ')
    img = WebDriverWait(img_div, 10).until(
            EC.visibility_of_element_located((By.TAG_NAME, 'img')))

这适用于前5ish元素。但在它超时之后,通过获取img_div的内部html并打印它,我发现对于超时的元素,不是我想要的图像,而是一个类为“lazyload placeholder”的div。这导致我删除了惰性加载的元素,但我找不到答案。正如您所看到的,我正在使用WebDriverWait尝试给它加载时间,但我也尝试了站点范围的等待调用,以及time.sleep调用。等待似乎无法解决问题。我正在寻找处理这些延迟加载图像的最简单方法,最好是在Selenium中,但是如果有其他库或产品可以与我已经拥有的Selenium代码一起使用,那就太好了。非常感谢您的帮助。

您的图像只有在滚动到视图中时才会加载。Selenium Python文档在它们的文档中都有这样一个常见的需求。通过调整,下面的脚本将在抓取图像之前向下滚动页面

driver.get(“https://www.grailed.com/categories/footwear")
滚动\暂停\时间=0.5
i=0
last\u height=driver.execute\u脚本(“return document.body.scrollHeight”)
尽管如此:
执行脚本(“window.scrollTo(0,document.body.scrollHeight);”)
时间。睡眠(滚动\u暂停\u时间)
new\u height=driver.execute\u脚本(“returndocument.body.scrollHeight”)
如果新高度==上次高度:
打破
最后高度=新高度
i+=1
如果i==5:
打破
驱动程序。隐式等待(10)
shoe_images=driver.find_元素(By.CSS_选择器'div.listing-cover-photo img')
打印(镜头(鞋子图片))
为了避免永远(似乎)滚动鞋子,我在5次迭代后添加了一个
break
,但是,您可以随意删除
I
变量,它将向下滚动尽可能长的时间

允许捕获仍在加载的任何剩余图像


一次测试产生了82张图片,我确认它已经用突出显示82的图片刮去了页面上的所有图片。根据允许加载的图像数量,您将看到不同的数字。

您的图像只有在滚动到视图中时才会加载。Selenium Python文档在它们的文档中都有这样一个常见的需求。通过调整,下面的脚本将在抓取图像之前向下滚动页面

driver.get(“https://www.grailed.com/categories/footwear")
滚动\暂停\时间=0.5
i=0
last\u height=driver.execute\u脚本(“return document.body.scrollHeight”)
尽管如此:
执行脚本(“window.scrollTo(0,document.body.scrollHeight);”)
时间。睡眠(滚动\u暂停\u时间)
new\u height=driver.execute\u脚本(“returndocument.body.scrollHeight”)
如果新高度==上次高度:
打破
最后高度=新高度
i+=1
如果i==5:
打破
驱动程序。隐式等待(10)
shoe_images=driver.find_元素(By.CSS_选择器'div.listing-cover-photo img')
打印(镜头(鞋子图片))
为了避免永远(似乎)滚动鞋子,我在5次迭代后添加了一个
break
,但是,您可以随意删除
I
变量,它将向下滚动尽可能长的时间

允许捕获仍在加载的任何剩余图像


一次测试产生了82张图片,我确认它已经用突出显示82的图片刮去了页面上的所有图片。根据您允许加载的图像数量,您将看到不同的数字。

@EricHasegawa出于好奇,您为什么不接受我的答案?@EricHasegawa出于好奇,您为什么不接受我的答案?