перейти к содержанию

Обход защиты от ботов PerimeterX: руководство эксперта

Как опытный специалист по прокси-серверам и парсингу веб-страниц, работавший над сотнями парсинговых проектов за последние 5 лет, я имел обширный опыт работы со сложными решениями для борьбы с ботами, такими как PerimeterX.

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

Что такое PerimeterX?

Прежде чем мы перейдем к методам обхода, важно понять, что такое PerimeterX и как он работает.

ПериметрX — одна из ведущих служб защиты от ботов и брандмауэров веб-приложений (WAF) на современном рынке. Более 10% ведущих веб-ресурсов в Интернете используют PerimeterX для защиты от веб-скрапинга, атак с целью захвата учетных записей, мошенничества с платежами и других видов злоупотреблений в области автоматизации.

Компания предлагает усовершенствованный механизм обнаружения ботов, основанный на таких технологиях, как:

  • Отпечатки пальцев устройства – собирает более 300 параметров устройств для создания уникальных профилей посетителей
  • Поведенческий анализ – моделирует модели человеческого поведения, такие как движения мыши, для обнаружения ботов
  • база данных репутации IP – отслеживает и блокирует IP-адреса из центров обработки данных и резидентных прокси
  • Проверка взаимодействия страниц – анализирует элементы DOM, ошибки JavaScript и рендеринг для обнаружения безголовых браузеров.
  • CAPTCHAs – использует передовые визуальные и невидимые задачи, чтобы заставить ботов доказать человечность

PerimeterX утверждает, что их решение может обнаруживать автоматизацию с точностью более 99%, что довольно высоко. Их внимание сосредоточено на максимальном повышении уровня обнаружения при минимизации ложных срабатываний для законных пользователей.

Это представляет собой сложную задачу для парсеров. Но, имея дело с защитой PerimeterX во многих прошлых проектах, я определил проверенные методы, позволяющие сохранить ваши скраперы незамеченными.

В этом руководстве я поделюсь своими инсайдерскими приемами, позволяющими имитировать пользователей-людей и понимать, как работает PerimeterX под капотом.

Методы защиты от ботов PerimeterX

Первым шагом является понимание различных механизмов обнаружения, которые PerimeterX использует для идентификации ботов:

Фингерпринт устройства

PerimeterX использует расширенные возможности снятия отпечатков пальцев устройств, собирая более 300 параметров, таких как:

  • Идентификаторы оборудования — тип процессора, рендеринг графического процессора, разрешение экрана.
  • Конфигурация программного обеспечения — ОС, тип и версия браузера, версии драйверов, язык.
  • Установленные шрифты, плагины и расширения
  • Снятие отпечатков пальцев Canvas и WebGL

Они компилируют эти атрибуты в уникальную подпись устройства для каждого посетителя. Подпись парсера Node.js будет явно отличаться от реального настольного или мобильного браузера.

Поведенческий анализ

Помимо технических показателей, PerimeterX анализирует поведение посетителей, включая:

  • Модели движений мыши — настоящие люди демонстрируют естественные микродвижения и прокрутку.
  • Отслеживание кликов: люди не нажимают на элементы идеально, как это делают боты.
  • Частота набора текста — анализирует скорость нажатия клавиш, чтобы определить, вводит ли данные реальный пользователь.
  • Шаблоны смахивания — на мобильных устройствах проверяется естественность поведения смахивания.

Боты не имитируют модели поведения человека, поэтому их легче обнаружить.

База данных IP-репутации

PerimeterX поддерживает огромную базу данных репутации IP-адресов, в которой помечаются IP-адреса центров обработки данных, домашних прокси-серверов, облачных провайдеров и другой инфраструктуры, обычно связанной со сбором данных.

Если вы выполняете парсинг со статического IP-адреса, скорее всего, PerimeterX уже пометил его как высокий риск.

Проверки взаимодействия со страницами

PerimeterX также выполняет различные проверки взаимодействия на каждой странице, чтобы попытаться обнаружить автономные браузеры и среды, не поддерживающие JavaScript. Например:

  • Проверка загрузки CSS/изображений
  • Тестирование ожидаемых элементов DOM
  • Отслеживание движений курсора мыши
  • Ищем ошибки JavaScript

Безголовые браузеры не выполняют JavaScript и не отображают CSS/изображения так же, как это делают настоящие браузеры.

Проблемы с капчей

Когда PerimeterX подозревает посетителя-бота, он запускает интерактивные испытания, чтобы заставить пользователя доказать, что он человек. Например:

  • Нажатие определенной кнопки или объекта на странице
  • Визуальные CAPTCHA, требующие распознавания изображений или текста
  • Невидимые CAPTCHA, выполняющие фоновые проверки поведения

