python selenium web自动化的三种等待的区别
1.强制等待。 不常用
sleep(秒)
2.隐性等待。 不常用。
适用条件是查找元素和等待命令的执行完成。
implicitly_wait(秒)
如果单位是 30 秒,不会傻等 30 秒,如果你在 30 秒内找到了一个元素,比如第 15 秒找到了,那么后面 15 秒就不再等了,在找到的时候就马上去执行下一步,所以是种智能等待方式。
只要在这个时间上限之内,这个元素出现了,什么时候出现就什么时候不再等待。如果超过 30 秒还没有出现,就会抛出异常“TimeoutExceiption”,提示等待超时了,元素至今还没有出现。但是它是整个会话周期有效的。
3.必须掌握"显性等待"
WebDriverWait(driver,等待时长,轮循周期).until()/until_not()
明确提出到底要等什么,这个就叫做显性,非常明显的条件。
明确等到某个条件满足后,再去执行下一步。
第一部分是等待,第二部分是条件。
等待:
由两个东西来完成,第一个是WebDriverWait
类,它是个显性等待类,这个类中处理的事有什么呢?
WebDriverWait
类初始化的条件:
driver
:第一个是会话对象,就是说它要知道在哪个会话基础上去等待什么样的条件完成,知道是在哪个页面。
等待时长:也就是最多等多少秒,例如等 20 秒,20 秒以内,啥时候出现都不成问题。
轮循周期:是多久去看一次,比如轮循周期是 1 秒钟,就是每一秒去看下这个条件是否成立。
如果它每隔多少秒去看了下,最终在你等待的时限之内,还没有找到一样的,会报TimeoutException
。
条件:
until()
until
是直到某某某条件成立,条件写在()
里面的。
直到什么条件成立,等到这个条件成立,until_not()
就是等到这个条件不成立,直到找不到某个元素为止,直到页面没有哪个元素。