with scraping python css firefox selenium-webdriver

scraping - scrape with selenium python



No quiero que las imágenes se carguen y CSS se renderice en Firefox en las pruebas de Selenium WebDriver con Python (5)

Estoy usando Selenium 2 con enlaces de python para buscar algunos datos del sitio de nuestro socio. Pero, en promedio, me lleva alrededor de 13 segundos realizar esta operación.

Estaba buscando una manera de desactivar las imágenes CSS y flash, etc.

Estoy usando Firefox 3.6 y también uso pyvirtualdisplay para evitar la apertura de la ventana de Firefox. Cualquier otra optimización para acelerar Firefox también será útil.
Ya he probado las opciones de network.http.* Pero no ayuda mucho.

Y también establece los permissions.default.image = 2


Desafortunadamente, la opción firefox_profile.set_preference(''permissions.default.image'', 2) ya no parece funcionar para desactivar las imágenes con la última versión de Firefox - [por razones, vea la respuesta de Alecxe a mi pregunta No se pueden desactivar las imágenes en Selenium / Firefox ]

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

Mi código de 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)

Desactivar CSS (y creo que flash) aún 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)


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.


Para todos los interesados ​​en seguir usando el enfoque directo original sugerido por Anupam:

Simplemente instale Firefox versión 20.0.1 ( https://ftp.mozilla.org/pub/firefox/releases/20.0.1/ ) - funciona perfectamente bien.

También pueden funcionar otras versiones (versiones 32 y superiores y versiones 3.6.9 y inferior NO funcionan)



Solo extiendo la respuesta de kyrenia en esta pregunta. Sin embargo, deshabilitar el CSS puede hacer que Jquery no pueda manipular elementos DOM. Use 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? En realidad, puedes ver lo que hace en las líneas de comentarios. Sin embargo, también he encontrado 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 depuración adicional, aún descarga CSS, pero su navegador saltará las líneas que contienen una definición especial de familia de fuentes o colores. De modo que el navegador descargará y cargará CSS, pero utilizará los ajustes predeterminados del sistema y la hará más rápida. )

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

Editar (Pruebas)

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

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

La prueba toma tres pasos:

  • Rendimiento de carga del controlador: los segundos perdidos para cargar el controlador en el módulo del webdriver .
  • Rendimiento de carga de página : los segundos perdidos para cargar la página. También incluye la velocidad de Internet, sin embargo, el proceso de renderizado también está incluido.
  • Desempeño de inspección DOM: DOM que inspecciona la velocidad en la página.

Utilicé esta página como asunto e inspeccioné .xxy a como selector de CSS. Luego usé un proceso especial uno por uno.

Selenio, Firefox, sin perfil

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

Selenio, Firefox, perfil de arriba

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

Editar (Acerca de la falta de cabeza)

Hice una prueba tal vez hace 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 del DOM disminuyen en menos de diez segundos cuando Firefox se usa sin cabeza. Eso fue realmente genial.