在Web自動化中,常常遇到三種彈框:
- JavaScript警告框,如alert,confirm,prompt等,如下圖:
處理方法為driver.switch_to.alert().dismiss()或river.switch_to.alert().accept()
Alert彈框
Confirm彈框
Prompt彈框
-
DOM彈框,或者叫div彈框,這種彈框本身就在html代碼中,只是原來隱藏了,觸發時會以對話框形式顯示出來,如下圖:
處理方法為,按正常操作,觸發顯示(建議sleep(.5)),然后直接定位操作上面的元素即可。也可使用js跳過流程,直接使對話框顯示,然后定位操作。
-
彈出小窗口,這種小窗口實際上是個網頁窗口,無須處理(driver還在原頁面),或使用switch_to.window()切換到新窗口,使用driver.close()關閉即可。
第4種彈框你見過嗎?
訪問:http://115.28.108.130:5000/api/user/login2/,如下圖:
這種,彈框即不在html中,也不在js中,也不是新窗口,這種該怎么處理呢?
這種屬於Basic Auth的授權彈框,在加載頁面前進行用戶名密碼驗證后才能訪問。
如果你了解URL的組成,會發現,其實解決方法非常簡單。
URL的組成:
協議://用戶名:密碼@服務域名或IP:端口號/接口地址?查詢參數
這種Basic Auth的授權頁面只需要把用戶名密碼放到URL中即可:
示例代碼:
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get('http://admin:secret@115.28.108.130:5000/api/user/login2/')
sleep(3)
driver.quit()
效果下圖所示,以完成授權: