Багато хто знає Playwright як інструмент для тестувальників. Але його справжня сила — у здатності імітувати дії людини в браузері, що відкриває безмежні можливості для автоматизації. Забудьте про нудне заповнення форм, завантаження файлів чи збір даних — усе це може робити за вас скрипт.

У цій статті ми напишемо простого, але ефективного бота на Playwright, який буде:
1. Відкривати браузер.
2. Заходити на сторінку реєстрації.
3. Генерувати унікальні дані для нового акаунта.
4. Заповнювати форму та завантажувати аватарку.
5. Зберігати логін та пароль у файл.
6. Робити це паралельно у кількох вікнах для максимальної швидкості.

Крок 1: Налаштування проєкту

На відміну від тестування, для простої автоматизації нам не потрібен тест-ранер. Ми встановимо Playwright як звичайну бібліотеку.

1. Створіть нову папку для проєкту та відкрийте її в терміналі.
2. Ініціалізуйте `package.json`:

bashnpm init -y

3. Встановіть Playwright:

bashnpm install playwright

Цього достатньо, щоб почати.

Крок 2: План та написання скрипта

Створимо файл `bot.js` і почнемо писати логіку. Наш бот буде виконувати дії послідовно, як це робила б людина.

Важливо: Оскільки у нас немає реального сайту для прикладу, ми будемо використовувати уявні URL та селектори. Вам потрібно буде замінити їх на реальні селектори з сайту, який ви автоматизуєте.

Ось повний код скрипта:

javascriptconst { chromium } = require('playwright');
const fs = require('fs');

async function createAccount() {
  const browser = await chromium.launch({ headless: false });
  const context = await browser.newContext();
  const page = await context.newPage();

  try {
    console.log('Переходимо на сторінку реєстрації...');
    await page.goto('https://example-registration-site.com/register');

    const username = `user_${Date.now()}`;
    const email = `${username}@example.com`;
    const password = `P@ssword${Math.floor(Math.random() * 1000)}`;
    const avatarPath = 'avatar.png';

    console.log(`Генеруємо акаунт: ${username} / ${password}`);

    await page.locator('#username').fill(username);
    await page.locator('#email').fill(email);
    await page.locator('#password').fill(password);
    await page.locator('#confirm_password').fill(password);

    await page.locator('input[type="file"]').setInputFiles(avatarPath);

    await page.locator('button[type="submit"]').click();

    await page.waitForSelector('.success-message', { timeout: 10000 });
    console.log(`Акаунт ${username} успішно створено!`);

    const credentials = `Логін: ${username}\nПароль: ${password}\n---\n`;
    fs.appendFileSync('accounts.txt', credentials);

  } catch (error) {
    console.error('Сталася помилка під час створення акаунта:', error.message);
    await page.screenshot({ path: `error_${Date.now()}.png` });
  } finally {
    await browser.close();
  }
}

async function runInParallel(numberOfAccounts) {
  const promises = [];
  for (let i = 0; i < numberOfAccounts; i++) {
    promises.push(createAccount());
  }

  await Promise.all(promises);
  console.log(`\nЗавершено створення ${numberOfAccounts} акаунтів. Дані збережено у accounts.txt`);
}

runInParallel(3);

Крок 3: Підготовка та запуск

1. Створіть файл `bot.js` та скопіюйте в нього код вище.
2. Знайдіть зображення, назвіть його `avatar.png` і покладіть у ту ж папку, де лежить `bot.js`.
3. Замініть URL та селектори (`#username`, `#email` і т.д.) на реальні дані з сайту, який ви хочете автоматизувати. Щоб їх знайти, відкрийте сайт, натисніть F12 (Інструменти розробника), виберіть елемент і скопіюйте його селектор.
4. Запустіть скрипт у терміналі:

bashnode bot.js

Ви побачите, як відкриються три вікна браузера, і в кожному з них скрипт буде виконувати реєстрацію. Після завершення у вашій папці з'явиться файл `accounts.txt` з логінами та паролями.

Висновок

Як бачите, Playwright дозволяє перетворити складну рутинну задачу на простий скрипт. Цей підхід можна масштабувати: додавати роботу з проксі, інтегрувати сервіси для розпізнавання капчі, генерувати більш реалістичні дані та багато іншого.

Головне — пам'ятати про етичну сторону автоматизації: не створюйте навантаження на сервери та поважайте правила сайтів, з якими працюєте.