WebDriverWait(driver, 超時時長, 調用頻率, 忽略異常).until(可執行方法, 超時時返回的信息)
這裏需要特別注意的是until或until_not中的可執行方法method參數,很多人傳入了WebElement對象,如下:
1 |
|
這是錯誤的用法,這裏的參數一定要是可以調用的,即這個對象一定有 __call__() 方法,否則會拋出異常:
1 |
|
在這裏,你可以用selenium提供的 expected_conditions 模塊中的各種條件,也可以用WebElement的 is_displayed() 、is_enabled()、is_selected() 方法,或者用自己封裝的方法都可以,那麼接下來我們看一下selenium提供的條件有哪些:
expected_conditions
expected_conditions是selenium的一個模塊,其中包含一系列可用於判斷的條件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
|
上面是所有17個condition,與until、until_not組合能夠實現很多判斷,如果能自己靈活封裝,將會大大提高腳本的穩定性。
2、selenium鼠標懸停類-- ActionChains()
導包:from selenium.webdriver.common.action_chainsimport ActionChains
elem1= dr.find_element(By.LINK_TEXT,"設置")
ActionChains(dr).move_to_element(elem1).perform()
3、selenium警告框的處理
很多web應用經常會遇到JavaScript編寫的alert 、confirm 以及prompt 彈窗,需要用到switch_to.alert來切換彈窗,並對彈窗進行輸入信息,關閉等處理。
switch_to.alert.text --獲取彈窗文本信息
switch_to.alert.accept() --點擊彈窗中確定按鈕
switch_to.alert.dismiss() --點擊彈出中取消按鈕
switch_to.alert.sendKeys("字符串") --在彈窗中輸入信息
4、下拉菜單選擇的三種方式
導包:from selenium.webdriver.support.uiimport Select
#選擇下拉框的o2
elem1 = dr.find_element(By.ID,"s3Id")
(1):根據value值定位
Select(elem1).select_by_value("o2val")
(2).根據index定位
Select(elem1).select_by_index(1)
(3).根據下拉框文本信息定位
Select(elem1).select_by_visible_text("o2")
5、selenium之JS操作瀏覽器滾動條位置
driver.maximize_window()
execute_script("window.scrollTo(0,n);") #n即座標位置
6、selenium之JS操作隱藏元素
隱藏元素的標識:style="display:none;"
一般我們通過將隱藏元素的屬性修改成顯示再定位
#修改隱藏元素屬性爲顯示
elem = 'document.getElementById("id").style.display="block";'
driver.execute_script(elem)