页面上有一长串图片。应用程序中有一个 AJAX“加载更多图像”按钮(位于页面底部),当用户向下滚动页面时该按钮会自动激活。 我想用 Selenium 将页面滚动到最后,并确保页面底部没有“加载更多图像”按钮。 脚本(可能有更优雅的解决方案,但这不是重点)
browser.execute_script("""
setInterval(function() {
window.scrollBy(0,50000);
}, 1000);
;""")
invisibleShowMoreCounter = 0;
while True:
if "" == browser.find_element_by_id("show_more").text:
invisibleShowMoreCounter = invisibleShowMoreCounter + 1
if (invisibleShowMoreCounter > 3): break
time.sleep(1)
它将页面滚动到底部,然后在 3 秒内检查是否没有“show_more”元素(虽然不确定是否需要这个循环)。 所以问题是它成功地向下滚动了页面,但在此之后,它停留在 browser.find_element_by_id("show_more") 直到页面完全加载(包括图像),这需要很多时间。所以 DOM 在那里,但是因为有很多图像,所以加载所有图像大约需要几分钟。 我不是 100% 确定这是因为页面没有完全加载但它看起来很有可能(所以它进入循环的第一次迭代然后只在 find_element_by_id 上停留几分钟然后继续并成功完成。 问题是是否可以命令 find* 方法不等待所有图像完成下载,这样测试就不会花几分钟就可以通过?
设置 browser.implicitly_wait(1)
(这似乎与此相关)似乎没有帮助。
最佳答案
您可以等待浏览器/文档状态变为交互状态。也就是等待js条件
document.readyState='interactive'
关于python - 如何只等待 DOM 加载 Selenium(无图像),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7881189/