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)
Puede desactivar images / css usando el complemento de la barra de herramientas de Web Developer.
https://addons.mozilla.org/en-US/firefox/addon/web-developer/
ir a CSS-> Deshabilitar e Imágenes-> Deshabilitar
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.