Перейти к основному содержанию
Playwright - это современная библиотека Node.js для автоматизации браузеров, которая поддерживает Chromium, Firefox и WebKit. Надежный набор функций и простой API делают ее отличным выбором для парсинга сложных интерактивных веб-сайтов. Интеграция прокси Catproxy с Playwright осуществляется путем передачи настроек прокси непосредственно в метод browser.newContext() или browser.newPage().

Базовая настройка

Вот как запустить экземпляр браузера Playwright, который направляет весь трафик через наш прокси-шлюз.
Вам понадобится playwright, установленный в вашем проекте: npm install playwright
basic_setup.js
const { chromium } = require('playwright');

// 1. Скопируйте их со страницы «Настройки прокси» вашего прокси
const proxyHost = "proxy.catproxy.net";
const proxyPort = 5555;
const proxyUser = "PROXY_USERNAME";
const proxyPass = "PROXY_PASSWORD";

(async () => {
  console.log('Launching browser with proxy...');

  const browser = await chromium.launch({
    // 2. Укажите настройки прокси в параметрах запуска браузера
    proxy: {
      server: `http://${proxyHost}:${proxyPort}`,
      username: proxyUser,
      password: proxyPass
    },
    headless: false // Для production используйте true
  });

  const context = await browser.newContext();
  const page = await context.newPage();

  console.log('Navigating to IP checker...');
  await page.goto('https://api.ipify.org?format=json');

  // 3. Получите содержимое страницы и проверьте IP-адрес
  const content = await page.textContent('body');
  console.log('Success! Your proxy IP is:', JSON.parse(content).ip);

  await browser.close();
})();
В Playwright учётные данные прокси задаются на уровне браузера или контекста. Все новые страницы в этом контексте будут автоматически использовать те же настройки прокси, что проще, чем аутентификация для каждой страницы в Puppeteer.

Пример из реальной практики: проверка цен на авиабилеты в Google Flights

Цены на авиабилеты - классический пример геозависимых данных. Давайте создадим скрипт для проверки стоимости перелета в одну сторону из Берлина в Лондон на определённую дату, при этом запрос будет выглядеть так, как будто он поступает из Германии (DE).
flights_scraper.js
const { chromium } = require('playwright');

// --- Your Base Credentials ---
const BASE_USERNAME = "PROXY_USERNAME";
const PASSWORD = "PROXY_PASSWORD";
const PROXY_HOST = "proxy.catproxy.net";
const PROXY_PORT = 5555;

// --- Target Information ---
const DEPARTURE_AIRPORT = "BER"; // Berlin
const ARRIVAL_AIRPORT = "LHR"; // London Heathrow
const DEPARTURE_DATE = "2025-11-07"; // YYYY-MM-DD format
const TARGET_URL = `https://www.google.com/travel/flights/search?tfs=CBwQAhoeEgoyMDI1LTExLTA3agcIARIDQkVScgcIARIDTEhSQAFIAXABggELCP___________wGYAQI`; // Note: This is a complex, pre-generated URL for BER-LHR on 2025-08-15
const REGION = "de"; // Germany

(async () => {

  // Dynamically construct the username for the target region
  const proxyUsername = `${BASE_USERNAME}-country-${REGION}`;

  console.log("Launching Playwright browser...");
  const browser = await chromium.launch({
    proxy: {
      server: `http://${PROXY_HOST}:${PROXY_PORT}`,
      username: proxyUsername,
      password: PASSWORD
    }
  });

  const context = await browser.newContext({
    // Set a realistic User-Agent and viewport
    userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36',
    viewport: { width: 1920, height: 1080 },
  });

  const page = await context.newPage();

  console.log(`Navigating to Google Flights via a ${REGION.toUpperCase()} proxy...`);

  try {
    // Navigate and wait for the results to load
    await page.goto(TARGET_URL, { waitUntil: 'load', timeout: 60000 });

    // Selector to find the price of the first non-stop flight
    // This is a complex selector that may change!
    const priceSelector = 'div[role="main"] li[role="listitem"] .YMlIz > div > div:last-child';

    // Wait for the price element to be visible
    await page.waitForSelector(priceSelector, { timeout: 20000 });

    const price = await page.locator(priceSelector).first().textContent();

    console.log(`Success! The cheapest non-stop flight price found is: ${price}`);
    await page.screenshot({ path: `google_flights_${REGION}.png` });
    console.log(`Screenshot saved as 'google_flights_${REGION}.png'`);

  } catch (error) {
    console.error(`An error occurred: ${error.message}`);
    await page.screenshot({ path: 'error_flights.png' });
    console.log("Saved an error screenshot to error_flights.png for debugging.");
  } finally {
    await browser.close();
    console.log("Browser closed.");
  }
})();
Google - очень сложная цель! Структура URL и CSS-селекторы в Google Flights сложны и часто меняются. Этот скрипт демонстрирует техническую интеграцию, но для надёжного крупномасштабного парсинга Google вам потребуется реализовать очень надёжную обработку ошибок и регулярно адаптировать селекторы.

Что демонстрирует этот пример

  • Кросс-браузерная автоматизация: Как использовать мощный API Playwright для управления браузером.
  • Упрощенная настройка прокси в Playwright: Современный подход к установке учётных данных прокси на уровне запуска браузера.
  • Парсинг динамического контента: Как дождаться появления определённых элементов (page.waitForSelector) на странице с интенсивным использованием JavaScript перед извлечением данных.
  • Продвинутые локаторы: Использование API locator в Playwright для более гибкого выбора элементов.