перейти к содержанию

Как загружать файлы с помощью Playwright и Python

Если вам нужно автоматизировать загрузку файлов с веб-сайтов, библиотека Playwright для Python облегчит это. Playwright позволяет программно запускать и управлять настоящим браузером. Вы можете переходить на веб-страницы, взаимодействовать с элементами и запускать загрузки, как это делает пользователь-человек.

В этом руководстве мы расскажем, как использовать Playwright на Python для загрузки файлов из Интернета. Мы рассмотрим два метода:

  1. Нажатие на ссылку/кнопку для скачивания напрямую
  2. Извлечение URL-адреса загрузки и использование запросов

Мы также рассмотрим несколько советов и рекомендаций, которые помогут сделать автоматизацию загрузки надежной и эффективной. Давайте начнем!

Запуск браузера и переход на страницу загрузки

Сначала убедитесь, что у вас установлен Playwright. Вы можете установить его с помощью pip:

pip install playwright

Теперь давайте напишем код Python для запуска экземпляра браузера и перехода на веб-страницу, содержащую файл, который мы хотим загрузить. Вот базовый пример:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    page = browser.new_page()
    page.goto("https://example.com/download")

    # Rest of code here

    browser.close()

Этот код запускает новое окно браузера Chromium (вы также можете использовать Firefox или WebKit) и переходит к https://example.com/download, headless=False Аргумент делает браузер видимым, чтобы вы могли видеть, что происходит.

В большинстве случаев загрузить файл так же просто, как щелкнуть ссылку или кнопку на странице. С Playwright вы можете автоматизировать этот процесс.

Допустим, на странице загрузки есть кнопка с идентификатором «download-btn», которая запускает загрузку файла при нажатии. Вот как мы можем щелкнуть по нему с помощью Playwright:

download_button = page.locator("#download-btn")
download_button.click()

Ассоциация locator Метод находит элемент на странице на основе селектора (в данном случае селектора идентификатора). Мы сохраняем ссылку на элемент кнопки в download_button переменная. Затем мы просто вызываем click() на нем, чтобы имитировать щелчок мышью.

Это все, что нужно! Браузер автоматически начнет загрузку и сохранит файл. По умолчанию он будет сохранен в папке загрузок по умолчанию в вашей системе.

Если ссылка для скачивания является <a> тег вместо кнопки, вы можете использовать тот же подход, чтобы нажать на него:

download_link = page.locator("a.download-link")
download_link.click()

Ожидание завершения загрузки

При коротких загрузках файл, вероятно, будет сохранен практически мгновенно. Но для файлов большего размера вам, возможно, придется дождаться завершения загрузки, прежде чем продолжить работу со сценарием.

Драматург дает полезную информацию. expect_download метод, позволяющий дождаться завершения загрузки. Вот как вы можете его использовать:

# Start waiting for the download
with page.expect_download() as download_info:
    download_button.click()

# Wait for the download to finish
download = download_info.value

Это говорит Playwright дождаться следующей загрузки, которая начнется после этой строки. Когда ты звонишь click() внутри with блокировать, Playwright автоматически дождется завершения загрузки, прежде чем продолжить.

Готовый download объект имеет некоторые полезные свойства, такие как download.path который возвращает полный путь, по которому был сохранен файл.

Загрузка файлов с использованием URL-адреса и запросов

Иногда нажатие ссылки или кнопки загрузки не приводит к загрузке файла, а открывает его в браузере. В этом случае вам потребуется получить фактический URL-адрес загрузки и получить данные файла вручную.

Вы можете извлечь URL-адрес из элементов ссылки следующим образом:

download_url = page.locator("a.download-link").get_attribute("href")

Это находит <a> элемент с классом "download-link" и получает значение его href атрибут, который содержит URL-адрес.

Получив URL-адрес, вы можете использовать библиотеку запросов для загрузки данных файла. Запросы на первую установку, если у вас ее еще нет:

pip install requests

