zoukankan      html  css  js  c++  java
  • 三种等待方式:强制等待、显式等待、隐式等待

    
    

      我们在使用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              检查元素存在,并且可见于页面,也就是能定位到它

    
    
  • 相关阅读:
    mongodb学习
    蜗牛慢慢爬 LeetCode 16. 3Sum Closest [Difficulty: Medium]
    第0次个人作业
    蜗牛慢慢爬 LeetCode 22. Generate Parentheses [Difficulty: Medium]
    蜗牛慢慢爬 LeetCode 10. Regular Expression Matching [Difficulty: Hard]
    蜗牛慢慢爬 LeetCode 20. Valid Parentheses [Difficulty: Easy]
    蜗牛慢慢爬 LeetCode 19. Remove Nth Node From End of List [Difficulty: Medium]
    蜗牛慢慢爬 LeetCode 11. Container With Most Water [Difficulty: Medium]
    蜗牛慢慢爬 LeetCode 9. Palindrome Number [Difficulty: Easy]
    蜗牛慢慢爬 LeetCode 7. Reverse Integer [Difficulty: Easy]
  • 原文地址:https://www.cnblogs.com/king2/p/13589457.html
Copyright © 2011-2022 走看看