Selenium vs. Puppeteer: Який інструмент обрати?
Порівняння Puppeteer і Selenium допомагає обрати правильний інструмент для вебавтоматизації та тестування. Puppeteer з’явився п’ять років тому й швидко став популярним завдяки своїм потужним можливостям і ефективній роботі в багатьох різних сценаріях використання. З іншого боку, Selenium існує з 2004 року й досі залишається улюбленим інструментом для вебавтоматизації. Він підтримує багато різних мов програмування та систем. Я проведу вас через детальне порівняння цих двох фреймворків, щоб ви могли вирішити, який із них краще відповідає вашим потребам.
Основні можливості та варіанти використання
Selenium
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
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 для тестування інтерфейсу користувача.
- Puppeteer спрощує тестування на найновіших версіях Chromium.
- Ручні процеси тестування, як-от надсилання форм і введення з клавіатури, автоматизуються за допомогою Puppeteer.
- Він також корисний для завдань вебскрапінгу, а для орієнтації доступні детальні інструкції.
Переваги та недоліки
Щоб визначити, який інструмент найкраще підходить саме вам, важливо порівняти переваги та недоліки Puppeteer і Selenium. У цьому розділі розберімо основні сильні та слабкі сторони обох інструментів.
Selenium
Advantages:
- Працює з багатьма браузерами, платформами та мовами програмування.
- Містить вбудовані інструменти, як-от WebDriver, IDE та Grid, для тестування й автоматизації.
- Легко інтегрується з CI/CD для розширення можливостей.
Disadvantages:
- Встановлення може бути складним, оскільки він підтримує кілька платформ, мов і браузерів.
- Не пропонує таких самих можливостей керування продуктивністю, як Puppeteer.
- Вивчати Selenium може бути складно.
Puppeteer
Advantages:
- Використовує протокол DevTools для керування Chrome, широко використовуваним браузером.
- Puppeteer працює швидше, тому що взаємодіє лише з одним браузером і однією мовою.
- Потрібно менше залежностей, оскільки не потрібні окремі драйвери браузера.
- Пропонує інструменти керування продуктивністю, як-от знімки екрана та запис показників завантаження.
Disadvantages:
- Підтримує лише JavaScript для програмування.
- Обмежено роботою лише з браузером Chrome.
Відмінності в налаштуванні та вебскрапінгу
Installation
Налаштування середовищ Puppeteer і Selenium є простим. Ключова відмінність полягає в потрібних бібліотеках. Користувачі Puppeteer можуть встановити його однією командою npm. З іншого боку, користувачі Selenium мають дотримуватися інструкцій зі встановлення для конкретної мови.
Selenium
- npm install selenium-webdriver
- npm install chromedriver
Puppeteer
- 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). Puppeteer уже містить драйвер Chrome, тож немає потреби імпортувати його окремо.
Крок 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(), який можна очікувати через await. Потім він створює нову вкладку браузера за допомогою методу 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:
let quotes = await driver.findElements(By.className('quote'));
let quotesString = "";
for (let quote of quotes) {
let qouteText = await quote.findElement(By.className('text')). getText();
quotesString += `${qouteText} \n`;
}
console.log(quotesString);
Puppeteer:
let quotes = await newTab.evaluate(() => {
let allQuoteDivs = document.querySelectorAll(".quote");
let quotesString= "";
allQuoteDivs.forEach((quote) => {
let qouteText = quote.querySelector(".text").innerHTML;
quotesString += `${qouteText} \n`;
});
return quotesString;
});
console.log(quotes);
Метод evaluate() у Puppeteer дає змогу виконувати функцію в поточному контексті сторінки. Це дозволяє взаємодіяти з елементами поточної сторінки та змінювати їх у Document Object Model (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 особливо корисний, коли критично важлива сумісність між браузерами. Тому уважно зважте свої вимоги, перш ніж вирішувати, який інструмент найкраще відповідає вашим потребам.
Final Words
У цій статті я порівняв два найпопулярніші фреймворки автоматизації: Puppeteer і Selenium. Кожен має унікальні можливості та переваги. Моя мета — допомогти вам визначити конкретні вимоги вашого проєкту та обрати найкращий інструмент.
Якщо ви не впевнені, який інструмент обрати для свого проєкту зі збору даних, перегляньте мої інші порівняння інструментів для вебскрапінгу. Також я пропоную огляд найкращі антидетект-браузери щоб допомогти ухвалювати рішення.
Спробуйте просунуті рішення для вебскрапінгу, які мають вбудовані можливості для спрощення процесу. Якщо ви збираєте дані чи тестуєте вебсайти, існує багато інструментів, що підвищують ефективність!

