Selenium + Python - 处理身份验证对话框,没有URL用户名和密码参数

时间:2018-02-09 10:41:26

标签: python selenium authentication http-authentication

我需要在不提供URL中的参数的情况下对自己进行身份验证。这意味着,我必须手动处理警报(这意味着,切换到警报,进行身份验证,切换回上一个窗口)并使用Selenium Alert Class提供的身份验证方法。

这是我用来处理警报的功能:

def login_browser_alert(driver):
    WebDriverWait(driver, 3).until(EC.alert_is_present())
    current_window = driver.window_handles[0]
    driver.switch_to.alert.authenticate('admin', 'admin')
    driver.switch_to.window(current_window)

这是我导航到页面的方式:

def goto_page(self):
        self.driver.get(self.URL)
        login_browser_alert(self.driver)

我正在使用http://the-internet.herokuapp.com/basic_auth作为虚拟身份验证示例。凭证是用户:“admin”传递:“admin”

问题:

什么都没发生。 对话框就在那里,任何字段都不会输入任何内容。什么都不会被点击。只是,挂起,那里。

我找到的所有解决方案都只是在URL中传递params:

  

http://admin:admin@the-internet.herokuapp.com/basic_auth

由于某些原因我不能解决这个问题。 所以,不,这不会解决我的问题......

有人遇到过类似的问题吗?你是怎么解决这个问题的?

修改

在此链接中,您可以找到有关此问题的更多信息。

https://github.com/SeleniumHQ/selenium/issues/5471#issuecomment-364457555

Alert类中的身份验证方法只是实验性的。似乎唯一的方法确实是URL参数。

1 个答案:

答案 0 :(得分:1)

Alert#authenticate()可能什么都不做。它已从Ruby和Java绑定中删除,并且在Python绑定中没有对它进行测试。

正如您在其他地方看到的那样,您唯一的选择是将请求的网址中的用户名和密码包含为username:password@host