Назад в Центр знаний
Сравнение

Playwright vs Puppeteer: четыре решения до миграции

Сравните протоколы, контексты, трассы и версии Playwright и Puppeteer. Реальная локальная проверка отделяет частичный успех от полной совместимости.

BotBrowser Team

Документация

Нужна структурированная документация по теме Документация?

Эта статья относится к редакционной библиотеке. Для пошаговой настройки, справки и постоянных обновлений переходите сразу в соответствующий раздел docs.

Playwright vs Puppeteer требует выбора контракта автоматизации. Практический вопрос состоит в том, какая библиотека, соединение, сборка браузера и диагностические материалы нужны задаче. Обе библиотеки создают изолированные контексты; ни одна не делает произвольный исполняемый файл автоматически совместимым. BotBrowser предоставляет документированные способы запуска обеих библиотек и управление браузером через профили, но не гарантирует эквивалентность протоколов, не реализует их тестовые среды и не гарантирует принятие сеанса сайтом.

Четыре независимых решения: соединение и нужная операция, состояние и время жизни контекста, диагностические материалы, пара пакет/браузер. Локальная DOM-проверка не проверяет настоящий ввод или производительность.

TL;DR

  • Сначала выберите нужный браузер и операцию. Puppeteer поддерживает Chrome и Firefox через CDP и WebDriver BiDi, а не только CDP для Chrome.
  • Различайте собственное соединение Playwright и connectOverCDP(). Официальный контракт прямо указывает на меньшую полноту работы через CDP.
  • Обе библиотеки разделяют хранилища контекстов, однако контекст сам по себе не создаёт отдельную машину или сетевой выход.
  • Трасса контекста Playwright и временная шкала браузера Puppeteer представляют разные результаты. Имена и размеры файлов не определяют лучшую библиотеку.
  • Фиксируйте пакет, бинарный файл и соединение вместе. Сохраняйте неудавшуюся операцию даже после успеха более узкой DOM-проверки.

Содержание

Выбор по четырём требованиям

Команде, которая переходит с Selenium, сначала пригодится карта практических изменений при выборе альтернативы, затем можно сравнивать эти две библиотеки.

Начинайте с необходимой операции. У команды с PDF-выводом только для Chromium другие условия приёмки, чем у команды с проверками приложения в Chromium, Firefox и WebKit. Удалённое соединение добавляет ещё один контракт. Документация браузеров Playwright и таблица поддержки Puppeteer определяют допустимые сочетания; слово «браузер» в описании сервиса не определяет доступное сочетание.

ТребованиеРешение для PlaywrightРешение для PuppeteerДоказательство перед выбором
Соединение и операцияОбычный запуск/подключение или присоединение к Chromium через CDPChrome или Firefox и подходящий путь CDP/BiDiНужный метод работает через реальное соединение
Состояние контекстаОтветственность за создание, повторное использование и закрытие BrowserContextВызов createBrowserContext() и отличие контекста по умолчаниюОбщее и раздельное состояние соответствуют задаче
ДиагностикаНужны операции браузера или проверки Playwright TestОбъясняет ли временная шкала Chrome этот сбойФайл содержит событие, необходимое для объяснения инцидента
Версии браузераТребования пакета или проверка собственного бинарного файлаСкачанная версия или ответственность за собственную паруВоспроизводимы пакет, бинарный файл, протокол и машина

Неизвестная строка остаётся нерешённым требованием. Открыть удалённую страницу недостаточно, если нужна трассировка контекста или конкретная CDP-команда. Успешный page.goto() доказывает только навигацию в данном запуске, а не остальную поверхность API. Снимок экрана также не доказывает запись тестового утверждения или серверной операции.

Выбор библиотеки и интеграция решают разные задачи. Разбор запуска Puppeteer рассматривает ошибки собственного исполняемого файла и сеанса браузера после выбора Puppeteer. Разбор порядка начальных скриптов Playwright посвящён конкурирующим изменениям до создания документа. Эти вопросы не заменяют проверку задачи и соединения перед выбором библиотеки.

