Firefox的set_preference通过远程驱动程序无法正常工作

时间:2014-02-18 10:41:10

标签: python firefox selenium selenium-webdriver

我手上有一个棘手的刮痧问题,有很多javascript创建了会话相关的cookie,我试图用selenium绕过这个问题。我正在使用python驱动程序(python-selenium,版本2.2.0-1在debian上)。如果没有从selenium-server-standalone-2.39.0.jar获得的远程驱动程序,浏览器就会启动但无法正常工作(它报告了一些配置文件问题)。使用远程驱动程序一切正常,只是set_preference不起作用(我需要定义一个browser_profile以便能够自动保存一些文件):

profile = webdriver.FirefoxProfile()
profile.set_preference('browser.download.folderList', 2) # custom location 
profile.set_preference('browser.download.manager.showWhenStarting', False)
profile.set_preference('browser.download.dir', '/tmp')
profile.set_preference('browser.helperApps.neverAsk.saveToDisk', 'application/pdf')
profile.set_preference('browser.helperApps.neverAsk.saveToDisk', 'application/pdf')
#browser = webdriver.Firefox()
browser = webdriver.Remote(
   command_executor='http://127.0.0.1:4444/wd/hub',
   desired_capabilities=DesiredCapabilities.FIREFOX, browser_profile=profile)

通过这种方式,不仅打开了带有保存/打开选项的对话框,还检查了:config我没有找到已经设置的confs。 在这个debian上我得到了Iceweasel 24.2.0,但是我也试过用普通的firefox运行ubuntu而没有运气。

关于什么可能是我的问题的任何想法?

3 个答案:

答案 0 :(得分:1)

我意识到这有点晚了,但我发现我认为是这个问题的实际答案。

原来那个 profile.set_preference(" browser.download.manager.showWhenStarting",FALSE)

尝试设置FF无法识别的偏好。如果您在普通配置文件中查看about:config,那么该设置就不存在了。至少从FF 35开始。也许它在过去的某个时间,但不再是。

无论如何,这显然足以使修改后的配置文件无效,导致FF拒绝整个事情(或者可能导致Selenium库在将配置文件传递给FF时崩溃):

browser = webdriver.Remote(...,browser_profile = profile)

相关问题:

https://code.google.com/p/selenium/issues/detail?id=7017

我发现删除对set_preference设置的调用允许修改后的配置文件生效。

我的初步结论是,修改后的配置文件必须只有FF能够理解的修改。

答案 1 :(得分:0)

您可以进行所需的设置并永久保存个人资料吗?然后,您可以加载此配置文件,而无需set_preference。

编辑: 另请参阅Python - Remote Webdriver with Extension installed in it

答案 2 :(得分:0)

此案例的解决方案here 没有采用该配置文件的原因。我们需要通知firefox更新新的配置文件。