2014-12-05 122 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()