Selenium筆記(6)等待

本文集鏈接:http://www.reibang.com/nb/25338984

1. 簡介

在selenium操作瀏覽器的過程中,每一次請求url想鹰,selenium都會(huì)等待頁面加載完畢以后胎围,才會(huì)將操作權(quán)限再次交給我們的程序吁系。

但是,由于ajax和各種JS代碼的異步加載問題白魂,所以我們在使用selenium的時(shí)候常常會(huì)遇到操作的元素還沒有加載出來汽纤,就會(huì)引發(fā)報(bào)錯(cuò)。為了解決這個(gè)問題碧聪,Selenium提供了幾種等待的方法冒版,讓我們可以等待元素加載完畢后,再進(jìn)行操作逞姿。


2. 顯式等待

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("http://somedomain/url_that_delays_loading")
try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "myDynamicElement"))
    )
finally:
    driver.quit()

在這個(gè)例子中辞嗡,我們在查找一個(gè)元素的時(shí)候,不再使用find_element_by_*這樣的方式來查找元素滞造,而是使用了WebDriverWait续室。

try代碼塊中的代碼的意思是:在拋出元素不存在異常之前,最多等待10秒谒养。在這10秒中挺狰,WebDriverWait會(huì)默認(rèn)每500ms運(yùn)行一次until之中的內(nèi)容明郭,而until中的EC.presence_of_element_located則是檢查元素是否已經(jīng)被加載,檢查的元素則通過By.ID這樣的方式來進(jìn)行查找丰泊。

就是說薯定,在10秒內(nèi),默認(rèn)每0.5秒檢查一次元素是否存在瞳购,存在則將元素賦值給element這個(gè)變量话侄。如果超過10秒這個(gè)元素仍不存在,則拋出超時(shí)異常学赛。


2.1. Expected Conditions

Expected Conditions這個(gè)類提供了很多種常見的檢查條件可以供我們使用年堆。

  • 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

例子:

from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10)
# 等待直到元素可以被點(diǎn)擊
element = wait.until(EC.element_to_be_clickable((By.ID, 'someid')))

3. 隱式等待

隱式等待指的是,在webdriver中進(jìn)行find_element這一類查找操作時(shí)盏浇,如果找不到元素变丧,則會(huì)默認(rèn)的輪詢等待一段時(shí)間。

這個(gè)值默認(rèn)是0绢掰,可以通過以下方式進(jìn)行設(shè)置:

from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(10) # 單位是秒
driver.get("http://somedomain/url_that_delays_loading")
myDynamicElement = driver.find_element_by_id("myDynamicElement")
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末痒蓬,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子曼月,更是在濱河造成了極大的恐慌谊却,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哑芹,死亡現(xiàn)場離奇詭異炎辨,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)聪姿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門碴萧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人末购,你說我怎么就攤上這事破喻。” “怎么了盟榴?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵曹质,是天一觀的道長。 經(jīng)常有香客問我擎场,道長羽德,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任迅办,我火速辦了婚禮宅静,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘站欺。我一直安慰自己姨夹,他們只是感情好纤垂,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著磷账,像睡著了一般峭沦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上够颠,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天熙侍,我揣著相機(jī)與錄音,去河邊找鬼履磨。 笑死,一個(gè)胖子當(dāng)著我的面吹牛庆尘,可吹牛的內(nèi)容都是我干的剃诅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼驶忌,長吁一口氣:“原來是場噩夢啊……” “哼矛辕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起付魔,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤聊品,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后几苍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體翻屈,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年妻坝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了伸眶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,117評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡刽宪,死狀恐怖厘贼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情圣拄,我是刑警寧澤嘴秸,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站庇谆,受9級(jí)特大地震影響岳掐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜族铆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一岩四、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧哥攘,春花似錦剖煌、人聲如沸材鹦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽桶唐。三九已至,卻和暖如春茉兰,著一層夾襖步出監(jiān)牢的瞬間尤泽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工规脸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留坯约,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓莫鸭,卻偏偏與公主長得像闹丐,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子被因,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容