处理"需要验证"使用Python 2.7 + Selenium Webdriver的警告框

时间:2014-12-05 19:00:36

标签: python selenium selenium-webdriver

我遇到安全网址问题:

打开URL会创建一个"需要验证"带有用户名和密码字段的警告框。

我对Selenium Webdriver和Python相当新。我不熟悉处理警报,目前我手动输入凭据,直到我弄明白这一点。 我已尝试将用户名/密码添加到网址中。这对我不起作用。

有人可以指点我在警告框中输入密码进入用户名和密码字段的方向吗?

7 个答案:

答案 0 :(得分:5)

您可以尝试在警报中使用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 :(得分:4)

如果进行此类身份验证,您需要在访问页面时将用户名和密码传递给服务器,以避免身份验证窗口(硒无法访问)

假设您尝试访问的网址是:http://example.com

您必须使用以下凭据访问此网址:

driver.get('http://username:password@example.com')

其中username是您的用户名,password是您的网站密码。

答案 2 :(得分:2)

感谢所有回复。不幸的是,这些解决方案都不适合我。我怀疑它可能与每次使用webdriver打开firefox时创建新配置文件有关。

我的解决方法: 在安装32位IE驱动程序(http://selenium-release.storage.googleapis.com/index.html?path=2.44/)后,我将驱动程序从Firefox更改为IE。这解决了我的问题,不再创建警告框,并允许我继续我的单元测试。

答案 3 :(得分:0)

我遇到了与你完全相同的问题,直到我注意到,我只是忘了写:' https'而不仅仅是http。如果你添加了' s,对我这样做了!

所以在代码中你可能想尝试:

driver.get('https://username:password@domain-name.org')

答案 4 :(得分: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()

答案 5 :(得分:0)

之前没有答案对我的处境有所帮助。我正在认证的网站使用单一符号,在使用 username password @ website.com时出现问题。

在“身份验证”窗口中,需要输入“用户名”和“密码”两个字段。 Authentication Window

要解决此问题,请将用户名和密码一次发送到警报框。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.alert import Alert

def login(self):
    self.browser = webdriver.Firefox()
    self.browser.get(r'websitelogin.com')
    wait(self.browser, 1).until(expected_conditions.alert_is_present())

    # "Switch" to the Alert browser
    alert = Alert(self.browser)

    # Send the username, TAB then password all in one go using a python f string
    alert.send_keys(f'username{Keys.TAB}password')
    alert.accept()

答案 6 :(得分:0)

下面的Python代码可以帮助加载这样的URL,以提示在JavaScript弹出警报中进行身份验证,我在这里也呆了很长时间。这是因为Chrome驱动程序在更新59之后(​​可能)不允许使用这种身份验证技术。仍然有通过Selenium使用浏览器中的JavaScript引擎加载此类URL的后门程序。

driver.get("https://www.google.com")
URL = "https://{username}:{password}@www.example.com"
driver.executeScript("window.open('"+URL+"')")