“处理”;“需要认证”;带有Python 2.7+的警报框;Selenium Web驱动程序

“处理”;“需要认证”;带有Python 2.7+的警报框;Selenium Web驱动程序,python,selenium,selenium-webdriver,Python,Selenium,Selenium Webdriver,我对安全URL有问题: 打开URL将创建一个带有用户名和密码字段的“需要验证”警报框 我对SeleniumWebDriver和Python相当陌生。我不熟悉处理警报,目前正在手动键入凭据,直到我能弄明白这一点我已经尝试将我的用户名/密码添加到URL中。这对我不起作用。 有人能告诉我在alertbox的用户名和密码字段中输入密钥的方向吗?您能尝试在alertbox中使用to选项卡吗 from selenium import webdriver from selenium.webdriver.com

我对安全URL有问题:

打开URL将创建一个带有用户名和密码字段的“需要验证”警报框

我对SeleniumWebDriver和Python相当陌生。我不熟悉处理警报,目前正在手动键入凭据,直到我能弄明白这一点我已经尝试将我的用户名/密码添加到URL中。这对我不起作用。

有人能告诉我在alertbox的用户名和密码字段中输入密钥的方向吗?

您能尝试在alertbox中使用to选项卡吗

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()

在这种身份验证的情况下,您需要在访问页面时将用户名和密码传递给服务器,以避免出现身份验证窗口(selenium无法访问)

假设您尝试访问的url为:

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

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

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

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

我的解决方法
安装32位IE驱动程序()后,我将驱动程序从Firefox更改为IE。这解决了我的问题,不再创建alertbox,并允许我继续进行unittest。

我遇到了与您完全相同的问题,直到我注意到,我只是忘了写:“https”而不仅仅是http。如果你加上“s”,对我来说就是这样

因此,在代码中,您可能希望尝试:

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

我遇到了类似的问题,在URL中添加用户名/密码对我来说不起作用。这是因为Firefox用一个确认框提醒我,要求我确认我想使用提供的用户名登录该站点。以下解决了这个问题:

from selenium import webdriver

driver = webdriver.Firefox()
driver.get('https://<username>:<password>@<site-needing-auth>.com')
alert = driver.switch_to_alert()
alert.accept()
从selenium导入webdriver
driver=webdriver.Firefox()
get('https://:@.com')
警报=驾驶员。切换到警报()
alert.accept()

以前的答案对我的处境毫无帮助。我正在验证的网站使用单一登录,使用用户名时出现问题:password@website.com.

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

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

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()

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

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

您能提供警报的屏幕截图吗?从您的开发者那里了解这是使用什么形式的身份验证。除非语法错误,否则在URL中传递用户名:密码在大多数情况下都应该有效。行:“driver.get(')将有效阻止,此方法将不起作用。使用串联字符串修复我这边的问题:
alert.send_key('username'+keys.TAB+'password'))
这是唯一对我有效的解决方案,但正如@random_Clyde所述,我必须一次性发送密钥。我已经用Chrome驱动程序测试了这一点,但页面没有加载。这不起作用。Selenium/Firefox/Chrome去掉用户名/密码,然后提示您一个警报。这对我很有用。感谢您的解决方案@Alpha!!我的密码中有一个-登录,所以这也是我的解决方案。更不用说可以嗅探带有纯文本密码的http GET嘿,你在哪里调用这个函数?你把什么参数传递给这个函数?我需要完全相同的解决方案。您需要首先调用此函数,因为它设置了webdriver并转到站点。此函数中没有要专门设置的参数,但您需要更新特定用例的
websitelogin.com
用户名
、密码。有道理?两年前我做这个的时候,它只对firefox webdriver有效。但现在情况可能已经改变了。