1. 程式人生 > >關於selenium中的三種等待方式與EC模組的知識

關於selenium中的三種等待方式與EC模組的知識

1. 強制等待

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

看程式碼:

?
12345678# -*- coding: utf-8 -*-from selenium import webdriverfrom time import sleepdriver = webdriver.Firefox()sleep(3) # 強制等待3秒再執行下一步print driver.current_urldriver.quit()

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

2. 隱性等待

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

看程式碼:

?
1234567# -*- coding: utf-8 -*-from selenium import webdriverdriver = webdriver.Firefox()driver.implicitly_wait(30) # 隱性等待,最長等30秒print driver.current_urldriver.quit()

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

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

3. 顯性等待

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

先看個程式碼例項:

?
1234567891011121314# -*- coding: utf-8 -*-from selenium import webdriverfrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.common.by import Bydriver = webdriver.Firefox()driver.implicitly_wait(10) # 隱性等待和顯性等待可以同時用,但要注意:等待的最長時間取兩者之中的大者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,如果隱性等待時間 > 顯性等待時間,則該句程式碼的最長等待時間等於隱性等待時間。

我們主要用到了WebDriverWait類與expected_conditions模組,下面博主帶大家細看一下這兩個模組:

WebDriverWait

wait模組的WebDriverWait類是顯性等待類,先看下它有哪些引數與方法:

?
123456789101112selenium.webdriver.support.wait.WebDriverWait(類)__init__driver: 傳入WebDriver例項,即我們上例中的drivertimeout: 超時時間,等待的最長時間(同時要考慮隱性等待時間)poll_frequency: 呼叫until或until_not中的方法的間隔時間,預設是0.5ignored_exceptions: 忽略的異常,如果在呼叫until或until_not的過程中丟擲這個元組中的異常,則不中斷程式碼,繼續等待,如果丟擲的是這個元組外的異常,則中斷程式碼,丟擲異常。預設只有NoSuchElementException。untilmethod: 在等待期間,每隔一段時間呼叫這個傳入的方法,直到返回值不是Falsemessage: 如果超時,丟擲TimeoutException,將message傳入異常until_not 與until相反,until是當某元素出現或什麼條件成立則繼續執行,until_not是當某元素消失或什麼條件不成立則繼續執行,引數也相同,不再贅述。methodmessage

看了以上內容基本上很清楚了,呼叫方法如下:

?
1

相關推薦

關於selenium等待方式EC模組知識

1. 強制等待第一種也是最簡單粗暴的一種辦法就是強制等待sleep(xx),強制讓閃電俠等xx時間,不管凹凸曼能不能跟上速度,還是已經提前到了,都必須等xx時間。看程式碼:?12345678# -*- coding: utf-8 -*-from selenium import

python selenium等待方式解讀

如果網站採用了動態html技術,那麼頁面上的部分元素出現時間便不能確定,這個時候就可以設定一個等待時間,強制要求在時間內出現,否則報錯,那麼我可以用等待。 說到等待,又有三種等法,且聽博主一一道來: 1. 強制等待 第一種也是最簡單粗暴的一種辦法就是強制等待time.sleep(10)。 from selen

Python丨如果是動態網站可以採用selenium等待方式進行解讀

  如果網站採用了動態html技術,那麼頁面上的部分元素出現時間便不能確定,這個時候就可以設定一個等待時間,強制要求在時間內出現,否則報錯,那麼我可以用等待。 說到等待,又有三種等法,且聽小編 一 一道來: Python學習資料或者需要程式碼、視訊加Python學習群:9

python selenium等待方式解讀!

如果網站採用了動態html技術,那麼頁面上的部分元素出現時間便不能確定,這個時候就可以設定一個等待時間,強制要求在時間內出現,否則報錯,那麼我可以用等待。 說到等待,又有三種等法,且聽博主一一道來: 1. 強制等待 第一種也是最簡單粗暴的一種辦法就是強制等待 time.sleep(10)

selenium等待方式

 如今大多數的 web 應用程式使用 AJAX 技術。當瀏覽器在載入頁面時,頁面內的元素可能並不是同時被 加 載 完 成 的 , 這 給 元 素 的 定 位 添 加 的 困 難 。 如 果 因 為 在 加 載 某 個 元 素 時 延 遲 而 造 成ElementNotVisi

selenium webdriver 的等待方式

定位 .get wait expected blank sin down 默認 對象實例 1、顯式等待 一個顯式等待是你定義的一段代碼,用於等待某個條件發生然後再繼續執行後續代碼。 from selenium import webdriver from selenium

Python selenium 等待方式詳解

建議 方法 comm 決定性 是否 等待時間 python 弊端 style 1. 強制等待第一種也是最簡單粗暴的一種辦法就是強制等待sleep(xx),強制讓閃電俠等xx時間,不管凹凸曼能不能跟上速度,還是已經提前到了,都必須等xx時間。看代碼: # -*- codin

Selenium-等待方式

wrapper .get ui自動化 web開發 最長 chrome 一段 keys eve 在UI自動化測試中,必然會遇到環境不穩定,網絡慢的情況,這時如果不做任何處理的話,代碼會由於沒有找到元素而報錯。這時我們就要用到wait,而在Selenium中,我們可以用到一共三

Selenium常用的等待方式

Selenium Selenium等待 UI自動化 Selenium三種等待方式 等待 在做自動化測試,設計測試用例的時候,有時下一步的操作會依賴上一步的結果或者內容,上一步操作成功之後才能進行下一步操作等,這時候,我們就需要使用等待,來判斷上一步操作是否完成,什麽時候可以進行下一步操作。如果

Python selenium 等待方式解讀

sent 基本上 下一步 同時 drive pri 加載 CI tor 1. 強制等待 第一種也是最簡單粗暴的一種辦法就是強制等待sleep(xx),強制讓閃電俠等xx時間,不管凹凸曼能不能跟上速度,還是已經提前到了,都必須等xx時間。 看代碼: ? 1 2 3

Python selenium —— 一定要會用selenium等待等待方式解讀(轉)

我們 嚴重 -s ber 約定 fire locate ror nbsp 發現太多人不會用等待了,博主今天實在是忍不住要給大家講講等待的必要性。 很多人在群裏問,這個下拉框定位不到、那個彈出框定位不到…各種定位不到,其實大多數情況下就是兩種問題:1 有frame,2 沒有加

Python selenium —— 一定要會用selenium等待等待方式解讀

發現太多人不會用等待了,博主今天實在是忍不住要給大家講講等待的必要性。 很多人在群裡問,這個下拉框定位不到、那個彈出框定位不到…各種定位不到,其實大多數情況下就是兩種問題:1 有frame,2 沒有加等待。殊不知,你的程式碼執行速度是什麼量級的,而瀏覽器載入渲

Python selenium ---一定會用selenium等待等待方式解讀

很多人在群裡問,這個下拉框定位不到、那個彈出框定位不到…各種定位不到,其實大多數情況下就是兩種問題:1 有frame,2 沒有加等待。殊不知,你的程式碼執行速度是什麼量級的,而瀏覽器載入渲染速度又是什麼量級的,就好比閃電俠和凹凸曼約好去打怪獸,然後閃電俠打完回來之後問凹凸曼你

Python selenium 自動化測試,一定要會用selenium等待等待方式解讀

發現太多人不會用等待了,博主今天實在是忍不住要給大家講講等待的必要性。 很多人在群裡問,這個下拉框定位不到、那個彈出框定位不到…各種定位不到,其實大多數情況下就是兩種問題: 1 有frame,2 沒有加等待。 殊不知,你的程式碼執行速度是什麼量級的,而瀏覽器載入渲染速度

一定要會用selenium等待等待方式必會

轉載地址:http://blog.csdn.net/huilan_same/article/details/52544521,感謝博文,學習了原文:發現太多人不會用等待了,博主今天實在是忍不住要給大家講講等待的必要性。很多人在群裡問,這個下拉框定位不到、那個彈出框定位不到…各

Python selenium 等待方式詳解(必會)

很多人在群裡問,這個下拉框定位不到、那個彈出框定位不到…各種定位不到,其實大多數情況下就是兩種問題:1 有frame,2 沒有加等待。殊不知,你的程式碼執行速度是什麼量級的,而瀏覽器載入渲染速度又是什麼量級的,就好比閃電俠和凹凸曼約好去打怪獸,然後閃電俠打完回來之後問凹凸曼

selenium 等待方式

發現太多人不會用等待了,博主今天實在是忍不住要給大家講講等待的必要性。很多人在群裡問,這個下拉框定位不到、那個彈出框定位不到…各種定位不到,其實大多數情況下就是兩種問題:1 有frame,2 沒有加等待。殊不知,你的程式碼執行速度是什麼量級的,而瀏覽器載入渲染速度又是什麼量級的,就好比閃電俠和凹凸曼約好去打怪

webdriver 的等待方式

輪詢 common xxx implicit delay 定義 final load 超時時間 1、顯式等待 一個顯式等待是你定義的一段代碼,用於等待某個條件發生然後再繼續執行後續代碼。 from selenium import webdriverfrom seleniu

C++: 繼承和多型(一)繼承方式許可權

繼承 在C++中,我們常要對某個函式進行多次複用,例如: 資訊管理系統中,對於教師、學生、教務人員等"類"而言,有部分資訊是通用的:姓名,性別,年齡,聯絡方式等。如果為每一種角色都編寫一個"類",會有不少重複的程式碼,造成效率上的浪費。       &nbs

XML的解析方式JSON解析方式

XML的三種原生解析方式 DOM,SAX,PULL DOM:記憶體消耗大 但是便於遍歷.開啟文件,將其轉化為節點樹,然後在其用迴圈的方式,遍歷節點,一一查詢. SAX:速度快,戰記憶體少.但是檔案結構資訊會丟失,採用的是流的處理方式.從起始標籤開始一一