Запишите условие, способное отвергнуть выбор: отсутствие нужного метода в протоколе, неподдерживаемый бинарный файл или отсутствие решающей проверки приложения в диагностическом файле. Предпочтение более крупной экосистемы может влиять на сопровождение, но не является исполнимым условием приёмки. Свяжите его с конкретной операцией и материалами, которые должна поддерживать команда.

Соединение для нужной операции

Описание WebDriver BiDi в Puppeteer охватывает автоматизацию Chrome и Firefox. Firefox по умолчанию использует BiDi, а Chrome использует CDP, поскольку BiDi ещё не покрывает все функции CDP. Там же перечислены неподдерживаемые операции. Поэтому поддержка Firefox не доказывает работу специфичного для Chrome метода в Firefox. Проекту с низкоуровневой операцией Chromium нужно проверить реальную границу протокола.

У Playwright другое разделение. Справочник BrowserType описывает connect() к серверу Playwright и connectOverCDP() к уже работающему Chromium. Для второго прямо указана меньшая полнота по сравнению с протоколом Playwright. Обычный адрес WebSocket не становится автоматически сервером Playwright: сначала определите протокол адресата.

Тот же справочник требует совпадения основной и дополнительной версий Playwright у подключающегося клиента и запускающего сервера. Это условие нельзя переносить на CDP-подключение с другим контрактом. Запишите, появился ли браузер через launch(), сервер Playwright или отдельно запущенный Chromium. Такое происхождение важнее одинаковой схемы URL.

Имя импортируемой библиотеки не доказывает полноту протокола. Puppeteer с BiDi, Puppeteer с Chrome CDP и Playwright через Chromium CDP могут предоставлять разные операции. Если удалённый поставщик контролирует параметры запуска и обновления, его клиентский контракт тоже становится зависимостью. Запрашивайте документированные типы соединений и версии клиентов, не предполагая взаимозаменяемость библиотек для любого адреса.

Формулируйте операции точно. Если нужны взаимодействие со страницей, трасса, команда уровня браузера и очистка контекстов, проверьте все четыре через целевое соединение. Минимальная навигация полезна как подготовка, но её результат должен соседствовать со списком непроверенного. Она не превращает частичную интеграцию в полную поддержку. При неподдерживаемой операции сохраняйте протокол и точную версию пакета.

Состояние контекста и границы изоляции

Документация контекстов Playwright описывает независимые сеансы с изолированным хранилищем. Справочник BrowserContext Puppeteer также описывает отдельные cookie и локальное хранилище, объясняя контекст по умолчанию. Обе библиотеки дают границу состояния для независимых сценариев приложения. Такая граница не создаёт отдельную машину, ОС или квоту.

Полезно сравнивать ответственность за эту границу. Страница в контексте A разделяет соответствующее состояние приложения A, а у B отдельная область хранения. Новая вкладка не равнозначна новому контексту. Закрытие A не означает закрытия всего браузера; сохранение контекста по умолчанию может давать другое время жизни, чем у явно созданных контекстов.

Следующие проверки внутри страницы подходят для собственного localhost fixture. Запускайте их через page.evaluate() каждой библиотеки после перехода к одному источнику fixture. Они проверяют синтетическое состояние, не копируя сеанс аккаунта и не измеряя все механизмы хранения.

await pageA.evaluate(() => {
  localStorage.setItem('fixtureMarker', 'context-A');
  document.cookie = 'fixtureMarker=context-A; Path=/; SameSite=Lax';
});

const readState = () => ({
  cookie: document.cookie,
  local: localStorage.getItem('fixtureMarker'),
});

const a = await pageA.evaluate(readState);
const sibling = await siblingInA.evaluate(readState);
const b = await pageB.evaluate(readState);

Полный наблюдавшийся fixture создавал оба контекста, открывал соседнюю страницу A и закрывал A перед перезагрузкой B. Общее и раздельное состояние показано ниже. Без дополнительных испытаний проверка ничего не устанавливает об IndexedDB, сохранении разрешений, service workers, дисковых профилях и модели процессов. Результат localStorage не сертифицирует всё хранилище, а пустая строка cookie не доказывает разные сетевые выходы.

