Selenium Python Firefox WebDriver: 无法修改配置文件。

3

我希望在一个webdriver Firefox实例中使用“新标签页而不是窗口”的选项。 1/ 我创建了一个已经开启此选项的配置文件,但是当我使用该配置文件时,很多选项都可以正常工作,但这个选项却不能正常工作。 2/ 在加载配置文件后,我尝试在代码中更改选项,但是它没有起作用。 我的代码:

profile = webdriver.FirefoxProfile(os.path.join(s_path, name))
profile.set_preference("browser.link.open_newwindow.restriction", 0)
profile.set_preference("browser.link.open_newwindow", 3)
profile.set_preference("browser.link.open_external", 3)
profile.set_preference("browser.startup.homepage","http://www.google.fr")
profile.update_preferences()
print(os.path.join(s_path, name))
driver = webdriver.Firefox(set_profile())

除了这个选项不好用之外,一切都正常(起始主页为google.fr)。
看起来Selenium将配置文件复制到一个临时目录中,其中users.js有错误的行:
user_pref("browser.link.open_newwindow", 2);

Python 3.4.2、Windows 7、Firefox 39.0、Selenium库 2.46

2个回答

4
根据我的研究,browser.link.open_newwindow 是一个冻结设置,它始终与值 2 同步。如果你查找 selenium Python 绑定的源代码,你会发现一个一组冻结设置,这些设置会在你的自定义设置之后应用。
请注意,在java 绑定中,这个默认的冻结设置集是明确硬编码的:
  /**
   * Profile preferences that are essential to the FirefoxDriver operating correctly. Users are not
   * permitted to override these values.
   */
  private static final ImmutableMap<String, Object> FROZEN_PREFERENCES =
      ImmutableMap.<String, Object>builder()
          .put("app.update.auto", false)
          .put("app.update.enabled", false)
          .put("browser.download.manager.showWhenStarting", false)
          .put("browser.EULA.override", true)
          .put("browser.EULA.3.accepted", true)
          .put("browser.link.open_external", 2)
          .put("browser.link.open_newwindow", 2)  // here it is
          // ...

以下是来自Firefox仅支持窗口而非选项卡的一些解释:

这是一个已知问题,不幸的是我们将不支持选项卡。

我们强制Firefox在新窗口中打开所有链接。我们无法访问选项卡以知道何时切换。当我们将来转移到Marionette(Mozilla项目)时,我们应该能够做到这一点,但现在它按预期工作。

一个解决方法是手动更改链接的target - 可能无法在所有情况下起作用,这取决于如何打开新链接。


很好的答案。就我个人而言,我更喜欢修改json文件:\Python34\Lib\site-packages\selenium\webdriver\firefox\webdriver_prefs.json,其中定义了冻结行... - philnext
@philnext 哦,好主意!谢谢分享! - alecxe

3

"browser.link.open_newwindow" 是一个冻结的偏好设置,这意味着无法使用profile.set_preference("browser.link.open_newwindow", 3)来修改。

解决方法是改用profile.DEFAULT_PREFERENCES["frozen"]["browser.link.open_newwindow"] = 3代替(其他非冻结的偏好设置可以使用set_preference进行设置而不会有问题)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接