Selenium против Puppeteer: Что лучше использовать?
Сравнение Puppeteer и Selenium помогает выбрать подходящий инструмент для веб-автоматизации и тестирования. Puppeteer появился пять лет назад и быстро стал популярным благодаря отличным возможностям и хорошей работе во множестве разных сценариев использования. С другой стороны, Selenium существует с 2004 года и по-прежнему остается одним из фаворитов для веб-автоматизации. Он может работать со многими разными языками программирования и системами. Я проведу вас через подробное сравнение этих двух фреймворков, чтобы вы могли решить, какой из них лучше подходит для ваших задач.
Основные возможности и сценарии использования
Селен
Selenium - это инструмент для тестирования, который работает не только с Chrome и Chromium, но и поддерживает Firefox, Safari, Opera и Microsoft Edge. Скрипты Selenium можно писать на JavaScript, Ruby, C#, Java или Python, что позволяет разработчикам запускать продвинутые тесты на предпочитаемых языках и проверять разные браузеры с помощью одного инструмента.
У Selenium есть дополнительные компоненты, такие как Selenium WebDriver, Selenium IDE и Selenium Grid. Эти расширения делают Selenium еще мощнее и помогают пользователям закрывать разные требования к тестированию.
Selenium используется для различных задач, таких как:
- Автоматизированное тестирование.
- Тестирование веб-приложений.
- Тестирование производительности веба.
- Тестирование производительности.
- Извлечение данных (вы можете узнать, как скрейпить веб с помощью Python, в нашем подробном руководстве по Selenium).
Кукловод
Puppeteer is mainly a Node.js library designed for automated testing. Google developed it to control Chrome and Chromium using the DevTools Protocol.
В отличие от Selenium, который работает со многими языками программирования, Puppeteer ориентирован только на JavaScript. Это как пульт дистанционного управления для Chrome, который предлагает специфичные структуры управления. Puppeteer упрощает тестирование за счет фокуса на JavaScript и Chrome, в отличие от Selenium, у которого более широкий подход.
Puppeteer широко используется разработчиками для разных задач:
- Тестирование расширений Chrome упрощается с Puppeteer.
- Он помогает делать скриншоты и создавать PDF для UI-тестирования.
- Puppeteer упрощает тестирование на самых новых версиях Chromium.
- Ручные тестовые сценарии, такие как отправка форм и ввод с клавиатуры, автоматизируются с помощью Puppeteer.
- Он также удобен для задач веб-скрейпинга, а для ориентира доступны подробные руководства.
Преимущества и недостатки
Чтобы понять, какой инструмент лучше всего подходит под ваши задачи, важно сравнить плюсы и минусы Puppeteer и Selenium. В этом разделе разберем основные преимущества и недостатки обоих инструментов.
Селен
Advantages:
- Работает со многими браузерами, платформами и языками программирования.
- Включает встроенные инструменты, такие как WebDriver, IDE и Grid, для тестирования и автоматизации.
- Легко интегрируется с CI/CD, расширяя возможности.
Disadvantages:
- Установка может быть сложной, поскольку поддерживаются несколько платформ, языков и браузеров.
- Не предлагает тех же возможностей по управлению производительностью, что и Puppeteer.
- Изучение Selenium может быть непростым.
Кукловод
Advantages:
- Использует протокол DevTools для управления Chrome, широко используемым браузером.
- Puppeteer работает быстрее, потому что использует только один браузер и один язык.
- Требует меньше зависимостей, поскольку не нужны отдельные драйверы браузеров.
- Предлагает инструменты управления производительностью, такие как скриншоты и запись производительности загрузки.
Disadvantages:
- Поддерживает только JavaScript.
- Ограничен работой только с браузером Chrome.
Различия в настройке и веб-скрейпинге
Установка
Настроить среды Puppeteer и Selenium несложно. Ключевое отличие заключается в необходимых библиотеках. Пользователи Puppeteer могут установить его одной командой через npm. С другой стороны, пользователям Selenium нужно следовать инструкциям по установке, специфичным для языка.
Селен
- npm install selenium-webdriver
- npm install chromedriver
Кукловод
- npm install puppeteer
Управление браузером и веб-скрейпинг
Оба инструмента позволяют управлять веб-браузерами через код. Это можно использовать, чтобы извлекать динамический контент со страницы. Давайте сравним, как выполнять ключевые задачи, например запуск headless-экземпляра Chrome, переход на веб-страницу, ожидание загрузки контента и его извлечение.
Будем использовать http://quotes.toscrape.com/js/ для нашего скрейпинга. Это динамическая страница, где цитаты загружаются через JavaScript. Цитаты отображаются в <DIV> элементов, каждый с классом quote.
Шаг 1 — зависимости и настройка целевого сайта
Selenium:
- const { Builder, By, Key, until } = require(‘selenium-webdriver’);
- const chrome = require(‘selenium-webdriver/chrome’);
- const url = ‘http://quotes.toscrape.com/js/';
Puppeteer:
- const puppeteer = require(‘puppeteer’);
- const url = ‘http://quotes.toscrape.com/js/';
Selenium работает с разными браузерами и требует соответствующие драйверы (например, Chrome drivers). Puppeteer уже включает Chrome driver, поэтому импортировать его отдельно не нужно.
Шаг 2 — запуск headless-сеанса Chrome и переход по нужному URL
Selenium:
- let driver = await new Builder().forBrowser(‘chrome’) .setChromeOptions(new chrome.Options().headless()).build();
- await driver.get(url);
Puppeteer:
- const headlessBrowser = await puppeteer.launch({ headless: true });
- const newTab = await headlessBrowser.newPage();
- await newTab.goto(url);
Puppeteer запускает браузер с помощью асинхронного метода `launch()`. Затем он создает новую вкладку браузера с помощью метода `newPage()`. После этого вкладка может перейти по любому URL с помощью метода `goto()`.
В отличие от этого, Selenium использует конструктор Builder(), чтобы создать новый экземпляр Builder, а затем применяет конкретные параметры. Наконец, метод build() создает и возвращает новый экземпляр сессии webdriver.
Помните, что await-вызовы нужно помещать внутрь асинхронной функции.
Шаг 3 — ожидание загрузки динамического контента.
Теперь сравним, как Puppeteer и Selenium обрабатывают ожидание загрузки конкретного JavaScript-контента. Приведенный ниже код демонстрирует ожидание <Div> элемента с классом quote для загрузки.
Selenium:
- await driver.wait(until.elementLocated(By.className(‘quote’)));
Puppeteer:
- await newTab.waitForSelector(‘.quote’);
В Puppeteer вы используете waitForSelector() метод для ожидания загрузки определенного элемента. В Selenium для того же сценария используют метод wait() и свойство until.
Шаг 4 — извлечение цитат
В Puppeteer вы используете querySelectorAll() метод для выбора и получения списка всех соответствующих элементов по указанным CSS-селекторам. В свою очередь, Selenium предлагает метод `findElements()` для получения нужных элементов, соответствующих заданным локаторам `By`.
Selenium:
пусть quotes = ожидайте driver.findElements(По ссылке.className('quote'));
пусть quotesString = "";
для (пусть quote из quotes) {
пусть qouteText = ожидайте quote.findElement(По ссылке.className('text')). getText();
quotesString += `${qouteText} \n`;
}
консоль.журнал(quotesString);
Puppeteer:
пусть quotes = ожидайте newTab.evaluate(() => {
пусть allQuoteDivs = документ.querySelectorAll(".quote");
пусть quotesString= "";
allQuoteDivs.forEach((quoteпрокси {
пусть qouteText = quote.querySelector(".text").innerHTML;
quotesString += `${qouteText} \n`;
});
возврат quotesString;
});
консоль.журнал(quotes);
Метод `evaluate()` в Puppeteer позволяет запускать функцию прямо в контексте текущей страницы. Это дает возможность взаимодействовать с элементами объектной модели документа (DOM) текущей страницы и изменять их. В итоге из функции можно вернуть значение, например `quotesString` в этом случае.
Шаг #5 — закрытие браузера
В Puppeteer для завершения экземпляра браузера используется метод close(), тогда как Selenium предлагает метод quit() для выхода из экземпляра браузера и завершения сессии драйвера.
Selenium:
- await driver.quit();
Puppeteer:
- headlessBrowser.close();
Puppeteer vs. Selenium: Что лучше в 2025 году
Puppeteer и Selenium — два популярных инструмента для автоматизации веб-браузеров, но между ними есть несколько ключевых различий. Вот краткий разбор:

Что выбрать?
Выбор между Puppeteer и Selenium зависит от ваших конкретных задач. Если вы в основном работаете с Chrome, Puppeteer - лучший вариант. Его удобные функции дают отличный контроль над браузером, делая настройку тестов более эффективной. Кроме того, Puppeteer больше ориентирован на веб-автоматизацию, что удобно для задач вроде веб-краулинга и скрейпинга.
Однако если вам нужно работать с разными браузерами и языками программирования, выбирайте Selenium. Его WebDriver поддерживает различные браузеры и позволяет напрямую взаимодействовать с ними. Это расширяет ваши возможности тестирования без дополнительных инструментов. Я обнаружил, что Selenium особенно полезен, когда критична кроссбраузерная совместимость. Поэтому внимательно оцените свои требования, прежде чем решать, какой инструмент лучше всего подходит под ваши задачи.
Заключительные слова
В этой статье я сравнил две самые популярные платформы автоматизации: Puppeteer и Selenium. У каждой есть свои уникальные возможности и преимущества. Моя цель — помочь вам определить требования вашего конкретного проекта и выбрать наиболее подходящий инструмент.
Если вы не уверены, какой инструмент использовать для вашего проекта по сбору данных, посмотрите мои другие сравнения инструментов для веб-скрейпинга. Я также даю обзор топ антидетект-браузеров чтобы помочь принять решение.
Стоит попробовать продвинутые решения для веб-скрейпинга, которые уже имеют встроенные функции для упрощения процесса. Независимо от того, собираете ли вы данные или тестируете веб-сайты, существует множество инструментов, которые помогут повысить эффективность!

