selenium的webdriver三种等待方式 (显式等待、隐式等待 、sleep 强制等待)

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
def pageInteraction():
    driver = webdriver.Chrome()
    driver.get('http://www.baidu.com')
    # 隐示等待,为了等待充分加载好网址
    driver.implicitly_wait(5)  #  隐示等待
    write = driver.find_element_by_id("kw")
    write.send_keys("Selenium")
    # 点击
    driver.find_element_by_id('su').click()
    try:
        # 显示等待,其中5的解释:5秒内每隔0.5毫秒扫描1次页面变化,直到指定的元素
        wait = WebDriverWait(driver,5)
        wait.until(lambda driver:driver.find_element_by_id("content_left"))
        # 打印源代码
        # print(driver.page_source)
    except Exception as e:
        print("查询元素超时", e)
    finally:
        import time
        time.sleep(10)
        driver.close()
pageInteraction()

1、显式等待 

 

显示等待:
显示等待是表明某个条件成立才执行获取元素的才做、也可以等待的时候指定一个最大的时间,

如果超过这个时间那么就会抛出一个异常(exceptions.TimeoutException)。

显示等待是应该使用 selenium.webdriver.support.excepted_conditions期望的条件和

selenium.webdriver.support.ui.webDriverWait 来配合完成。

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait  # 显示等待
# 设置等待执行语句
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
 
driver = webdriver.Chrome()
# driver.implicitly_wait(10)  # 隐式等待
driver.get(r'http:\\www.douban.com')
 
try:
    element = WebDriverWait(driver, 10).until(
        # 位于...位置存在某个元素
        # EC.presence_of_element_located((By.ID, 'form_email'))  # 必须是元组
        EC.text_to_be_present_in_element(
            (By.XPATH, '//div[@class="main"]/div[@class="mod"]/h2[1]'),
            '热点内容  • • • • • •  ( 更多 )')
    )
    # element.send_keys('python')
    print(element)
finally:
    driver.quit()

 

一个显式等待是你定义的一段代码,用于等待某个条件发生然后再继续执行后续代码。

显式等待是等元素加载!!!

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait          # available since 2.4.0
from selenium.webdriver.support import expected_conditions as EC # available since 2.26.0
driver = webdriver.Firefox()
driver.get("http://somedomain/url_that_delays_loading")
try:
    element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "myDynamicElement")))
finally:
    driver.quit()

2、隐式等待

相当于设置全局的等待,在定位元素时,对所有元素设置超时时间。

式等待是等页面加载,而不是元素加载!!!(隐式等待就是针对页面的,显等待是针对元素的)

隐式等待使得WebDriver在查找一个Element或者Element数组时,每隔一段特定的时间就会轮询一次DOM,
如果Element或数组没有马上被发现的话。
默认设置是0。
一旦设置,这个隐式等待会在WebDriver对象实例的整个生命周期起作用。

 

from selenium import webdriver
driver = webdriver.Firefox()
driver.implicitly_wait(10)                      # seconds
driver.get(http://www.xxx.com)
myDynamicElement = driver.find_element_by_id("ElementID")

 

3、强制等待

import time
time.sleep(10)

还不懂?举个简单例子:

你男朋友约你去电影院看电影的时候,在楼下等你:
隐式等待:就是等你化好妆,三十分钟内能下楼就行,但是一定是先化好妆才能下来
显式等待:就不一样了。你男朋友隔五分钟打一次电话,问你好了没?然后说你先下来吧,到我车上化妆,然后人先下去,再车上继续化妆打扮,到电影院时候化妆完成。
你说哪个省时间?
当然是显式等待!!!你就是那个元素,化妆打扮是页面上其它元素。


原文:https://blog.csdn.net/cyjs1988/article/details/76033180 

 

 

 

你可能感兴趣的:(selenium,python,selenium,显示等待,隐示等待)