es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    En Selenium 4, la clase Options() ya no tiene un método add_extension(). En su lugar, puedes usar el método install_addon(), de la siguiente manera:

    from selenium import webdriver
    from selenium.webdriver.firefox.service import Service
    from selenium.webdriver.firefox.options import Options
    
    opciones = Options()
    opciones.set_preference('profile', ruta_perfil)
    opciones.install_addon('ruta/al/adblock_plus-3.10.2-an+fx.xpi')
    
    servicio = Service('/usr/local/bin/geckodriver')
    
    driver = webdriver.Firefox(options=opciones, service=servicio)
    

    Aquí, el método install_addon() toma la ruta del archivo de la extensión y la instala en el perfil de Firefox especificado por opciones.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:

    from selenium import webdriver
    from selenium.webdriver.firefox.service import Service
    from selenium.webdriver.firefox.options import Options
    
    perfil = webdriver.FirefoxProfile(ruta_perfil)
    perfil.add_extension('ruta/al/adblock_plus-3.10.2-an+fx.xpi')
    
    opciones = Options()
    opciones.set_profile(perfil)
    
    servicio = Service('/usr/local/bin/geckodriver')
    
    driver = webdriver.Firefox(options=opciones, service=servicio)
    

    Este código crea un objeto FirefoxProfile, añade la extensión a éste, lo establece como perfil para el objeto Options() y por último lo pasa al constructor webdrider.Firefox(). Ten en cuenta que en este caso no necesitas llamar a opciones.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étodo install_addon() cuando sea posible.

Comments are closed.