Python: Cómo agregar extensiones de Firefox en Selenium 4
La última versión que utilicé de Selenium fue la 3.141.0.
Ahora estoy haciendo la transición a Selenium 4, y estoy tratando de averiguar cómo agregar extensiones para Firefox en Python 3.
Anteriormente, algo como esto funcionaba:
from selenium import webdriver
perfil = webdriver.FirefoxProfile(ruta_del_perfil)
perfil.add_extension(‘adblock_plus-3.10.2-an+fx.xpi’)
driver = webdriver.Firefox(perfil)
Mientras intentaba hacer algunos ajustes que aparentemente son necesarios para Selenium 4, probé el siguiente código:
from selenium import webdriver
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.firefox.options import Options
opciones = Options()
opciones.set_preference(‘perfil’, ruta_del_perfil)
opciones.add_extension(‘adblock_plus-3.10.2-an+fx.xpi’)
servicio = Service(‘/usr/local/bin/geckodriver’)
driver = webdriver.Firefox(opciones=opciones, servicio=servicio)
En Selenium 4.1.0, esto da como resultado AttributeError:
opciones.add_extension(‘adblock_plus-3.10.2-an+fx.xpi’)
AttributeError: el objeto ‘Options’ no tiene el atributo ‘add_extension’
Usar .add_extension() con un objeto Options() aparentemente no es la forma correcta de agregar una extensión. Sin embargo, no puedo encontrar la forma correcta.
Es potencialmente posible crear un FirefoxProfile y agregar la extensión allí, pero al menos eso parece dar una DeprecationWarning y no sé si funcionará de todos modos:
from selenium import webdriver
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.firefox.options import Options
perfil = webdriver.FirefoxProfile(ruta_del_perfil)
perfil.add_extension(‘adblock_plus-3.10.2-an+fx.xpi’)
opciones = Options()
opciones.set_preference(‘perfil’, ruta_del_perfil)
servicio = Service(‘/usr/local/bin/geckodriver’)
driver = webdriver.Firefox(perfil, opciones=opciones, servicio=servicio)
DeprecationWarning: el perfil ha sido depreciado, por favor pase un objeto Options
driver = webdriver.Firefox(perfil, opciones=opciones, servicio=servicio)
¿Cuál es la forma correcta de agregar extensiones en Selenium 4 para Firefox?
davy.ai
En Selenium 4, la clase
Options()
ya no tiene un métodoadd_extension()
. En su lugar, puedes usar el métodoinstall_addon()
, de la siguiente manera:Aquí, el método
install_addon()
toma la ruta del archivo de la extensión y la instala en el perfil de Firefox especificado poropciones.set_preference('profile', ruta_perfil)
. Ten en cuenta que la ruta del archivo puede ser una ruta absoluta o una ruta relativa al directorio de trabajo actual.También es una opción seguir utilizando un objeto
FirefoxProfile
, aunque como se menciona en el mensaje de advertencia, ahora está obsoleto. Así es como se vería el código:Este código crea un objeto
FirefoxProfile
, añade la extensión a éste, lo establece como perfil para el objetoOptions()
y por último lo pasa al constructorwebdrider.Firefox()
. Ten en cuenta que en este caso no necesitas llamar aopciones.install_addon()
en absoluto. Sin embargo, ten en cuenta que este enfoque puede dejar de funcionar en futuras versiones de Selenium, por lo que es mejor hacer la transición al nuevo métodoinstall_addon()
cuando sea posible.