Python-3.x-Selenium:在保持登录状态的同时更改使用的驱动程序

时间:2019-06-21 15:09:44

标签: python python-3.x selenium selenium-webdriver web-testing

我目前正在用python-selenium测试一个网站,到目前为止,它的运行情况还不错。我正在使用webdriver.Firefox(),因为如果您可以看到测试程序的实际作用,它将使开发过程变得更加容易。但是,测试非常缓慢。有时,程序必须单击30个项目才能将它们添加到列表中,这大约需要40秒钟,因为浏览器的响应速度非常慢。因此,在谷歌搜索如何更快地硒化之后,我考虑过改用无头浏览器,例如webdriver.PhantomJS()

但是,问题是,该网站要求登录名开头包含验证码。现在,我在Firefox浏览器中手动输入验证码。切换到无头浏览器时,我无法再这样做。

所以我的想法是在Firefox中打开网站,手动登录并解决验证码。然后,我以某种方式在无头PhatomJS中继续了该会话,这使我可以快速运行代码。因此,基本上,它是关于更改使用的驱动程序中间代码

我知道驱动程序在创建时是完全干净的。因此,如果我在登录Firefox后创建了新的驱动程序,则将在其他驱动程序中注销。因此,我想我必须在两个驱动程序之间传递一些会话信息。

这可以以某种方式工作吗?如果是,我该怎么办?老实说,我对网络钩子,cookie和存储“登录”信息的实际功能并不了解很多。那么你们将如何处理这个问题?

期待听到您的答案, 托比亚斯

注意:我已经问过类似的问题,该问题被标记为this one的重复项。但是,另一个问题讨论了退出脚本后如何重新连接到浏览器。这不是我打算做的。我想在登录网站时更改使用的驱动程序中间脚本。因此,我删除了旧问题,并创建了这个更合适的新问题。我希望这样可以。

2 个答案:

答案 0 :(得分:0)

真正的解决方案是让您的开发团队添加一种测试模式(生产环境中不可用),其中在页面代码中的某处提供验证码解决方案,或者绕过验证码。

您提出的解决方案听起来并不可行,并且手动执行操作会破坏自动化的目的。需要采取手动步骤的自动化将被放弃。

答案 1 :(得分:0)

网站通过Cookies“识别”用户-特殊的HTTP Header随每个请求一起发送,因此网站知道用户已通过身份验证,拥有这些或那个权限等。< / p>

幸运的是,Selenium provides functions allowing cookies manipulation所要做的就是使用WebDriver.get_cookies()方法从Firefox存储cookie,并通过WebDriver.add_cookie()方法将它们添加到PhantomJS。

firefoxCookies = firefoxDriver.get_cookies()
for cookie in firefoxCookies:
    phantomJSDriver.add_cookie(cookie)