Python selenium 三種等待方式詳解

2022-09-11 10:21:20 字數 2298 閱讀 3227

1. 強制等待

第一種也是最簡單粗暴的一種辦法就是強制等待sleep(xx),強制讓閃電俠等xx時間,不管凹凸曼能不能跟上速度,還是已經提前到了,都必須等xx時間。

看**:

#

-*- coding: utf-8 -*-

from selenium import

webdriver

from time import

sleep

driver =webdriver.firefox()

driver.get(

'')sleep(3) #

強制等待3秒再執行下一步

print

driver.current_url

driver.quit()

這種叫強制等待,不管你瀏覽器是否載入完了,程式都得等待3秒,3秒一到,繼續執行下面的**,作為除錯很有用,有時候也可以在**裡這樣等待,不過不建議總用這種等待方式,太死板,嚴重影響程式執行速度。

2. 隱性等待

第二種辦法叫隱性等待,implicitly_wait(xx),隱性等待的意義是:閃電俠和凹凸曼約定好,不論閃電俠去哪兒,都要等凹凸曼xx秒,如果凹凸曼在這段時間內來了,則倆人立即出發去打怪獸,如果凹凸曼在規定時間內沒到,則閃電俠自己去,那自然就等著凹凸曼給你拋異常吧。

看**:

#

-*- coding: utf-8 -*-

from selenium import

webdriver

driver =webdriver.firefox()

driver.implicitly_wait(30) #

隱性等待,最長等30秒

driver.get('

')print

driver.current_url

driver.quit()

**等待是設定了乙個最長等待時間,如果在規定時間內網頁載入完成,則執行下一步,否則一直等到時間截止,然後執行下一步。注意這裡有乙個弊端,那就是程式會一直等待整個頁面載入完成,也就是一般情況下你看到瀏覽器標籤欄那個小圈不再轉,才會執行下一步,但有時候頁面想要的元素早就在載入完成了,但是因為個別js之類的東西特別慢,我仍得等到頁面全部完成才能執行下一步,我想等我要的元素出來之後就下一步怎麼辦?有辦法,這就要看selenium提供的另一種等待方式——顯性等待wait了。

需要特別說明的是:隱性等待對整個driver的週期都起作用,所以只要設定一次即可,我曾看到有人把隱性等待當成了sleep在用,走哪兒都來一下…

3. 顯性等待

第三種辦法就是顯性等待,webdriverwait,配合該類的until()和until_not()方法,就能夠根據判斷條件而進行靈活地等待了。它主要的意思就是:程式每隔xx秒看一眼,如果條件成立了,則執行下一步,否則繼續等待,直到超過設定的最長時間,然後丟擲timeoutexception。

先看個**例項:

#

-*- coding: utf-8 -*-

from selenium import

webdriver

from selenium.webdriver.support.wait import

webdriverwait

from selenium.webdriver.support import

expected_conditions as ec

from selenium.webdriver.common.by import

bydriver =webdriver.firefox()

driver.implicitly_wait(10) #

隱性等待和顯性等待可以同時用,但要注意:等待的最長時間取兩者之中的大者

driver.get('

')locator = (by.link_text, '

csdn')

try:

webdriverwait(driver, 20, 0.5).until(ec.presence_of_element_located(locator))

print driver.find_element_by_link_text('

csdn

').get_attribute('

href')

finally

:driver.close()

上例中,我們設定了隱性等待和顯性等待,在其他操作中,隱性等待起決定性作用,在webdriverwait..中顯性等待起主要作用,但要注意的是:最長的等待時間取決於兩者之間的大者,此例中為20,如果隱性等待時間 > 顯性等待時間,則該句**的最長等待時間等於隱性等待時間。

Python selenium 三種等待方式解讀

原文 1.有frame 2.沒有加等待時間 為什麼要加等待時間了,是因為 執行速度與瀏覽器載入速度不一樣,導致 執行完了瀏覽器還沒有載入完,出現異常情況。下面講解selenium的三種等待方式 1.強制等待,是最簡單粗暴的方法slepp xx 不管你瀏覽器是否載入完了,程式都得等待xx秒,xx秒一到...

Python selenium 三種等待方式

1.強制等待 time.sleep 2.顯式等待 from selenium.webdriver.support import expected conditions as ec from selenium.webdriver.support.ui import webdriverwait from...

Python selenium 三種等待元素方式

這種叫強制等待,不管你瀏覽器是否載入完了,程式都得等待,時間讀完繼續執行下面的 太死板,嚴重影響程式執行速度。from selenium import webdriver from time import sleep driver webdriver.firefox driver.get sleep...