现在越来越多的 web 应用使用 Ajax 技术。当一个页面加载到浏览器后,这个页面的很多元素加载的时间可能不一致,这就使得元素定位比较尴尬了。如果某个要定位的元素还没有加载出来,在定位的时候,就会抛出异常: NoSuchElementException,前面慕课网登录的实例就有这问题。这个时候,合理使用 wait ,我们就能很好的缓解这个尴尬。
一种我们可以使用Python time模块自带的sleep()方法进行强制等待,这里就不过多介绍了。此外,Selenium Webdriver 提供了两种类型的等待方法:隐式等待implicitly_wait() 和 显式等待WebDriverWait()。
隐式等待方法——implicitly_wait(),是webdirver 提供的一种超时等待,隐式地等待找到一个元素或完成一个命令,如果超出了设置时间则抛出异常。隐式等待对整个driver的生命周期都起作用,所以只要设置一次即可。千万别把隐式等待当成了sleep来用,走哪儿都来一下…
慕课网登录实例代码:
from selenium import webdriver
driver = webdriver.Firefox()
# 因为隐式等待设置是全局的,所以在这儿设置一次就行了
driver.implicitly_wait(5)
driver.get('https://www
在处理Ajax加载的网页时,Selenium的隐式等待可以帮助解决元素定位问题。implicitly_wait()设置一个最大等待时间,如果在此时间内元素加载完成则继续执行,否则超时后继续。它对整个driver生命周期有效,不同于sleep方法。隐式等待可能导致程序等待整个页面加载完成,而不仅仅是所需元素。显式等待WebDriverWait将在后续章节中详细讲解。
订阅专栏 解锁全文
1万+

被折叠的 条评论
为什么被折叠?



