2014-12-05 73 views
5

我有一個安全的URL的問題盒:處理「需要驗證」警報與Python 2.7 +硒的webdriver

打開URL創建包含用戶名和密碼字段的「需要驗證」的警告框。

我是Selenium Webdriver和Python的新手。我不熟悉處理警報,我目前手動輸入憑據,直到我能弄明白爲止。 我已經嘗試將我的用戶名/密碼添加到URL中。這對我不起作用。

可能有人請指出我在alertbox進入鍵進入用戶名和密碼字段的方向是什麼?

+1

你能提供一個警報截圖嗎? – Saifur 2014-12-05 19:43:33

+0

從你的開發人員那裏找出它使用的是什麼形式的認證。在URL *中傳遞用戶名:密碼*應該適用於大多數情況,除非語法錯誤。 – SiKing 2014-12-05 21:25:13

回答

1

感謝所有的回覆。不幸的是,這些解決方案都不適合我。我懷疑這可能與每次由webdriver打開Firefox時創建新配置文件有關。

我的解決方法: 我改變了司機從火狐IE瀏覽器,安裝32位IE的驅動程序(http://selenium-release.storage.googleapis.com/index.html?path=2.44/)之後。這解決了我的問題,不再創建alertbox,並讓我繼續我的單元測試。

+0

之後的密碼。我的密碼有一個@符號,所以這也是我的解決方案。更不用說,用純文本密碼獲取http可能會被嗅探到 – gh4x 2017-01-25 19:31:55

1

您可以嘗試在報警中使用Keys選項卡嗎?

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.common.alert import Alert 
from selenium.webdriver.support.ui import WebDriverWait as wait 
from selenium.webdriver.support import expected_conditions as EC 

driver = webdriver.Firefox() 
driver.get('http://www.url.com/') 
wait(driver, 5).until(EC.alert_is_present()) 
alert = driver.switch_to_alert() 
alert.send_keys('username') 
alert.send_keys(Keys.TAB) 
alert.send_keys('password') 
alert.accept() 
+1

該行: 'driver.get('http://www.url.com/')' 將會有效阻止,此方法將無法工作。 – PythonTester 2015-03-11 12:02:30

+1

使用串聯字符串修復了我的問題:'alert.send_keys('username'+ Keys.TAB +'password')' – 2017-07-18 10:23:52

5

在這樣的認證的情況下,需要通過用戶名和密碼,服務器在訪問網頁,以避免驗證窗口(這是出於硒夠不到的地方)

假設你正在嘗試訪問的網址是:http://example.com

你有憑據訪問此網址類似如下:

driver.get('http://username:[email protected]') 

其中username是您的用戶名,password是您網站的密碼。

+0

我已經用Chrome驅動程序測試過這個,並且頁面沒有加載。 – zabumba 2016-04-18 14:01:13

+1

這會起作用,但是你忘了http – Ekkstein 2016-08-01 16:00:02

0

我有完全相同的問題,因爲你,直到我發現,我只是忘了寫:「HTTPS」,而不僅僅是HTTP。如果你添加's',對我來說就是這樣!

所以在代碼也許你也想嘗試:

driver.get('https://username:[email protected]') 
0

我在這裏添加我的用戶名/密碼,進入網址爲我沒有工作,類似的問題。這是因爲Firefox提醒我一個確認框,要求我確認我想用提供的用戶名登錄該網站。下面解決了這個問題:

from selenium import webdriver 

driver = webdriver.Firefox() 
driver.get('https://<username>:<password>@<site-needing-auth>.com') 
alert = driver.switch_to_alert() 
alert.accept()