Subida y descarga de archivos en Selenium4

En Selenium, la subida y descarga de archivos son necesidades comunes de operaciones automatizadas.

  • Subida de archivos: mediantesend_keys()el método se pasa la ruta del archivo al<input type="file">elemento.

  • Descarga de archivos: configurando las opciones de descarga del navegador, activando la operación de descarga y esperando a que el archivo se descargue.

  • Notas: asegúrese de que la ruta del archivo sea correcta y ajuste el tiempo de espera y la configuración del navegador según las necesidades reales.

A continuación se muestra la explicación detallada de la subida y descarga de archivos:

Subida de archivos

Método Descripción
send_keys("file_path") Pasar la ruta del archivo al<input type="file">elemento para realizar la subida del archivo.
execute_script() Si el elemento de subida de archivos está oculto, se puede usar JavaScript para hacerlo visible.
Herramientas de terceros (como AutoIT) Si la subida de archivos no se realiza mediante<input type="file">puede ser necesario usar herramientas de terceros.

Descarga de archivos

Método Descripción
Configurar las opciones de descarga del navegador ConfigurandoChromeOptionsoFirefoxOptionsla ruta de descarga, deshabilitar avisos, etc.
click() Hacer clic en el botón de descarga para activar la descarga del archivo.
Esperar a que se complete la descarga del archivo Usartime.sleep()o un bucle para verificar si el archivo se ha descargado.
Verificar el archivo descargado Useos.listdir()para verificar los archivos en el directorio de descargas.

Problemas comunes de subida y descarga de archivos

Problema Solución
El elemento de subida de archivos no es visible Use JavaScript para hacer visible el elemento:driver.execute_script("arguments[0].style.display = 'block';", element)
No<input type="file">elemento Use herramientas de terceros (como AutoIT o PyWin32) para simular el cuadro de diálogo de selección de archivos.
Error al configurar la ruta de descarga Asegúrese de que la ruta de descarga exista y sea escribible, y configure correctamente las opciones del navegador.
El archivo no se ha descargado por completo Aumente el tiempo de espera o use un bucle para verificar si el archivo se ha descargado.

Operación de subida de archivos

La subida de archivos es una de las funciones comunes en las aplicaciones web.

En Selenium, la subida de archivos generalmente se realiza mediante<input type="file">el elemento.

Los siguientes son los pasos para implementar la subida de archivos:

Localizar el elemento de subida de archivos: Primero, necesitamos localizar el elemento de entrada de subida de archivos. Generalmente, este elemento es un<input>etiqueta, con tipofile。

Ejemplo

file_input = driver.find_element(By.XPATH, "//input[@type='file']")

Enviar la ruta del archivo: Una vez localizado el elemento de subida de archivos, podemos usarsend_keys()el método para enviar la ruta absoluta del archivo a ese elemento.

Ejemplo

file_input.send_keys("/path/to/your/file.txt")

Esto activará el cuadro de diálogo de selección de archivos y seleccionará automáticamente el archivo especificado.

Enviar el formulario: En algunos casos, después de subir el archivo, es necesario enviar el formulario. Puede hacerlo haciendo clic en el botón de enviar.

Ejemplo

submit_button = driver.find_element(By.XPATH, "//input[@type='submit']")
submit_button.click()

Notas

  • Asegúrese de que la ruta del archivo sea correcta y de que el archivo exista.
  • Si el elemento de subida de archivos está oculto, puede ser necesario usar JavaScript para hacerlo visible.

Operación de descarga de archivos

La operación de descarga de archivos es un poco más compleja en Selenium, porque involucra el cuadro de diálogo de descarga del navegador.

Los siguientes son los pasos para implementar la descarga de archivos:

Configurar la ruta de descarga: Primero, necesitamos configurar la ruta de descarga del navegador. Esto se puede lograr configurando las preferencias del navegador.

Ejemplo

from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_experimental_option("prefs", {
    "download.default_directory": "/path/to/download/directory",
    "download.prompt_for_download": False,
    "download.directory_upgrade": True,
    "safebrowsing.enabled": True
})

driver = webdriver.Chrome(options=chrome_options)

Esto establecerá la ruta de descarga predeterminada del navegador y deshabilitará el aviso de descarga.

Activar la descarga: A continuación, necesitamos encontrar el enlace o botón que activa la descarga y hacer clic en él.

Ejemplo

download_link = driver.find_element(By.XPATH, "//a[@id='downloadLink']")
download_link.click()

Esto activará la descarga del archivo y lo guardará automáticamente en la ruta de descarga configurada anteriormente.

Esperar a que se complete la descarga: Para asegurarnos de que la descarga del archivo se complete, podemos usartime.sleep()o un mecanismo de espera más inteligente.

Ejemplo

import time
time.sleep(10)  # Esperar 10 segundos para asegurar que la descarga se complete

Notas

  • Asegúrese de que la ruta de descarga sea escribible.
  • Si el archivo descargado es grande, puede ser necesario aumentar el tiempo de espera.

Manejar el cuadro de diálogo de descarga

En algunos casos, el navegador puede mostrar un cuadro de diálogo de descarga preguntando al usuario si desea guardar el archivo. Para automatizar esta situación, podemos usar los siguientes métodos:

Usar las preferencias del navegador: Como se mencionó anteriormente, configurando las preferencias del navegador se puede deshabilitar el cuadro de diálogo de descarga.

Ejemplo

chrome_options.add_experimental_option("prefs", {
    "download.prompt_for_download": False
})

Usar AutoIT o herramientas similares: Si no se puede deshabilitar el cuadro de diálogo de descarga mediante las preferencias del navegador, se pueden usar herramientas como AutoIT para automatizar el manejo del cuadro de diálogo.

Ejemplo

import autoit

autoit.win_wait_active("Descarga de archivos")
autoit.control_click("Descarga de archivos", "Button1")

Esto hará clic automáticamente en el botón "Guardar" del cuadro de diálogo de descarga.

Notas

  • El script de AutoIT debe ejecutarse en un entorno Windows.
  • Asegúrese de que el script de AutoIT se ejecute sincronizado con el script de Selenium.

Código de ejemplo

A continuación se muestra un ejemplo completo que demuestra cómo configurar las opciones de descarga del navegador Chrome y descargar un archivo:

Ejemplo

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
import time
import os

# Configurar la ruta de descarga
download_dir = "/path/to/download/directory"

# Configurar opciones de Chrome
chrome_options = webdriver.ChromeOptions()
prefs = {
    "download.default_directory": download_dir,  # Configurar la ruta de descarga
    "download.prompt_for_download": False,       # Deshabilitar el aviso de descarga
    "download.directory_upgrade": True,          # Permitir descargar al directorio especificado
    "safebrowsing.enabled": True                 # Habilitar navegación segura
}
chrome_options.add_experimental_option("prefs", prefs)

# Iniciar el navegador
service = ChromeService(executable_path="/path/to/chromedriver")
driver = webdriver.Chrome(service=service, options=chrome_options)

# Abrir la página web
driver.get("https://www.example.com/download")

# Hacer clic en el botón de descarga
download_button = driver.find_element(By.ID, "download-button")
download_button.click()

# Esperar a que se complete la descarga del archivo
time.sleep(10)  # Ajustar el tiempo de espera según el tamaño del archivo

# Verificar si el archivo se descargó correctamente
files = os.listdir(download_dir)
print("Lista de archivos descargados:", files)

# Cerrar el navegador
driver.quit()
Otras extensiones