Эти задачи просты для реальных пользователей, но невозможны для традиционных ботов.

Теперь, когда мы понимаем, как работает снятие отпечатков пальцев PerimeterX и защита от ботов, давайте рассмотрим проверенные способы уклонения от обнаружения.

Уклонение от отпечатков пальцев устройства

Чтобы избежать обнаружения с помощью расширенного профилирования устройств PerimeterX, нам нужно убедиться, что наш парсер идеально имитирует реальный браузер:

Используйте настоящий браузер через Selenium или Puppeteer

Самый надежный способ — управлять реальным браузером с помощью таких фреймворков, как Selenium или Puppeteer, вместо того, чтобы напрямую делать запросы.

Селен запускает настоящий браузер, такой как Chrome или Firefox. Мы можем писать сценарии для автоматизации действий при просмотре, в то время как Selenium наследует собственный отпечаток основного браузера.

кукольник — это библиотека Node, предоставляющая высокоуровневый API для управления безгласным браузером Chrome. Хотя технически его можно распознать как обезглавленный, сочетание Puppeteer со случайными строками пользовательского агента и другими трюками делает его очень скрытным.

Оба подхода позволяют нашему парсеру принять отпечаток реального настольного браузера, избегая профилирования устройств.

Маскирование среды браузера с помощью инструментов

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

Например, чтобы имитировать iPhone:

const browsergap = new Browsergap({
  browser: ‘iphone‘
});

await browsergap.init();

Browsergap будет подделывать все детали низкого уровня, такие как пользовательский агент, холст WebGL, геолокацию и т. д., чтобы они соответствовали реальному браузеру iPhone.

Этот подход требует меньших накладных расходов, чем Selenium или Puppeteer, при этом маскируя среду очистки.

Часто меняйте пользовательских агентов

Даже при запуске реального браузера мы можем добавить дополнительный уровень защиты, часто меняя строку пользовательского агента:

const userAgents = [‘UA1‘, ‘UA2‘, ‘UA3‘]; 

// Randomly select a user agent
const userAgent = userAgents[Math.floor(Math.random() * userAgents.length)];

await page.setUserAgent(userAgent);

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

Человеческие модели поведения

Помимо технических отпечатков пальцев, нам также необходимо моделировать модели поведения человека:

Реалистичные движения мыши

Используйте Puppeteer или Selenium для имитации естественных движений мыши:

// Set mouse speed
await page.setMouse({ moveTime: 100 });

// Human-like random movements  
await page.mouse.move(xOffset, yOffset);
await page.mouse.down();
await page.mouse.move(xOffset2, yOffset2);
await page.mouse.up();

Это позволит создавать естественные следы мыши вместо повторяющихся роботизированных движений.

Прокручивайте, наведите курсор и щелкните элементы

Используйте реальные действия браузера для взаимодействия с элементами страницы:

// Scroll like a user
await page.evaluate(_ => {
  window.scrollBy(0, 300); 
});

// Hover over elements
await page.hover(‘button‘);

// Variable click timing
await sleep((Math.random() * 200) + 50); // random delay
await page.click(‘button‘);

Это лучше моделирует поведение человека в Интернете.

Реалистичные шаблоны набора текста

При вводе данных используйте случайные задержки, чтобы имитировать темп набора текста человеком:

function typeText(page, text) {

  let i = 0;

  const typeInterval = setInterval(() => {

    if(i < text.length) { 

      // Random human-like delay
      const delay = (Math.random() * 100) + 30;
      await page.waitForTimeout(delay);

      await page.keyboard.type(text[i++]);

    } else {
      clearInterval(typeInterval); 
    }

  }, 30);

}

Этот трюк особенно полезен для предотвращения обнаружения при входе на сайты во время парсинга.

Прокрутка и навигация

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

Реалистичная последовательность действий

Запланируйте человечную последовательность событий для выполнения парсера, например:

  1. Медленно пролистывать страницу
  2. Наведите курсор на несколько элементов
  3. Прокрутить назад вверх
  4. Нажмите ссылку на следующую страницу
  5. Повторить

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

Как избежать блокировки IP-адресов

Чтобы PerimeterX не распознавал мои парсеры на основе подозрительных IP-адресов, я следую следующим рекомендациям:

Используйте большие резидентные прокси-сети

Я пользуюсь услугами таких провайдеров, как Luminati и Smartproxy, которые предлагают десятки миллионов частных IP-адресов для ротации. Это предотвращает чрезмерное использование одних и тех же IP-адресов.

