Pyppeteer – управление браузером через Puppeteer

онлайн тренер по питону
Онлайн-тренажер Python 3 для начинающих

Теория без воды. Задачи с автоматической проверкой. Подсказки на русском языке. Работает в любом современном браузере.

начать бесплатно

Введение в Pyppeteer

Pyppeteer — это Python-порт популярной JavaScript-библиотеки Puppeteer от Google, предназначенной для управления браузером Chromium/Chrome. Pyppeteer позволяет асинхронно запускать браузер, взаимодействовать с элементами страницы, выполнять JavaScript, сохранять скриншоты и PDF-файлы. Он используется для тестирования, парсинга JavaScript-страниц, автоматизации логинов и других задач, где нужен полный контроль над браузером.


Сравнение Pyppeteer с Selenium и Puppeteer

Критерий Pyppeteer Selenium Puppeteer (JS)
Язык Python Python JavaScript
Асинхронность Да (asyncio) Частично Да
Управление JS Полное Ограниченное Полное
Скорость Высокая Средняя Высокая
Поддержка headless Да Да Да
Совместимость Только Chromium/Chrome Все браузеры Chromium/Chrome

Установка и настройка окружения

bash
pip install pyppeteer

При первом запуске будет автоматически загружен Chromium. При необходимости:

python
import pyppeteer await pyppeteer.install()

Асинхронный запуск браузера и страницы

python
import asyncio from pyppeteer import launch async def main(): browser = await launch(headless=True) page = await browser.newPage() await page.goto('https://example.com') await browser.close() asyncio.run(main())

Навигация и ожидание загрузки контента

python
await page.goto('https://example.com', {'waitUntil': 'networkidle2'})

Поддержка стратегий ожидания: load, domcontentloaded, networkidle0, networkidle2.


Поиск и взаимодействие с элементами

python
element = await page.querySelector('input[name="username"]') await element.type('admin')

Поиск всех элементов:

python
elements = await page.querySelectorAll('a')

Работа с формами, кликами и полями

python
await page.type('#email', 'example@example.com') await page.type('#password', '123456') await page.click('button[type="submit"]')

Получение текста и HTML-структуры

python
content = await page.content() print(content) text = await page.evaluate('document.querySelector("h1").innerText') print(text)

Выполнение JavaScript в браузере

python
title = await page.evaluate('document.title') await page.evaluate('alert("Привет")')

Снятие скриншотов и PDF-экспорт

python
await page.screenshot({'path': 'screenshot.png', 'fullPage': True}) await page.pdf({'path': 'page.pdf', 'format': 'A4'})

Работа в headless и полноэкранном режимах

python
browser = await launch(headless=False, args=['--start-maximized'])

Можно настроить размеры окна:

python
await page.setViewport({'width': 1280, 'height': 800})

Обход защиты от ботов (user-agent, тайминги)

Установка user-agent:

python
await page.setUserAgent('Mozilla/5.0 ...')

Имитирование задержек:

python
await page.type('#search', 'text', {'delay': 100})

Работа с cookies и localStorage

python
cookies = await page.cookies() await page.setCookie({'name': 'session', 'value': 'abc123', 'domain': 'example.com'})

LocalStorage:

python
await page.evaluate('localStorage.setItem("key", "value")')

Поддержка нескольких вкладок и окон

python
page1 = await browser.newPage() page2 = await browser.newPage() await page2.goto('https://google.com')

Интеграция с aiohttp и asyncio

Можно интегрировать с асинхронными HTTP-запросами:

python
import aiohttp async with aiohttp.ClientSession() as session: async with session.get('https://example.com') as response: html = await response.text()

Ограничения и проблемы Pyppeteer

  • Не развивается активно с 2021 года (возможно использование pyppeteer2)

  • Зависимость от Chromium

  • Отсутствие поддержки Firefox

  • Требует Python 3.7+

Альтернатива — Playwright для Python.


Примеры практического применения

  • Автоматизация логина и скрапинг JS-сайтов

  • Проверка визуальных изменений в UI

  • Сохранение динамических отчётов

  • Парсинг данных из таблиц и графиков

  • Тестирование интерфейсов без Selenium


Часто задаваемые вопросы

Что такое Pyppeteer?

Это асинхронная библиотека Python для управления браузером Chromium через Puppeteer API.

