Selenium-几种等待方式

强制等待

  一直使用的time.sleep(5),可以放在任意地方,不好的地方,不太准确确定时间

隐形等待

  driver.implicitly_wait(5)

    设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截至,然后执行下一步.注意这里有一个弊端,那就是程序会一直等待整个页面加载完成,也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步

    但他还有一个问题,如果你页面加载挺好的,他会一闪而过,你也看不到具体的东西

    对整个driver的周期都起作用,所以只要设置一次即可,和sleep不同

显性等待

  WebDriverWait,配合该类的unitl()和until_not()方法,就能够根据判断条件而进行灵活的等待.

如何理解?

  每隔N秒检查下,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException异常

  语法如下:

    from selenium.webdriver.support.wait import WebDriverWait

    WebDriverWait(driver,超时时长,调用频率).until(可执行方法,超时的时候返回的信息)

    对上述部分的解释:

      drvier:  生成的driver是什么名字,就是什么

      超时时长:  超时时长

      调用频率:  调用unitl或until_not中的方法的间隔时间,默认是0.5秒

      until是当元素出现或什么条件成立则继续执行

      unitl_not是当元素消失或什么条件不成立则继续执行

      可执行的方法:  达到条件,执行的下一步

      超时的时候返回的信息:  超时返回的异常

#! /usr/bin/env python
#coding=utf-8

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
import time

driver = webdriver.Firefox()
#隐性等待
driver.implicitly_wait(5)
driver.get("https://www.baidu.com/")

#显性等待
#WebDriverWait(driver,10).until(lambda driver:driver.find_element_by_id("kw"),message = "元素加载超时").send_keys("博客园")

kw = WebDriverWait(driver,10).until(lambda driver:driver.find_element_by_id("kw"),message = "元素加载超时")
kw.send_keys("博客园")

time.sleep(3)
driver.quit()

调试的时候用 强制等待

等调通了,再改成隐形等待或者显性等待

posted @ 2017-09-03 22:09  R-Bear  阅读(404)  评论(0编辑  收藏  举报