Затем добавьте этот код в свой скрипт:

import requests

# Download the file data
file_data = requests.get(download_url).content

# Save the data to a local file
with open("downloaded_file.pdf", "wb") as file:
    file.write(file_data)

При этом запрос GET отправляется на URL-адрес загрузки, извлекаются необработанные данные файла и сохраняются в локальном файле с именем «downloaded_file.pdf». "wb" Режим гарантирует, что файл будет записан в двоичном формате, что необходимо для таких файлов, как PDF-файлы и изображения.

Настройка места загрузки файлов

По умолчанию Playwright загружает файлы в стандартную папку загрузок вашей системы. Если вы хотите указать собственное местоположение, вы можете передать downloads_path аргумент при запуске браузера:

browser = p.chromium.launch(downloads_path="/path/to/download/folder")

Все файлы, загруженные этим экземпляром браузера, будут сохранены в указанной папке.

Обработка различных типов файлов

Основной процесс загрузки одинаков для всех типов файлов. Однако вам может потребоваться немного адаптировать код в зависимости от типа файла.

Например, при сохранении необработанных данных файла с помощью requests, обязательно откройте локальный файл в соответствующем режиме:

  • Для текстовых файлов (TXT, CSV и т. д.) используйте "w" Режим
  • Для двоичных файлов (PDF, XLSX, JPG и т. д.) используйте "wb" Режим

Если вы извлекаете URL-адреса загрузки из ссылок на странице, обратите внимание на расширение файла в URL-адресе, чтобы знать, как сохранить его локально. Вы также можете посмотреть Content-Type заголовок в ответе на загрузку, чтобы определить тип файла.

Устранение проблем с загрузкой

Загрузка иногда может завершаться сбоем по разным причинам. Вот несколько вещей, которые следует проверить, если ваш скрипт неправильно загружает файлы:

  • Прежде чем пытаться получить доступ к файлу или сохранить его, убедитесь, что вы ждете завершения загрузки. Использовать expect_download для этого.
  • Убедитесь, что ваш локатор находит на странице правильную ссылку/кнопку для скачивания. Распечатайте текст элемента или атрибуты для проверки.
  • Обращайте внимание на любые ошибки или непредвиденное поведение в окне браузера, особенно при работе в неавтономном режиме. Возможно, вам придется добавить задержки или дождаться появления определенных элементов, прежде чем нажимать.
  • Проверьте сетевую активность в инструментах разработчика браузера, чтобы узнать, делается ли запрос на загрузку и каков ответ сервера. Вы также можете зарегистрировать URL-адрес загрузки и убедиться, что он правильный.

Заключение

Загрузка файлов с помощью Playwright и Python — мощный метод автоматизации извлечения данных с веб-сайтов. С помощью всего лишь нескольких строк кода вы можете запустить браузер, переходить на страницы загрузки, нажимать ссылки и кнопки для запуска загрузки и программно извлекать файлы.

Если вам нужно загружать файлы для сбора наборов данных, резервного копирования веб-контента, аудита ресурсов веб-сайта или для любых других целей, Playwright сделает это простым и гибким. Объедините его с другими библиотеками Python, такими как запросы, и вы сможете создать надежную систему загрузки.

Ключевые вещи, которые следует помнить:

  • Запустите браузер с помощью sync_playwright и перейдите на страницу загрузки
  • Найдите и нажмите ссылку/кнопку для скачивания, используя page.locator(...).click()
  • Подождите, пока загрузка завершится с помощью expect_download
  • Альтернативно извлеките URL-адрес загрузки и используйте requests.get(...).content чтобы получить данные файла
  • Сохраняйте загруженные файлы в двоичном режиме для нетекстовых форматов.

С помощью этих методов вы сможете легко автоматизировать загрузку файлов с любого веб-сайта. Приятной загрузки!

Присоединяйтесь к беседе

Ваш электронный адрес не будет опубликован. Обязательные поля помечены * *