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.