Учитывайте очистку при выборе. Библиотека может предоставлять правильный API, но проверяющий код случайно переиспользует глобальную страницу или закроет браузер другой задачи. Назначьте владельца каждого контекста и время жизни браузера, охватывающее все использующие его задачи. Разбор жизненного цикла контекстов Playwright раскрывает этот вопрос; сравнение здесь лишь устанавливает, что обе модели контекстов заслуживают проверки.

Нужные диагностические материалы

Справочник Tracing Playwright различает трассировку контекста и Playwright Test. API контекста записывает операции браузера и сетевую активность, но не тестовые утверждения вроде expect(). Если они нужны в записи, рекомендуется трассировка тестовой среды. Вызов context.tracing.start() не добавляет эту среду автоматически в отдельный скрипт.

Справочник Tracing Puppeteer описывает файл для Chrome DevTools или просмотрщика временных шкал. На браузер допускается только одна активная трасса. Её формат и область параллельного использования отличаются от независимой диагностики каждого контекста. Общему браузеру нужен ответственный за трассу; разных имён файлов недостаточно.

Выбирайте материалы по вопросу, на который они должны ответить. Для неудавшейся проверки приложения могут быть важны действие, снимок документа и ожидаемое состояние; для производительности могут потребоваться события временной шкалы. Большой JSON не становится автоматически более полным описанием сбоя, чем маленький ZIP. ZIP также не гарантирует полезного анализа производительности.

Локальная проверка установила наличие записей трассы в ZIP Playwright и событий в разбираемых JSON Puppeteer. Эти утверждения доказывают только структуру файлов. Они не доказывают, что оператор открыл просмотрщик, нашёл конкретный сбой или восстановил распределённую транзакцию. Рабочий процесс трассировки Playwright посвящён записи и разбору; расширения файлов не заменяют этот процесс.

Ограничения протокола важны и здесь. Текущая документация Puppeteer относит Tracing к общим пробелам поддержки BiDi. Однако установленный старый пакет через BiDi к Chrome создал временную шкалу Chrome в этой проверке. Это наблюдение нельзя распространять на Firefox или любое BiDi-соединение. И наоборот, общий перечень возможностей не отменяет реально созданный файл. Для исследования различий сохраняйте пакет, браузер и соединение вместе.

Фиксация пары пакет и браузер

Контракт установки Playwright связывает выпуски с конкретными бинарными файлами и описывает каналы брендированных браузеров. Конфигурация Puppeteer предусматривает загрузку определённого Chrome полным пакетом; таблица поддержки сопоставляет версии пакета и браузера. Фиксация зависимостей и путь исполняемого файла дополняют друг друга.

Разница между puppeteer и puppeteer-core влияет на эксплуатацию. Справочник прямо указывает, что core игнорирует описанные в нём файлы конфигурации и переменные окружения. Проект с core должен выбирать браузер через подходящий API. Копирование конфигурации полного пакета не доказывает смену выбранного бинарного файла.

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

Локально использовались Playwright 1.58.0, puppeteer-core 24.29.1 и обычный Chrome 157.0.8103.79 на macOS arm64. Это явно выбранное сочетание, а не документированная стандартная пара для старого Puppeteer. Актуальные публичные страницы отдельно загружались и указывали 25.17.0. Они служат источником текущего контракта, но не доказывают наличие всех описанных возможностей в установленном старом пакете.

Определите события повторной приёмки. Автообновление браузера, изменение пакета, удалённого сервера или режима запуска могут отменить ранее принятую комбинацию. Повторяйте собственный fixture, проверяйте точную неудавшуюся операцию и сохраняйте прежний результат. Успешная навигация после обновления не доказывает совместимость ввода, записи трассы и очистки. Каждому требованию нужно наблюдение в собственной границе.

Решение в пределах локальных наблюдений

