【七】设置等待事件

  有时候为了保证脚本运行的稳定性,需要脚本中添加等待时间。

  •   sleep():设置固定休眠时间。python 的 time 包提供了休眠方法 sleep() ,导入 time包后就可以使用 sleep()进行脚本的执行过程进行休眠。
  •   implicitly_wait():是 webdirver 提供的一个超时等待。隐的等待一个元素被发现,或一个命令完成。如果超出了设置时间的则抛出异常。

implicitly_wait()方法比 sleep() 更加智能,后者只能选择一个固定的时间的等待,前者可以在一个时间

范围内智能的等待。

  •   WebDriverWait():同样也是 webdirver 提供的方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。

WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
driver - WebDriver 的驱动程序(Ie, Firefox, Chrome 或远程)
timeout - 最长超时时间,默认以秒为单位
poll_frequency - 休眠时间的间隔(步长)时间,默认为 0.5 秒
ignored_exceptions - 超时后的异常信息,默认情况下抛 NoSuchElementException 异常。

WebDriverWai()一般由 unit()或 until_not()方法配合使用,下面是 unit()和 until_not()方法的说明。
until(method, message=’’)
调用该方法提供的驱动程序作为一个参数,直到返回值不为 False。
until_not(method, message=’’)
调用该方法提供的驱动程序作为一个参数,直到返回值为 False。

 

# -*- coding:utf-8 -*-

import time

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait

driver = webdriver.Firefox()
driver.get("https://www.baidu.com/")

# WebDriverWait 每隔一段时间检测,超过一定时间(10s)检测不出则抛出异常
element = WebDriverWait(driver, 30).until(lambda driver: driver.find_element_by_id("kw"))
element.send_keys("gaga")

# sleep()   固定休眠时间
time.sleep(3)
driver.find_element_by_id("su").click()

# 智能等待时间,隐形等待一个元素或命令完成,超过时间则抛出异常
driver.implicitly_wait(3)
driver.find_element_by_id("kw").clear()
time.sleep(3)

driver.quit()

 

posted on 2020-09-19 21:11  别动我的锅  阅读(104)  评论(0)    收藏  举报

导航

levels of contents