Чем отличается Pyppeteer от Selenium?

Pyppeteer использует Chromium и полностью управляет JavaScript-контентом, работает асинхронно. Selenium — кроссбраузерный, но менее гибкий в JS-управлении.

Можно ли использовать Pyppeteer без UI?

Да, через headless=True.

Подходит ли Pyppeteer для веб-скрейпинга?

Да, особенно для сайтов с динамической загрузкой и JavaScript.

Есть ли альтернатива?

Да, Playwright с поддержкой Chromium, Firefox, WebKit.

Полный справочник по ключевым функциям библиотеки pyppeteer для Python

Установка

bash
pip install pyppeteer

Основные концепции

Объект Назначение
launch() Запускает Chromium.
browser.newPage() Открывает новую вкладку.
page.goto(url) Переход на указанный URL.
page.evaluate(js) Выполнение JavaScript на странице.
page.querySelector() / page.querySelectorAll() Поиск элементов по CSS-селектору.
page.type(selector, text) Ввод текста в поле.
page.click(selector) Клик по элементу.
page.screenshot() Создание скриншота.
page.content() Получение HTML-кода.

Простой пример

python
import asyncio from pyppeteer import launch async def main(): browser = await launch(headless=True) page = await browser.newPage() await page.goto('https://example.com') await page.screenshot({'path': 'example.png'}) await browser.close() asyncio.run(main())

Запуск с параметрами

python
browser = await launch( headless=False, args=['--no-sandbox'], defaultViewport={'width': 1280, 'height': 720} )

Получение HTML-контента

python
html = await page.content()

Навигация и ожидания

Метод Описание
await page.goto(url) Переход на страницу.
await page.waitForSelector(selector) Ожидание появления элемента.
await page.waitFor(timeout) Явная задержка.
await page.waitForXPath(xpath) Ожидание по XPath.

Работа с элементами

python
await page.click('button.submit') await page.type('#username', 'admin') await page.keyboard.press('Enter')

Можно комбинировать:

python
await page.focus('#search') await page.keyboard.type('pyppeteer')

Выполнение JavaScript

python
title = await page.evaluate('document.title')

Или передача Python-функции:

python
count = await page.evaluate('''() => { return document.querySelectorAll("a").length; }''')

Работа с cookies

python
cookies = await page.cookies() await page.setCookie({'name': 'session', 'value': 'abc123'})

Скриншоты и PDF

python
await page.screenshot({'path': 'page.png', 'fullPage': True}) await page.pdf({'path': 'page.pdf', 'format': 'A4'})

Загрузка файлов

Pyppeteer не поддерживает <input type="file"> напрямую как Selenium, но можно задать значение:

python
input_elem = await page.querySelector('input[type=file]') await input_elem.uploadFile('path/to/file.txt')

Перехват запросов (intercept requests)

python
await page.setRequestInterception(True) page.on('request', lambda req: asyncio.ensure_future(req.abort() if req.resourceType == 'image' else req.continue_()))

Обработка всплывающих окон (dialogs)

python
page.on('dialog', lambda dialog: asyncio.ensure_future(dialog.dismiss()))

Закрытие браузера

python
await browser.close()

Особенности и ограничения

  • Pyppeteer работает только в асинхронном режиме.

  • Он загружает Chromium автоматически при первом запуске (около 100+ МБ).

  • Поддерживает безголовый и полноэкранный режимы.

  • Подходит для парсинга JavaScript-сайтов, которых не видно через requests/BeautifulSoup.


Когда использовать Pyppeteer

  • Когда необходимо рендерить JS-контент (например, React, Vue, Angular).

  • Для автоматизации форм, логинов, нажатий.

  • Для создания скриншотов, PDF-отчётов и UI-тестов.

  • Для анализа поведения элементов, недоступных через обычный HTML.


Заключение: Pyppeteer как современный инструмент автоматизации на Python

Pyppeteer предоставляет мощные возможности для управления браузером из Python-кода. Благодаря асинхронной архитектуре, полной поддержке JavaScript и headless-режиму, он идеально подходит для автоматизации взаимодействия с веб-страницами, проверки интерфейсов, сбора данных и тестирования. Несмотря на ограничения поддержки, библиотека остаётся востребованной и эффективной в задачах браузерной автоматизации.