三种等待方式:强制等待、显式等待、隐式等待

三种等待方式:强制等待、显式等待、隐式等待,第1张

我们在使用selenium的时候,会遇到一种定位不到的情况,因为web页面有一个加载的过程 当页面元素未出现时,去定位肯定是定位不到的,所以我们需要用到了‘等待’,该如何使用等待呢,让我们一起来探讨一下吧!

time.sleep()强制等待

time模块,是python专门用来处理时间的内建库。
我们可以使用它时需要导入 import time
time.sleep(2) 意思是强制休眠2秒种的时间
这样等待的弊端是,我们已经定位到元素的时候,还会继续等待,导致我们工作效率很低 所以WebDriver提供了两种类型的等待:隐式等待和显式等待

implicitly_wait()隐式等待

该方法来实现隐式等待,默认参数的单位为秒,如里面的参数设置等待时长为10秒。
当脚本执行到某个元素定位时,如果元素可以定位,则继续执行;
如果元素定位不到,则它将以轮询的方式不断地判断元素是否被定位到。
假设在第6秒定位到了元素则继续执行,若直到超出设置时长(10秒)还没有定位到元素,则抛出异常。
该等待设置完是对整个全局起作用,所以只需设置一次即可,不需要导入任何模块,直接使用

WebDriverWait():显式等待

是针对于某个特定的元素设置的等待时间,在设置时间内,默认每隔0.5时间检测一次特定的元素是否存在,
如果在设置的时间内找到了元素,则直接执行。如果超过设置最长等待时间检测不到则抛出异常。
默认检测频率为0.5s,默认抛出异常为:NoSuchElementException。
该方法需要导入By 、WebDriverWait 、expected_conditions
下面的代码是对三种等待的具体例子:

 from selenium import webdriver
  from selenium.webdriver.common.by import By
  from selenium.webdriver.support.ui import WebDriverWait
  from selenium.webdriver.support import expected_conditions as EC
  import time
  driver=webdriver.Chrome() driver.implicitly_wait(5) #隐式等待
  driver.get('http://www.baidu.com')
  time.sleep(3) #强制等待
  driver.find_element_by_id('kw').send_keys('特朗普')
  #每隔0.5秒检查一次(默认就是0.5秒。也可以修改),最多等待10秒,直到找到ID="su"元素就执行,否则抛出异常 element=WebDriverWait(driver,10,0.5).until(EC.visibility_of_element_located((By.ID,'su'))) #显式等待
  element.click()
  time.sleep(2)
  driver.quit()

补充一点
presence_of_element_located 检查元素是否存在,但是并不一定可见。
visibility_of_element_located 检查元素存在,并且可见于页面,也就是能定位到它

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/943427.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-18
下一篇 2022-05-18

发表评论

登录后才能评论

评论列表(0条)

保存