Обработка анти-скрейпинг защиты

Puppeteer — это инструмент для автоматизации браузера, основанный на Chromium. Он часто используется для скрейпинга данных с веб-сайтов, однако многие сайты используют различные методы защиты, чтобы предотвратить автоматические запросы. Одним из таких методов является анти-скрейпинг защита. Эта защита может быть реализована в разных формах, таких как использование CAPTCHA, динамическая подгрузка данных, блокировка по IP или анализ поведения пользователя. В этой статье рассмотрены основные способы обхода анти-скрейпинг механизмов с помощью Puppeteer.

  1. Использование случайных таймаутов

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

Пример:

const puppeteer = require(&

async function visitPage() { const browser = await puppeteer.launch(); const page = await browser.newPage();

// Симуляция случайных задержек async function randomDelay() { const delay = Math.floor(Math.random() * (5000 - 1000 + 1)) + 1000; await page.waitForTimeout(delay); }

await page.goto('https://example.com'); await randomDelay(); await page.click('button#submit'); await randomDelay();

await browser.close(); }

visitPage();

Задержки между действиями создают естественные паузы, которые уменьшают вероятность блокировки.

Сайты могут отслеживать браузеры по их User-Agent и Cookie, чтобы блокировать или изменять поведение в зависимости от того, что они воспринимают как автоматическое поведение. Один из способов обойти эту защиту — это изменять User-Agent и управлять Cookie.

Пример изменения User-Agent:

const puppeteer = require('puppeteer');

async function visitPage() { const browser = await puppeteer.launch(); const page = await browser.newPage();

// Установка случайного User-Agent const userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'; await page.setUserAgent(userAgent);

await page.goto('https://example.com');

await browser.close(); }

visitPage();

Также можно работать с Cookies, чтобы сохранять сессии и имитировать активность реальных пользователей.

Пример работы с Cookies:

const puppeteer = require('puppeteer');

async function visitPage() {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  const cookies = [{
    'name': 'sessionid',
    'value': 'your_session_id',
    'domain': 'example.com'
  }];
  await page.setCookie(...cookies);

  await page.goto('https://example.com');

  await browser.close();
}

visitPage();

  1. Эмуляция мобильных устройств

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

Пример эмуляции мобильного устройства:

const puppeteer = require('puppeteer');

async function visitPage() { const browser = await puppeteer.launch(); const page = await browser.newPage();

// Эмуляция мобильного устройства const iPhone = puppeteer.devices['iPhone 6']; await page.emulate(iPhone);

await page.goto('https://example.com'); await page.screenshot({ path: 'screenshot.png' });

await browser.close(); }

visitPage();

Эмуляция мобильных устройств помогает обойти фильтрацию по типу устройства и обеспечивает большую анонимность в действиях.

  1. Обход CAPTCHA с помощью Puppeteer

Веб-сайты используют CAPTCHA для предотвращения автоматических действий. Обход CAPTCHA в Puppeteer возможен, но это сложный процесс, который требует дополнительных инструментов, таких как сторонние сервисы решения CAPTCHA (например, 2Captcha или Anti-Captcha).

Пример использования сервиса 2Captcha для решения CAPTCHA:

const puppeteer = require('puppeteer'); const axios =
require('axios');

async function solveCaptcha(page) { const captchaFrame = await page.frames().find(f => f.url().includes('captcha')); const captchaImage = await captchaFrame.$('img'); const captchaBase64 = await captchaImage.screenshot({ encoding: 'base64' });

const response = await axios.post('http://2captcha.com/in.php', { key: 'your_2captcha_api_key', method: 'base64', body: captchaBase64, json: 1 });

const captchaId = response.data.request;

const result = await axios.get(http://2captcha.com/res.php?key=your_2captcha_api_key&action=get&id=${captchaId}&json=1); const captchaSolution = result.data.request;

await captchaFrame.type('input[name="captcha"]', captchaSolution); await captchaFrame.click('button[type="submit"]'); }

async function visitPage() { const browser = await puppeteer.launch(); const page = await browser.newPage();

await page.goto('https://example.com'); await solveCaptcha(page);

await page.waitForNavigation(); await browser.close(); }

visitPage();

Этот код решает CAPTCHA через API 2Captcha, что позволяет автоматизировать процесс взаимодействия с защищенными страницами.

  1. Использование Proxy-серверов

Для предотвращения блокировок по IP можно использовать proxy-серверы, которые обеспечат анонимность и изменение IP-адреса при каждом запросе. Это особенно важно при большом объеме запросов к сайту. Puppeteer позволяет использовать proxy через параметр –proxy-server при запуске браузера.

Пример использования proxy:

const puppeteer = require('puppeteer');

async function visitPage() { const browser = await puppeteer.launch({ args: ['–proxy-server=http://your.proxy:port'] });

const page = await browser.newPage(); await page.goto('https://example.com');

await browser.close(); }

visitPage();

Использование нескольких proxy-серверов помогает избежать блокировок по IP, что делает скрейпинг более безопасным и менее заметным.

  1. Обход защиты от JavaScript-детекции

Многие сайты используют JavaScript для проверки, является ли посетитель реальным пользователем. Они могут проверять, поддерживает ли браузер JavaScript, выполняет ли он сценарии или генерирует ли необычные ошибки. Puppeteer позволяет взаимодействовать с такими сайтами и даже решать задачи с динамически генерируемым контентом.

Для решения этой проблемы можно использовать настройку stealth из пакета puppeteer-extra, который скрывает признаки автоматического поведения, такие как открытые консольные сообщения или необычные заголовки.

Пример использования puppeteer-extra:

const puppeteer = require('puppeteer-extra'); const StealthPlugin
= require('puppeteer-extra-plugin-stealth');

puppeteer.use(StealthPlugin());

async function visitPage() { const browser = await puppeteer.launch(); const page = await browser.newPage();

await page.goto('https://example.com'); await page.screenshot({ path: 'screenshot.png' });

await browser.close(); }

visitPage();

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

Заключение

Обработка анти-скрейпинг защиты с помощью Puppeteer включает в себя несколько ключевых стратегий: использование случайных таймаутов, изменение User-Agent, эмуляция мобильных устройств, работа с Cookies, решение CAPTCHA, использование proxy-серверов и защита от JavaScript-детекции. Каждая из этих техник помогает улучшить качество скрейпинга и повысить шансы на успешное выполнение задач в условиях защиты со стороны веб-сайтов.