HTML加载需要时间,影响HTML加载的因素:
。服务器性能
。网络速度
。本身电脑的配置
1.隐式等待
概念:首先要等待整个页面加载完成,再去进行元素定位。如果在定位过程中找到了元素,直接返回该元素,继续后面的操作。如果在指定的时间内没有找到该元素,那么每隔0.5秒再去找,如果超过了指定时间,就会抛出异常错误:NoSuchElementException
实现方式:driver.implicitly_wait(timeout) #timeout表示的是最长的等待时间(也叫超时时间)
# 设置隐式等待时间5秒
driver.implicitly_wait(5)
注意:隐式等待只需要设置一次,对所有的元素定位方法都是有效的
2.显示等待
概念:定位指定元素,如果能找到该元素,那么就直接返回该元素,如果找不到,那么每隔指定的时间再去定位该元素,如果超出最长等待时间,那么就抛出TimeOutException
实现方式:
WebDriverWait(driver,timeout,poll_frequency=0.5).until(lambda x:x.find_element_by_id("userA"))
WebDriverWait等待类需要导入
driver指的是浏览器驱动对象
timeout表示的是最长等待时间
poll_ frequency表示的是检测的时间间隔,默认是0.5秒
后面跟上until方法,在until方法跟上匿名函数来实现显示等待
# 通过显示等待的方式定位延时输入框输入admin
element = WebDriverWait(driver, 9, 1).until(lambda x: x.find_element_by_xpath("//*[@id='wait']/input[1]"))
element.send_keys("admin")
显示等待和隐式等待的区别:
1.抛出的异常不一样,隐式等待超时,报的NosuchelementException,显示等待超时,报的是TimeOutException
2.作用域不一样,隐式等待对所有元素定位的方法都有效,只需要定义一次,显示等待只针对单个元素
3.显式等待不需要等待整个页面的DOM树加载完成显示的效率更高,工作中一般使用显示等待,而隐式等待需要整个HTML DOM树加载完成
3.强制等待
.强制等待就是让代码休眠,不做任何的操作
实现方法:time.sleep(time) 单位:秒
# 等待3秒
time.sleep(3)
.常用的场景:
。当要获取元素的文本内容时,而元素的文本内容时需要通过后台接口请求并渲染的,此时,如果使用隐式等待或者显示等待是没有办法获取到文本内容的,所以需要使用强制等待
。当要操作的元素已经存在,但是有其他的元素需要等待且与该操作的元素有业务关联,如果使用隐式等待或者显示等待对该元素进行操作的话,是没有办法进行的,也是需要使用强制等待