对于测试套件,我正在运行使用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
"用户定义的"来自?它是某个地方硒的自动设置吗?我正在使用:
编辑:我刚刚在SO上找到了this question,处理了java中的同样问题。
如果事实证明这是不可能的,那么可能有一个很好的解决方法?有什么想法吗?
答案 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()
如果有人知道或找到更好的方法,请发表评论!