На одной машине одновременно работали три задачи: запуск Playwright, Puppeteer Chrome CDP и Puppeteer Chrome BiDi. Запрошенный пул равнялся 20; фактический составлял 3, поскольку задач было три. Записаны 16 CPU и около 19.8 GB доступной памяти: свободные, неактивные и спекулятивные страницы macOS, без повторного учёта очищаемых страниц. Это не измерение пропускной способности и не испытание удалённых сервисов.

Наблюдавшаяся проверкаPlaywrightPuppeteer Chrome CDPPuppeteer Chrome BiDi
A и соседняя страница читают маркерcontext-Acontext-Acontext-A
B начинается без маркераnull, пустая cookienull, пустая cookienull, пустая cookie
Результат DOM-действия в основном миреappliedappliedapplied
Структура трассыZIP с записями .traceJSON шкалы, 7289 событийJSON шкалы, 7063 событий
B перезагружается после закрытия AЗавершено, маркера нетЗавершено, маркера нетЗавершено, маркера нет
Очистка браузера в этом запускеЗакрытЗакрытЗакрыт

DOM-действие вызывало кнопку fixture из page.evaluate() и читало результат в том же вызове. Его область проверки намеренно уже, чем область теста пользовательского ввода: не проверялись попадание в элемент, доверенный ввод, готовность элемента к действию и автоматическое ожидание. Назвать эту строку успешной поддержкой клика без оговорки означало бы преувеличить результат. Наблюдались управляемое действие скрипта и маркер приложения.

Исходный запуск действий над элементами остаётся неуспешным. После проверки хранилищ CDP сообщил Runtime.callFunctionOn timed out, а BiDi сообщил script.callFunction timed out; тайм-аут протокола составлял 15 секунд. Playwright завершил тот запуск. Последующий тест основного мира прошёл, но не исправил и не перепроверил эти пути. Он уточняет наблюдаемую разницу, не определяя причину, не исправляя пару версий и не позволяя сравнивать надёжность.

В начальной подготовке пул ошибочно рассчитывался лишь по немедленно свободной памяти, что дало один worker. Прерванный запуск сохранён отдельно и не является параллельным сравнением. Затем расчёт включил подходящие компоненты доступной памяти macOS; зарегистрированы максимум три браузера и нулевой остаток. Исправлено планирование эксперимента, а не библиотеки автоматизации.

Результат определяет следующую приёмку. Если реальной задаче нужны действия над элементами, перед миграцией проверьте тот же путь на официально поддерживаемой паре пакета и браузера. Для разделённого состояния, выполнения скриптов страницы и записи шкалы узкий тест полезен только в заявленных условиях. Firefox, WebKit, PDF, удалённые серверы Playwright и утверждения Playwright Test не проверялись.

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

Вопросы и ответы

Puppeteer ограничен Chrome и CDP?

Нет. Официальная документация описывает Chrome и Firefox с CDP и WebDriver BiDi. Доступность метода зависит от выбранных протокола, браузера и версии пакета.

CDP-подключение даёт полный контракт Playwright?

Нет. BrowserType прямо описывает меньшую полноту по сравнению с протоколом Playwright. Проверяйте необходимые операции, не выводя эквивалентность из успешной навигации.

Отдельные контексты означают разные идентичности?

Сами по себе не означают. Изоляция хранилища не доказывает разные машины, сетевые выходы, серверные квоты или разрешения. Обеим библиотекам нужен явный контракт задачи и жизненного цикла.

Какая библиотека быстрее для сбора данных или PDF?

Этот fixture не отвечает на вопрос. В нём нет представительной задачи сбора данных, сравнения PDF и контролируемого измерения времени. Сначала выберите нужные операцию и браузер, затем измерьте конкретную задачу отдельно.

Источники

Практический вывод

Выбирайте Playwright или Puppeteer по соединению, операциям, управлению состоянием, диагностическим материалам и сопровождаемой паре браузер/пакет. Раздельно сохраняйте сбои ввода и успехи DOM-проверок, текущую документацию и старые установленные пакеты. BotBrowser предоставляет документированную интеграцию; контракт автоматизации всё ещё требует собственных доказательств приёмки.

#Playwright#Puppeteer#Browser Automation#браузерные контексты

Выполните ту же проверку в BotBrowser

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