Python+Selenium學習--設置等待時間


場景

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 異常

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM