詳解Python中如何添加Selenium WebDriver等待
本文將介紹在Python中在Selenium Web驅(qū)動(dòng)程序中添加等待的示例。
Python Selenium Web 驅(qū)動(dòng)程序等待
大多數(shù) Web 應(yīng)用程序都使用 AJAX 技術(shù)。 因此,網(wǎng)頁上存在的不同元素需要不同的時(shí)間間隔才能完全上傳,因?yàn)槲诰W(wǎng)頁上存在之前無法找到任何文本。
我們可能會(huì)發(fā)現(xiàn)某些應(yīng)用程序的網(wǎng)頁在上傳之前并不存在特定文本。 這會(huì)在測(cè)試應(yīng)用程序時(shí)產(chǎn)生錯(cuò)誤。
這個(gè)問題可以通過等待來解決。 這些等待在網(wǎng)頁上搜索元素或任何其他操作時(shí)提供了靈活性。
Selenium Web 驅(qū)動(dòng)程序提供兩種類型的等待。 第一個(gè)是隱式等待,第二個(gè)是顯式等待。
本文討論了這兩種等待類型的詳細(xì)信息。
Selenium Web 驅(qū)動(dòng)程序中的隱式等待
由于網(wǎng)速慢或網(wǎng)站響應(yīng)慢,有時(shí)我們需要等待幾秒鐘才能獲得所有結(jié)果。 對(duì)于這種情況,隱式等待效果最好。
隱式等待告訴 Web 驅(qū)動(dòng)程序在特定時(shí)間輪詢 DOM,同時(shí)查找元素,以便在我們的 Web 驅(qū)動(dòng)程序獲取元素時(shí)使所有元素可用。 該進(jìn)程的默認(rèn)設(shè)置為 0。
一旦我們?cè)O(shè)置了隱式等待,它將持續(xù)到 Web 驅(qū)動(dòng)程序?qū)ο蟮纳芷凇?/p>
只要我們運(yùn)行相同的網(wǎng)絡(luò)驅(qū)動(dòng)程序而不關(guān)閉或重新啟動(dòng)并更改等待值,它就會(huì)是相同的量。
讓我們來看一個(gè)示例,我們將訪問一個(gè)網(wǎng)站并等待 10 秒鐘,然后單擊“關(guān)于我們”頁面鏈接,如下所示。
示例代碼:
# python from selenium import webdriver ChromeDriver = webdriver.Chrome() ChromeDriver.implicitly_wait(10) ChromeDriver.get("https://www.inventicosolutions.com/") getElemByLink = ChromeDriver.find_element_by_link_text("About Us") getElemByLink.click()
輸出:
從上面的示例中可以看到,加載頁面后,它等待了整整 10 秒,然后才轉(zhuǎn)到“關(guān)于我們”頁面。
Selenium Web 驅(qū)動(dòng)程序中的顯式等待
顯式等待是一種定義為等待特定條件發(fā)生并在代碼中進(jìn)一步處理的代碼類型。 顯式等待的極端情況是 time.sleep()。
這將等待的條件設(shè)置為精確的時(shí)間段。
一些適當(dāng)?shù)姆椒梢詭椭覀兙帉戯@式的代碼。 顯式等待是使用 Web 驅(qū)動(dòng)程序等待類并與 Expected_conditions 相結(jié)合來實(shí)現(xiàn)的。
如下所示,讓我們看一個(gè)示例,其中我們將使用顯式等待而不是隱式等待。
示例代碼:
# python from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as ExpectedCond chromeDriver = webdriver.Chrome() chromeDriver.get("https://inventicosolutions.com") getElembyLinkText = WebDriverWait(chromeDriver, 10).until(ExpectedCond.presence_of_element_located((By.LINK_TEXT, "About Us"))) getElembyLinkText.click()
輸出:
上述代碼的超時(shí)值為 10 秒。 Web 驅(qū)動(dòng)程序?qū)⒌却?10 秒,然后拋出超時(shí)異常。
應(yīng)用程序的網(wǎng)頁地址(URL)和文本元素可以根據(jù)要求用給定的代碼編寫。
Web 驅(qū)動(dòng)程序等待(顯式等待中使用的工具之一)具有這種內(nèi)置質(zhì)量,每 500 毫秒檢查一次預(yù)期條件,直到成功找到文本。
Python 中等待的預(yù)期條件
這些條件在自動(dòng)化 Web 瀏覽器時(shí)最常用,并且在 Web 驅(qū)動(dòng)程序中預(yù)定義。 這些條件包括:
- title_is
- title_contains
- presence_of_element_located
- visibility_of_element_located
- visibility_of
- presence_of_all_elements_located
- text_to_be_present_in_element
- text_to_be_present_in_element_value
- frame_to_be_available_and_switch_to_it
- invisibility_of_element_located
- element_to_be_clickable
- staleness_of
- element_to_be_selected
- element_located_to_be_selected
- element_selection_state_to_be
- element_located_selection_state_to_be
- alert_is_present
我們可以通過導(dǎo)入以下庫將這些預(yù)期條件包含在我們的代碼中。
# python from selenium.webdriver.support import expected_conditions as ExpectedCond
Python 中的自定義等待條件
當(dāng)上述方法均不能滿足用戶的要求時(shí),可以創(chuàng)建自定義等待條件。 自定義條件是使用帶有 call() 方法的類創(chuàng)建的。
如下所示,讓我們看一個(gè)示例,在該示例中我們將創(chuàng)建一個(gè)自定義條件并嘗試讓我們的程序等待幾秒鐘。
示例代碼:
# python class ElementWithClass(object): def __init__(self, location, className): self.location = location self.className = className def __call__(self, ChromeDriver): findElem = ChromeDriver.find_element(*self.location) if self.className in findElem.get_attribute("class"): return findElem else: return False wait = WebDriverWait(ChromeDriver, 10) findElem = wait.until(element_has_css_class((By.ID, 'myId'), "myClass"))
如果找到該元素,此代碼將為用戶提供 true,否則返回 false。
因此,我們通過一些示例討論了在 Python 中添加等待的不同方法。 我們希望您喜歡這個(gè)主題并從中學(xué)到一些東西。
到此這篇關(guān)于詳解Python中如何添加Selenium WebDriver等待的文章就介紹到這了,更多相關(guān)python添加Selenium Web等待內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Python簡(jiǎn)單的實(shí)現(xiàn)樹莓派的WEB控制
這篇文章主要介紹了使用Python簡(jiǎn)單的實(shí)現(xiàn)樹莓派的WEB控制的相關(guān)資料,需要的朋友可以參考下2016-02-02在Linux命令行中運(yùn)行Python腳本的流程步驟
Python是一種高級(jí)編程語言,被廣泛應(yīng)用于數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)、Web 開發(fā)等領(lǐng)域,在Linux操作系統(tǒng)中,Python是一個(gè)默認(rèn)安裝的解釋器,用戶可以通過命令行界面(CLI)來運(yùn)行Python腳本,在本文中,我們將詳細(xì)介紹如何在Linux命令行中運(yùn)行Python腳本,需要的朋友可以參考下2023-11-11Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)實(shí)現(xiàn)查找兩個(gè)字典相同點(diǎn)的方法
這篇文章主要介紹了Python實(shí)現(xiàn)查找兩個(gè)字典相同點(diǎn)的方法,涉及Python常見集合運(yùn)算操作技巧,需要的朋友可以參考下2018-02-02解決pyinstaller打包exe可執(zhí)行文件后運(yùn)行找不到pandas或者XXX模塊
這篇文章主要介紹了解決pyinstaller打包exe可執(zhí)行文件后運(yùn)行找不到pandas或者XXX模塊問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11pycharm上的python虛擬環(huán)境移到離線機(jī)器上的方法步驟
本人在工作中需要在離線Windows環(huán)境中使用,本文主要介紹了pycharm上的python虛擬環(huán)境移到離線機(jī)器上的方法步驟,具有一定的參考價(jià)值,感興趣的可以了解一下2021-10-10python tkinter制作用戶登錄界面的簡(jiǎn)單實(shí)現(xiàn)
這篇文章主要介紹了python tkinter制作用戶登錄界面的簡(jiǎn)單實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Python+opencc庫實(shí)現(xiàn)簡(jiǎn)體繁體字轉(zhuǎn)換
opencc就是一個(gè)非常好的中文字轉(zhuǎn)換庫,其中包含了非常豐富的對(duì)應(yīng)字詞表,本文主要介紹了如何使用opencc庫實(shí)現(xiàn)簡(jiǎn)體繁體字轉(zhuǎn)換,感興趣的可以了解下2024-11-11