場景
sleep():設置固定休眠時間。python 的time 包提供了休眠方法sleep() ,導入time 包后就可以使用sleep()進行腳本的執行過程進行休眠。
implicitly_wait():是webdirver 提供的一個超時等待。隱的等待一個元素被發現,或一個命令完成。如果超出了設置時間的則拋出異常。
WebDriverWait():同樣也是webdirver 提供的方法。在設置時間內,默認每隔一段時間檢測一次當前頁面元素是否存在,如果超過設置時間檢測不到則拋出異常。
代碼
#!/usr/bin/env python # -*- codinfg:utf-8 -*- ''' @author: Jeff LEE @file: 等待時間.py @time: 2018-09-21 15:55 @desc: ''' from selenium import webdriver #導入WebDriverWait from selenium.webdriver.support.ui import WebDriverWait import time driver = webdriver.Firefox() driver.get('https://www.baidu.com/') #WebDriverWait方法 element=WebDriverWait(driver,10).until(lambda driver:driver.find_element_by_id("kw")) element.send_keys("uniquefu") #添加智能等待 driver.implicitly_wait(10) driver.find_element_by_id("su").click() #添加固定等待時間 time.sleep(10) driver.quit()
優缺點
sleep():強制等待,不管你瀏覽器是否加載完了,程序都得等待3秒,3秒一到,繼續執行下面的代碼,作為調試很有用,有時候也可以在代碼里這樣等待,不過不建議總用這種等待方式,太死板,嚴重影響程序執行速度
implicitly_wait():隱形等待,比sleep()更加智能,隱形等待是設置了一個最長等待時間,如果在規定時間內網頁加載完成,則執行下一步,否則一直等到時間截止,然后執行下一步。注意這里有一個弊端,那就是程序會一直等待整個頁面加載完成,也就是一般情況下你看到瀏覽器標簽欄那個小圈不再轉,才會執行下一步,但有時候頁面想要的元素早就在加載完成了,但是因為個別js之類的東西特別慢,我仍得等到頁面全部完成才能執行下一步
WebDriverWait():顯示等待,配合該類的until()和until_not()方法,就能夠根據判斷條件而進行靈活地等待了。它主要的意思就是:程序每隔xx秒看一眼,如果條件成立了,則執行下一步,否則繼續等待,直到超過設置的最長時間,然后拋出TimeoutException
備注:
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
driver - WebDriver 的驅動程序(Ie, Firefox, Chrome 或遠程)
timeout - 最長超時時間,默認以秒為單位
poll_frequency - 休眠時間的間隔(步長)時間,默認為0.5 秒
ignored_exceptions - 超時后的異常信息,默認情況下拋NoSuchElementException 異常