Selenium Python Firefox webdriver: no se puede modificar el perfil

Quiero usar, en una instancia de Firefox para webdriver, la opción “nueva pestaña en lugar de ventana”. 1 / Creé un perfil con esta opción activada, pero cuando uso el perfil, muchas opciones están bien, pero no esta. 2 / Después de cargar el perfil, intenté cambiar la opción en el código pero no funciona. Mi código :

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()) 

Todo está bien (la página de inicio es google.fr), excepto esta opción, que no está bien.

Parece que Selenium copia el perfil en un directorio temporal. donde users.js tiene la línea incorrecta:

 user_pref("browser.link.open_newwindow", 2); 

Python 3.4.2, Windows 7, Firefox 39.0, Selenium lib 2.46

Por lo que he investigado, browser.link.open_newwindow es una configuración congelada y siempre está sincronizada con el valor 2 . Si extrae la fuente de los enlaces de selenium de Python, encontrará un conjunto de configuraciones frozen que se aplicará después de que se establezcan sus configuraciones personalizadas.

Tenga en cuenta que en los enlaces de java este conjunto de configuraciones congeladas por defecto está explícitamente codificado:

  /** * Profile preferences that are essential to the FirefoxDriver operating correctly. Users are not * permitted to override these values. */ private static final ImmutableMap FROZEN_PREFERENCES = ImmutableMap.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 // ... 

Y una pequeña explicación proveniente de Firefox solo admite ventanas, no tabs :

Este es un problema conocido y, lamentablemente, no vamos a admitir tabs.

Obligamos a Firefox a abrir todos los enlaces en una nueva ventana. No podemos acceder a las tabs para saber cuándo cambiar. Cuando pasemos a la marioneta (proyecto Mozilla) en el futuro, deberíamos poder hacer esto, pero por ahora está funcionando como es debido.

Una solución alternativa sería cambiar el target de un enlace manualmente ; es posible que no funcione en todos los casos, dependiendo de cómo se abra un nuevo enlace.