Saltar al contenido

No quiero que las imágenes se carguen y CSS se procese en Firefox en Selenium WebDriver – Python

Te damos la bienvenida a nuestra página web, en este lugar encontrarás la solucíon de lo que necesitas.

Solución:

He descubierto una forma de evitar que Firefox cargue CSS, imágenes y Flash.

from selenium.webdriver.firefox.firefox_profile import FirefoxProfile

def disableImages(self):
    ## get the Firefox profile object
    firefoxProfile = FirefoxProfile()
    ## Disable CSS
    firefoxProfile.set_preference('permissions.default.stylesheet', 2)
    ## Disable images
    firefoxProfile.set_preference('permissions.default.image', 2)
    ## Disable Flash
    firefoxProfile.set_preference('dom.ipc.plugins.enabled.libflashplayer.so',
                                  'false')
    ## Set the modified profile while creating the browser object 
    self.browserHandle = webdriver.Firefox(firefoxProfile)

Gracias de nuevo @Simon y @ernie por sus sugerencias.

Desafortunadamente la opción firefox_profile.set_preference('permissions.default.image', 2) ya no parece funcionar para deshabilitar imágenes con la última versión de Firefox – [for reason see Alecxe’s answer to my question Can’t turn off images in Selenium / Firefox ]

La mejor solución que tuve fue usar la extensión de firefox quickjava, que entre otras cosas puede deshabilitar imágenes: https://addons.mozilla.org/en-us/firefox/addon/quickjava/

Mi código Python:

 from selenium import webdriver
 firefox_profile = webdriver.FirefoxProfile()

 firefox_profile.add_extension(folder_xpi_file_saved_in + "\quickjava-2.0.6-fx.xpi")
 firefox_profile.set_preference("thatoneguydotnet.QuickJava.curVersion", "2.0.6.1") ## Prevents loading the 'thank you for installing screen'
 firefox_profile.set_preference("thatoneguydotnet.QuickJava.startupStatus.Images", 2)  ## Turns images off
 firefox_profile.set_preference("thatoneguydotnet.QuickJava.startupStatus.AnimatedImage", 2)  ## Turns animated images off

 driver = webdriver.Firefox(firefox_profile)
 driver.get(web_address_desired)

Deshabilitar CSS (y creo que flash) todavía funciona con las propiedades de Firefox. pero ellos y otras partes también se pueden apagar agregando las líneas:

  firefox_profile.set_preference("thatoneguydotnet.QuickJava.startupStatus.CSS", 2)  ## CSS
  firefox_profile.set_preference("thatoneguydotnet.QuickJava.startupStatus.Cookies", 2)  ## Cookies
  firefox_profile.set_preference("thatoneguydotnet.QuickJava.startupStatus.Flash", 2)  ## Flash
  firefox_profile.set_preference("thatoneguydotnet.QuickJava.startupStatus.Java", 2)  ## Java
  firefox_profile.set_preference("thatoneguydotnet.QuickJava.startupStatus.JavaScript", 2)  ## JavaScript
  firefox_profile.set_preference("thatoneguydotnet.QuickJava.startupStatus.Silverlight", 2) 

Nueva edición

Ha pasado tanto tiempo desde que escribí esto y puedo decir que el campo de la automatización web (ya sea con fines de prueba o de rastreo / extracción) ha cambiado mucho. Los principales navegadores ya han presentado una --headless bandera e incluso shell interactivo. No más cambien los buenos viejos DISPLAY variable en Linux.

Firefox también ha cambiado, migrando al motor Servo escrito con Rust. Probé el perfil a continuación con una versión contemporánea (específicamente, 62.0). Algunos funcionaron, otros no. Mantenlo en mente.


Solo estoy extendiendo la respuesta de kyrenia en esta pregunta. Sin embargo, deshabilitar CSS podría hacer que Jquery no pueda manipular elementos DOM. Utilice QuickJava y los siguientes:

