Selenium:关于:web webdriver的about:config中的布尔值设置

时间:2017-05-31 06:45:57

标签: python selenium selenium-webdriver

对于测试套件,我正在运行使用selenium webdriver控制Firefox实例的python脚本。我想将about:config中的设置dom.disable_open_during_load更改为true。虽然这是我的默认Firefox配置文件中的默认设置,但只要我启动webdriver实例,selenium就会将其更改为false(用户定义)。它似乎使用匿名,略有改变的个人资料?!然后我可以手动将其更改回来,但我很难用代码来做:既不使用新的配置文件也不使用配置了Firefox的预设配置文件'个人资料经理解决了这个问题。

from selenium import webdriver

FFprofile = webdriver.FirefoxProfile()
FFprofile.set_preference('dom.disable_open_during_load', 'true')  # I also tried True, 1 - with and without quotes
# FFprofile = webdriver.FirefoxProfile('C:/Users/ExampleUser/AppData/Local/Mozilla/Firefox/Profiles/owieroiuysd.testprofile')


FFdriver = webdriver.Firefox(firefox_profile=FFprofile)
FFdriver.get('http://www.google.com')

我可以通过这种方式更改各种设置,但它不适用于此设置。更改后的值false"用户定义的"来自?它是某个地方硒的自动设置吗?我正在使用:

  • geckodriver 0.16.1
  • selenium 3.4.2。
  • Firefox 53.0.3(64位)
  • python 3.4.4

编辑:我刚刚在SO上找到了this question,处理了java中的同样问题。

如果事实证明这是不可能的,那么可能有一个很好的解决方法?有什么想法吗?

3 个答案:

答案 0 :(得分:5)

fp = webdriver.FirefoxProfile()
fp.DEFAULT_PREFERENCES['frozen']["dom.disable_open_during_load"] = True

不要使用profile.set_preference('dom.disable_open_during_load', True)因为profile.default_preference会被冻结覆盖。

答案 1 :(得分:0)

profile.set_preference('dom.disable_open_during_load', True)

是正确的方法,但它不适用于此特定属性,因为根据以下文章,用户不允许更改此属性。同样的事情适用于其他参数。

即。

profile.set_preference('browser.download.manager.showWhenStarting', False)

https://www.stigviewer.com/stig/mozilla_firefox/2015-06-30/finding/V-19743

<强>解决方案

创建新的配置文件并直接在JS文件中修改此设置。然后提供此本地配置文件的路径。我没有测试过这个解决方案,所以不确定它是否可行。

答案 2 :(得分:0)

由于某些原因,这种特殊设置似乎很难......

虽然我无法找到解决方案,但我受到了this webpage的启发,并使用Firefox的开发人员工具栏找到了一个不错的解决方法:

    ActionChains(self.FFdriver).key_down(Keys.SHIFT).send_keys(Keys.F2).key_up(Keys.SHIFT).perform()
    time.sleep(0.1)       // this seems to be necessary
    ActionChains(self.FFdriver).send_keys('pref set dom.disable_open_during_load true').perform()
    ActionChains(self.FFdriver).send_keys(Keys.ENTER).perform()
    ActionChains(self.FFdriver).key_down(Keys.SHIFT).send_keys(Keys.F2).key_up(Keys.SHIFT).perform()

如果有人知道或找到更好的方法,请发表评论!