【问题标题】:Selenium: boolean setting in about:config of Firefox webdriverSelenium:Firefox webdriver 的 about:config 中的布尔设置
【发布时间】:2017-05-31 06:45:57
【问题描述】:

对于一个测试套件,我正在运行一个使用 selenium webdriver 控制 Firefox 实例的 python 脚本。我想将 about:config 中的设置 dom.disable_open_during_load 更改为 true。尽管这是我的默认 Firefox 配置文件中的默认设置,但 selenium 在我启动 webdriver 实例时将其更改为 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
  • 硒 3.4.2.
  • Firefox 53.0.3(64 位)
  • python 3.4.4

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

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

【问题讨论】:

    标签: python selenium selenium-webdriver


    【解决方案1】:
    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 会被frozen's 覆盖。

    【讨论】:

    • 欢迎来到Stack Overflow!请解释您的代码的作用。如果有人不加解释地理解它,他们可能无论如何都可以自己写。
    • 抱歉这么晚才回来......哇,这确实有效!非常感谢,我不可能想出这个! :)
    • 阅读源码,用Pycharm调试,你会发现的。
    • 这在 NodeJS 中可行吗?我们如何设置它?
    【解决方案2】:

    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 文件中修改此设置。然后提供此本地配置文件的路径。我没有测试过这个解决方案,所以不确定它是否有效。

    【讨论】:

    • 谢谢,这很有趣。但是在您的链接中,他们将此设置称为“true”,而在我的情况下,当我在 webdriver 启动后在 about:config 中检查它时,它是 (user-defined) false。参考您的建议:您是指哪个 JS 文件?如上所述,我尝试使用配置文件管理器创建一个单独的 FF 配置文件,但这个设置无论如何都设置为 false。
    • prefs.js 文件应该在 profile 文件夹下,不确定它是否可以工作。
    • 哦,对了,我找到了。我添加了user_pref("dom.disable_open_during_load", true);,但它似乎根本不影响webdriver。
    • 我在 java 中发现了一些非常相似的东西,请参阅问题中的编辑。
    【解决方案3】:

    由于某种原因,这个特定的设置似乎很困难......

    虽然我无法找到解决方案,但我受到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()
    

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

    【讨论】:

      猜你喜欢
      • 2021-11-20
      • 2022-01-25
      • 2014-07-24
      • 1970-01-01
      • 1970-01-01
      • 2010-12-22
      • 2021-12-27
      • 1970-01-01
      • 2020-06-17
      相关资源
      最近更新 更多