gpt4 book ai didi

python-3.x - 如何处理 Selenium 中的延迟加载图像?

转载 作者:行者123 更新时间:2023-12-01 23:57:05 27 4
gpt4 key购买 nike

在标记为重复之前,请考虑我已经浏览了许多相关的堆栈溢出帖子以及网站和文章。我还没有找到解决方案。

这个问题是对这个问题的跟进 Selenium Webdriver not finding XPATH despite seemingly identical strings .通过更新代码以更优雅的方式工作,我确定问题实际上并非来自 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')))

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

最佳答案

您的图片只有在滚动到 View 中时才会加载。这是 Selenium Python 文档在其 FAQ 中的常见要求。 .改编自 this answer ,下面的脚本将在抓取图像之前向下滚动页面。

    driver.get("https://www.grailed.com/categories/footwear")

SCROLL_PAUSE_TIME = 0.5
i = 0
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(SCROLL_PAUSE_TIME)
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
break
last_height = new_height
i += 1
if i == 5:
break

driver.implicitly_wait(10)
shoe_images = driver.find_elements(By.CSS_SELECTOR, 'div.listing-cover-photo img')

print(len(shoe_images))

为了不(看似)永远滚动鞋子,我在 5 次迭代后添加了一个 break,但是,您可以随意删除 i变量,它将尽可能向下滚动。

implicit wait是否允许追赶仍在加载的任何剩余图像。

测试运行产生了 82 张图像,我确认它已经通过使用 Chrome's DevTools selector 抓取了页面上的所有图像突出显示 82。根据允许加载的图像数量,您会看到不同的数字。

关于python-3.x - 如何处理 Selenium 中的延迟加载图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62600288/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com