Урок 22. Работа с загрузкой и скачиванием файлов с Selenium
Автоматизация загрузки и скачивания файлов — частая задача при работе с веб-сайтами. Selenium позволяет управлять элементами формы для загрузки файлов и контролировать скачивание.
Загрузка файлов на сайт
Для загрузки файлов на веб-странице используется элемент <input type="file">. С помощью метода send_keys() можно указать путь к файлу на вашем компьютере.
from selenium import webdriver
from selenium.webdriver.common.by import By
import os
import time
# Указываем путь к файлу, который будем загружать
file_path = os.path.abspath("test_file.txt")
# Создаём файл для примера, если его нет
if not os.path.exists(file_path):
with open(file_path, "w", encoding="utf-8") as f:
f.write("Файл для загрузки через Selenium")
# Настройка браузера
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://the-internet.herokuapp.com/upload")
# Находим элемент загрузки файла и передаём путь
file_input = driver.find_element(By.ID, "file-upload")
file_input.send_keys(file_path)
time.sleep(5)
# Нажимаем кнопку загрузки
submit_button = driver.find_element(By.ID, "file-submit")
submit_button.click()
time.sleep(5)
# Проверяем результат
result = driver.find_element(By.TAG_NAME, "h3").text
print("Результат:", result) # Должно быть "File Uploaded!"
time.sleep(5)
driver.quit()
Этот пример:
Скачивание файлов с сайта
Для скачивания файлов часто требуется кликнуть на ссылку или кнопку. Важно настроить директорию скачивания в опциях браузера, чтобы файлы сохранялись автоматически.
Приведу полный код примера: сначала загрузка файла, потом скачивание. Для скачивания используем https://the-internet.herokuapp.com/download
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import os
import time
from datetime import datetime
# === Настройка имени файла с датой и временем ===
now = datetime.now()
timestamp = now.strftime("%Y-%m-%d_%H-%M")
FILE = f"ParserTools_{timestamp}.txt"
file_path = os.path.abspath(FILE)
# Создаём файл для примера
with open(file_path, "w", encoding="utf-8") as f:
f.write("ParserTools — обучение и инструменты для парсинга.")
# === Настройка папки для скачивания ===
download_dir = os.path.abspath("downloads")
os.makedirs(download_dir, exist_ok=True)
options = webdriver.ChromeOptions()
prefs = {
"download.default_directory": download_dir,
"download.prompt_for_download": False,
"safebrowsing.enabled": True
}
options.add_experimental_option("prefs", prefs)
driver = webdriver.Chrome(options=options)
driver.maximize_window()
wait = WebDriverWait(driver, 10) # Явное ожидание
# === Часть 1: Загрузка файла ===
driver.get("https://the-internet.herokuapp.com/upload")
time.sleep(1) # пауза для полной загрузки страницы
driver.find_element(By.ID, "file-upload").send_keys(file_path)
time.sleep(0.5) # пауза после выбора файла
driver.find_element(By.ID, "file-submit").click()
time.sleep(1) # пауза после нажатия кнопки
# Ждём появления имени загруженного файла
uploaded_file_element = wait.until(
EC.presence_of_element_located((By.ID, "uploaded-files"))
)
uploaded_file_name = uploaded_file_element.text
print("Загруженный файл:", uploaded_file_name)
time.sleep(1) # пауза перед скачиванием
# === Часть 2: Скачивание файла ===
file_url = f"https://the-internet.herokuapp.com/download/{uploaded_file_name}"
driver.get(file_url)
time.sleep(2) # пауза, чтобы браузер успел инициировать скачивание
# Ждём, пока файл появится в папке downloads
downloaded_file = os.path.join(download_dir, uploaded_file_name)
for i in range(20):
if os.path.exists(downloaded_file):
print("✅ Файл скачан:", downloaded_file)
break
time.sleep(1)
else:
print("⚠ Файл не был скачан.")
driver.quit()
Этот пример:
Советы по работе с файлами
- Для загрузки файлов используйте абсолютный путь к файлу.
- При скачивании настраивайте директорию по умолчанию, чтобы избежать ручного подтверждения.
- Можно комбинировать Selenium с Python для проверки успешной загрузки/скачивания файлов.
Знание работы с загрузкой и скачиванием файлов полезно для автоматизации тестирования веб-приложений и массовой обработки документов на сайтах.
Больше уроков по парсингу на parsertools.ru/lessons.
