如何将HttpAuthentication传递给selenium webdriver

0 投票
1 回答
5589 浏览
提问于 2025-04-17 12:57

在我的Python项目中,登录过程是通过HttpBasicAuth处理的。得到响应后,我应该通过Selenium加载主页面。

这个过程应该怎么做呢?

它有一个基本网址。当用Python-Selenium加载这个基本网址时,会弹出一个框要求输入用户名和密码进行认证。然后就可以进入主页面了。

这里有两个步骤:

  • 步骤1:登录(使用HttpBasicAuth处理)

我使用HttpBasicAuth处理的原因是,当我打开网址时,会弹出一个登录窗口。由于我们不知道如何用Selenium控制这个弹出对话框,所以我们选择了HttpAuthentication。

(这是我需要建议的部分。)

  • 步骤2:在获取响应后,使用Selenium处理后续步骤。

在这个中间步骤中,我使用HttpBasicAuth处理的响应来进行认证,这样Selenium就可以继续进行测试的其他步骤。

我该如何在Selenium中让网站通过认证?我是否需要通过HttpBasicAuthentication的响应为Selenium的webdriver创建一个cookie,以跳过登录框?

1 个回答

5

这个问题其实很简单,只要在你的HTTP响应中加个头信息就能解决,但可惜的是,Selenium2不支持这个功能。

你可以试试这样做,把用户名和密码放在网址里:

browser = webdriver.Firefox() # Get local session of firefox
browser.get("http://myusername:mypassword@www.yourpage.com") # Load page

不过要注意,这种方法在IE浏览器上不管用(因为安全问题),但你可以通过稍微修改注册表让它工作。

根据你说的,我不太明白你的问题。如果你按照我说的方式发第一个请求,浏览器会自动保存一个特殊的Authorization:头信息,里面包含了用户名和密码的组合,并且经过了base64编码。之后的所有请求都会被认证,直到你关闭浏览器为止。

这个方法和Selenium 1或Selenium 2关系不大,主要看具体的浏览器支持什么。IE是我知道的唯一一个有限制的浏览器。

撰写回答