Selenium:布尔设置about:Firefox的webdriver配置

Selenium:布尔设置about:Firefox的webdriver配置

问题描述:

对于测试套件,我正在运行一个使用selenium webdriver控制Firefox实例的python脚本。我想将about:config中的设置dom.disable_open_during_load更改为true。尽管这是我默认的Firefox配置文件中的默认设置,但是无论何时启动webdriver实例,selenium都会将其更改为false(用户定义的)。它似乎使用了一个匿名的,稍微改变的配置文件?!然后我可以手动将其更改回来,但我一直在努力使用代码:无论是使用新的配置文件,还是使用配置了Firefox的配置文件管理器的预设配置文件都无法解决问题。Selenium:布尔设置about:Firefox的webdriver配置

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
  • 硒3.4.2。
  • 火狐53.0.3(64位)
  • 蟒蛇3.4.4

编辑:我刚发现this question上SO,处理Java中的同样的问题。

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

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

欢迎来到[so]!请解释你的代码的作用。如果某人无解释地理解它,他们可能会自己写它,无论如何。 – jpaugh

+0

对不起,这么晚回来......哇,这的确有用!非常感谢,我不会想出这个办法! :) – nostradamus

+0

阅读源代码并使用Pycharm进行调试,您将找到它。 – user175257

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文件此设置。然后提供此本地配置文件的路径。我还没有测试过这个解决方案,所以不知道它是否可行。

+0

谢谢,这很有趣。然而,在你的链接中,他们指的是这个设置被锁定为“true”,而在我的情况下,当我在webdriver启动后在about:config中检查它时,它是'(用户定义的)false'。提到你的建议:你的意思是哪个JS文件?如上所述,我尝试使用配置文件管理器创建一个单独的FF配置文件,但是无论如何这个设置都设置为false。 – nostradamus

+0

'prefs.js'文件应该放在配置文件夹下,不知道它是否会起作用。 –

+0

哦,对,我找到了。我添加了'user_pref(“dom.disable_open_during_load”,true);',但它似乎完全不影响webdriver。 – nostradamus

这种特殊的设置似乎难以出于某种原因...

虽然我没能找到解决的办法,我被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() 

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