Selenium Python Firefox webdriver:无法修改个人资料

时间:2015-07-13 13:19:42

标签: python firefox python-3.x selenium selenium-webdriver

我想在webdriver Firefox实例上使用" new选项卡而不是window"选项。 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 lib 2.46

2 个答案:

答案 0 :(得分:4)

根据我的研究,browser.link.open_newwindow冻结设置,并且它始终与值2同步。如果您挖掘了硒Python绑定的来源,您会发现在设置自定义设置后应用set of frozen settings

请注意,在java bindings中,这组默认冻结设置是明确硬编码的:

  /**
   * 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 only supports windows not tabs的一些解释:

  

这是一个已知问题,不幸的是我们不会支持标签。

     

我们强制Firefox在新窗口中打开所有链接。我们无法访问   标签知道何时切换。当我们搬到牵线木偶时(Mozilla   项目)在未来我们应该能够做到这一点,但现在它是   按预期工作

解决方法是change the target of a link manually - 可能不适用于所有情况,具体取决于新链接的打开方式。

答案 1 :(得分:0)

"browser.link.open_newwindow"冻结的首选项,这意味着它不能使用profile.set_preference("browser.link.open_newwindow", 3)

进行修改。

解决方案是改用profile.DEFAULT_PREFERENCES["frozen"]["browser.link.open_newwindow"] = 3。 (可以使用set_preference设置其他非冻结的首选项)