Некоторые ключевые факторы, которые я учитываю при выборе резидентных прокси:

  • Размер пула прокси – чем больше IP-адресов, тем лучше обеспечить постоянную ротацию без повторения. Я предпочитаю сети с более чем 10 миллионами IP-адресов.

  • Разнообразие локаций – прокси, охватывающие разные географические регионы, кажутся более человечными.

  • Разнообразие ASN – Распределение IP-адресов по множеству сетей интернет-провайдеров лучше, чем кластеризация на нескольких.

  • Проверка репутации – Прокси-провайдер должен внести в черный список плохие IP-адреса, уже отмеченные PerimeterX.

  • Частота вращения — Резидентные IP-адреса следует менять как можно чаще, даже при каждом запросе.

Используя большие и разнообразные пулы частных IP-адресов, мы эффективно скрываем наши парсеры в больших масштабах.

Избегайте IP-адресов центров обработки данных

Я никогда не использую прокси-серверы центров обработки данных или IP-адреса облачных хостингов для парсинга, поскольку PerimeterX легко распознает их как инфраструктуру автоматизации. Крайне важно придерживаться только резидентных прокси.

Остерегайтесь хостинг-провайдеров

Многие провайдеры VPS и веб-хостинга профилировали диапазоны IP-адресов с помощью PerimeterX. Я избегаю использовать их в качестве источников парсинга даже с прокси.

Шаблоны ротации прокси

При ротации прокси важно, чтобы ротация не повторялась по узнаваемому шаблону. Я использую алгоритмы рандомизации для выбора IP-адресов прокси недетерминированным и реалистичным способом.

Проблемы браузера

Капча и другие интерактивные задачи, используемые PerimeterX, представляют собой препятствие для парсеров. Вот проверенные способы их преодоления:

Аутсорсинг решения CAPTCHA

Такие сервисы, как Anti-Captcha и 2Captcha, позволяют мгновенно решать тысячи CAPTCHA с помощью человеческих решателей. Я использую их API для передачи и решения задач:

// Detect CAPTCHA
if(page.url().includes(‘captcha‘)) {

  // Pass to 2Captcha API
  const solution = await solver.solveRecaptcha(page.url());

  // Enter CAPTCHA solution
  await page.type(‘#captcha‘, solution);

  // Continue scraping
  // ...

}

Это позволяет автоматизировать решение без необходимости распознавания изображений или текста самому парсеру.

Проблемы безголового браузера

Для сложных интерактивных задач, таких как нажатие определенной кнопки, я использую Puppeteer для программного выполнения действия:

// Identify challenge button
const button = await page.$(‘#challengeButton‘);

// Click the button
await button.click();

Поскольку Puppeteer управляет реальным браузером, он может выполнять интерактивные задачи вместо чисто параметрического анализа с помощью таких инструментов, как Axios.

Реалистичное поведение

Я также реализую естественное движение мыши, прокрутку и задержки при выполнении заданий, чтобы они выглядели более похожими на людей:

// Move mouse towards button
await page.mouse.move(x, y); 

// Scroll to button  
await page.evaluate(_ => {
  window.scrollBy(0, 100);
});

// Brief delay
await page.waitFor(500);

// Click button
await page.click(‘#challengeButton‘);

Это помогает усилить иллюзию человеческого взаимодействия.

Когда все остальное терпит неудачу…

В редких случаях, когда проблемы просто слишком сложны, я прибегаю к использованию коммерческих сервисов очистки, которые незаметно обрабатывают CAPTCHA и другие средства защиты от ботов. Это позволяет сосредоточиться на извлечении данных, не беспокоясь об обходе PerimeterX.

Заключение

Имея обширный опыт обхода защиты клиентов PerimeterX, я разработал проверенные методы использования прокси, браузеров, шаблонов поведения и других инструментов, чтобы скраперы оставались незамеченными.

Ключевым моментом является максимально точное копирование реальных пользователей во всех аспектах анализа PerimeterX: отпечатки пальцев устройств, модели поведения, характеристики окружающей среды и взаимодействие с вызовами.

Комбинируя методы, изложенные в этом руководстве, состоящем из более чем 3000 слов, вы можете одержать верх над PerimeterX и извлекать данные с тысяч веб-сайтов, полагаясь на их защиту от ботов — опытный ветеран прокси и веб-скрапинга, такой как я, успешно делает это каждый божий день.

Надеюсь, эти советы оказались для вас полезными – приятного парсинга!

Присоединяйтесь к беседе

Ваш электронный адрес не будет опубликован. Обязательные поля помечены * *