如何将HttpAuthentication传递给selenium webdriver
在我的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是我知道的唯一一个有限制的浏览器。