如何仅等待DOM加载(不包含图片)使用Selenium
页面上有一长串图片。在这个应用里,有一个“加载更多图片”的按钮(在页面底部),当用户向下滚动页面时,这个按钮会自动激活。 我想用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”这个元素(虽然我不太确定这个循环是否真的需要)。 问题是,它成功地把页面滚动下去,但之后却卡在了浏览器的find_element_by_id("show_more")上,直到页面完全加载(包括所有图片),这需要很长时间。所以DOM(文档对象模型)是存在的,但因为图片太多,加载全部图片大约需要几分钟。 我不敢100%确定这是不是因为页面没有完全加载,但看起来很可能是这样(所以它进入了循环的第一次迭代,然后在find_element_by_id上停留了几分钟,之后才继续并成功完成)。 我的问题是,是否可以指示find*方法不要等到所有图片都下载完成,这样测试就不会花几分钟才能通过?
设置browser.implicitly_wait(1)
(这似乎与此相关)似乎没有什么帮助。
1 个回答
1
你可以等浏览器或文档的状态变为“可交互”。也就是说,你要等到某个JavaScript条件满足。
document.readyState='interactive'