Recientemente tuve la idea de usar Selenium con Python para automatizar algunas tareas repetitivas en SAP para un cliente. Y como siempre sucede cuando se ensucia las manos con el código, comencé a encontrar algunos desafíos que nunca vi venir. Después de haber pasado mucho tiempo navegando por Internet tratando de encontrar la solución más adecuada para cada problema, pensé:
¿Qué tan bueno hubiera sido si hubiera encontrado todo lo que necesitaba reunido en un solo lugar, listo para usar?
Entonces, para hacer sus vidas más fáciles, Reuní en este artículo, las respuestas a los desafíos más frecuentes un usuario puede encontrar al usar Selenium junto con fragmentos de código listos para usar escritos en Python.
PD: Si aún no se siente como en casa con los conceptos básicos de Selenium, puede consultar nuestra Guía de introducción al selenio. artículo primero.
¡Y ahora saltemos a la acción!
Cómo descargar archivos usando Selenium WebDriver
Cuando utilice Selenium para automatizar la navegación, es posible que deba descargar archivos. El problema es que, tan pronto como seleccionamos y hacemos clic en el enlace de descarga, aparece una ventana de diálogo nativa que requiere intervención manual. Selenium no tiene control sobre las ventanas de descarga de archivos de su navegador, no puede continuar con el proceso de descarga. Afortunadamente, siempre hay alternativas.
Para solucionar este problema, puede dar autorización a su navegador para descargar archivos automáticamente de antemano y establecer una ubicación de archivo de descarga predeterminada. Esto se puede hacer configurando las preferencias para el perfil de WebDriver (el código a continuación es para un navegador Firefox, es posible que deba adaptarlo para que funcione en otros navegadores):
import os download_dir = os.getcwd()# current working directory profile = webdriver.FirefoxProfile() profile.set_preference("browser.download.folderList", 2) # the custom location specified browser.download.dir is enabled when browser.download.folderList equals 2 profile.set_preference('browser.download.dir', download_dir) profile.set_preference("browser.download.manager.showWhenStarting", False) profile.set_preference("browser.download.dir", path) profile.set_preference('browser.helperApps.neverAsk.saveToDisk', CONTENT_TYPE) profile.set_preference("webdriver_enable_native_events", False) profile.set_preference("browser.download.manager.scanWhenDone",False) profile.set_preference("browser.download.manager.useWindow",False) profile.set_preference("browser.helperApps.alwaysAsk.force",False) profile.update_preferences() browser = webdriver.Firefox(firefox_profile=profile)
Puede que hayas notado el CONTENT_TYPE
variableEn estadística y matemáticas, una "variable" es un símbolo que representa un valor que puede cambiar o variar. Existen diferentes tipos de variables, como las cualitativas, que describen características no numéricas, y las cuantitativas, que representan cantidades numéricas. Las variables son fundamentales en experimentos y estudios, ya que permiten analizar relaciones y patrones entre diferentes elementos, facilitando la comprensión de fenómenos complejos.... que necesita reemplazar. En realidad, corresponde al tipo MIME del archivo que está descargando. Si no está familiarizado con este término, Tipo de Mimica es simplemente un identificador que se utiliza para reconocer un tipo de datos para contenidos en Internet. Tiene el mismo propósito en Internet que las extensiones de archivo en su sistema operativo.
Para simplificarle la tarea, eliminé los tipos MIME de las extensiones más comunes de los documentos web de Mozilla, para facilitar el acceso. En el widget a continuación, encontrará el código que debe usar para obtener el tipo de contenido correspondiente a su extensión de archivo. ¡Puedes usar la consola para probarlo inmediatamente!
Puede obtener el archivo JSONJSON, o JavaScript Object Notation, es un formato ligero de intercambio de datos que es fácil de leer y escribir para los humanos, y fácil de analizar y generar para las máquinas. Se utiliza comúnmente en aplicaciones web para enviar y recibir información entre un servidor y un cliente. Su estructura se basa en pares de clave-valor, lo que lo hace versátil y ampliamente adoptado en el desarrollo de software... copiando y pegando desde el widget de arriba o descargándolo de Github.
Ahora, su WebDriver debería poder realizar descargas sin pedir permiso ni mostrar ventanas de diálogo 😉