profile.set_preference("network.http.pipelining", True)
profile.set_preference("network.http.proxy.pipelining", True)
profile.set_preference("network.http.pipelining.maxrequests", 8)
profile.set_preference("content.notify.interval", 500000)
profile.set_preference("content.notify.ontimer", True)
profile.set_preference("content.switch.threshold", 250000)
profile.set_preference("browser.cache.memory.capacity", 65536) # Increase the cache capacity.
profile.set_preference("browser.startup.homepage", "about:blank")
profile.set_preference("reader.parse-on-load.enabled", False) # Disable reader, we won't need that.
profile.set_preference("browser.pocket.enabled", False) # Duck pocket too!
profile.set_preference("loop.enabled", False)
profile.set_preference("browser.chrome.toolbar_style", 1) # Text on Toolbar instead of icons
profile.set_preference("browser.display.show_image_placeholders", False) # Don't show thumbnails on not loaded images.
profile.set_preference("browser.display.use_document_colors", False) # Don't show document colors.
profile.set_preference("browser.display.use_document_fonts", 0) # Don't load document fonts.
profile.set_preference("browser.display.use_system_colors", True) # Use system colors.
profile.set_preference("browser.formfill.enable", False) # Autofill on forms disabled.
profile.set_preference("browser.helperApps.deleteTempFileOnExit", True) # Delete temprorary files.
profile.set_preference("browser.shell.checkDefaultBrowser", False)
profile.set_preference("browser.startup.homepage", "about:blank")
profile.set_preference("browser.startup.page", 0) # blank
profile.set_preference("browser.tabs.forceHide", True) # Disable tabs, We won't need that.
profile.set_preference("browser.urlbar.autoFill", False) # Disable autofill on URL bar.
profile.set_preference("browser.urlbar.autocomplete.enabled", False) # Disable autocomplete on URL bar.
profile.set_preference("browser.urlbar.showPopup", False) # Disable list of URLs when typing on URL bar.
profile.set_preference("browser.urlbar.showSearch", False) # Disable search bar.
profile.set_preference("extensions.checkCompatibility", False) # Addon update disabled
profile.set_preference("extensions.checkUpdateSecurity", False)
profile.set_preference("extensions.update.autoUpdateEnabled", False)
profile.set_preference("extensions.update.enabled", False)
profile.set_preference("general.startup.browser", False)
profile.set_preference("plugin.default_plugin_disabled", False)
profile.set_preference("permissions.default.image", 2) # Image load disabled again

¿Qué hace? De hecho, puede ver lo que hace en las líneas de comentarios. Sin embargo, también encontré un par de entradas about: config para aumentar el rendimiento. Por ejemplo, el código anterior no carga la fuente o los colores del documento, pero carga CSS, por lo que Jquery -o cualquier otra biblioteca- puede manipular elementos DOM y no genera un error. (Para una mayor depuración, aún descarga CSS, pero su navegador saltará las líneas que contienen una familia de fuentes especial o una definición de color. Por lo tanto, el navegador descargará y cargará CSS, pero usará los valores predeterminados del sistema en el estilo y renderizará la página más rápido. )

Para obtener más información, consulte este artículo.


Editar (pruebas)

Acabo de hacer una prueba de rendimiento. Realmente no necesita tomarse los resultados en serio ya que hice esta prueba solo una vez, para que tenga una idea.

Hice la prueba en una máquina vieja con un procesador Intel Pentium de 2.2 gHZ, 3 gB de RAM con 4gB de área de intercambio, sistema Ubuntu 14.04 x64.

La prueba consta de tres pasos:

  • Rendimiento de carga del controlador: Los segundos perdidos para cargar el controlador en webdriver módulo.
  • Rendimiento de carga de página: Los segundos perdidos para cargar la página. También incluye la velocidad de Internet, sin embargo, también se incluye el proceso de renderizado.
  • DOM que inspecciona el rendimiento: DOM que inspecciona la velocidad en la página.

Usé esta página como tema e inspeccioné .xxy a como selector de CSS. Luego utilicé un proceso especial uno por uno.

Selenium, Firefox, sin perfil

Driver Loading Performance: 13.124099016189575
Page Loading Performance: 3.2673521041870117
DOM Inspecting Performance: 67.82778096199036

Selenium, Firefox, perfil arriba

Driver Loading Performance: 7.535895824432373
Page Loading Performance: 2.9704301357269287
DOM Inspecting Performance: 64.25136017799377

Editar (Acerca de la decapitación)

Hice una prueba hace quizás un mes, pero no pude tomar los resultados. Sin embargo, quiero mencionar que la carga del controlador, la carga de la página y la velocidad de inspección DOM disminuyen en diez segundos cuando se usa Firefox sin cabeza. Eso fue realmente genial.

Si crees que ha resultado de utilidad nuestro artículo, sería de mucha ayuda si lo compartieras con el resto entusiastas de la programación de este modo contrubuyes a difundir esta información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *