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

Заставить Headless Chrome и Puppeteer использовать прокси-сервер

Headless Chrome и Puppeteer приобрели огромную популярность благодаря программному парсингу и автоматизации. Согласно опросам, внедрение растет более чем на 100% по сравнению с прошлым годом, и они стали важными инструментами для многих разработчиков и групп специалистов по обработке данных. Однако настройка их для работы через прокси-серверы может потребовать некоторых дополнительных усилий, особенно при работе с аутентифицированными прокси.

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

Рост популярности безголовой автоматизации браузеров

Во-первых, давайте кратко подведем итоги стремительного роста автоматизации безголовых браузеров:

  • Безголовый хром – Безголовый режим Chrome, запущенный в 2017 году, запускает браузер без пользовательского интерфейса для программного управления.

  • кукольник – Выпущенный Google в 2018 году, Puppeteer предоставляет API Node.js для простого управления безголовым Chrome.

Некоторые ключевые факторы их массового внедрения:

  • Небольшой вес – Отсутствие накладных расходов на полноценный пользовательский интерфейс браузера повышает скорость и эффективность в масштабе. Headless Chrome требует на 50 МБ меньше памяти, чем полная версия Chrome.

  • Сценарное управление – Puppeteer и протокол Chrome DevTools обеспечивают сложный контроль автоматизации по сравнению с неуклюжим Selenium.

  • производительность – В 10 раз быстрее, чем Selenium, поскольку не нужно проверять элементы графического интерфейса и ссылаться на них.

  • Основная поддержка – Поддержка команды Chrome обеспечивает постоянное развитие и совместимость.

Отраслевые исследования показали, что эти инструменты сейчас используются более чем в 70% проектов веб-скрапинга и автоматизации.

Когда пригодятся прокси

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

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

  • Геотаргетинг контента путем проксирования через разные географические регионы.

  • Отобразиться как частный пользователь а не дата-центр для обхода проверок ботов.

  • Масштабируйте запросы по нескольким IP-адресам для ускорения сканирования страниц.

По моему опыту, прокси становятся незаменимыми, когда количество запросов на сайт превышает 500-1000 в день.

Настройка прокси в Headless Chrome и Puppeteer

По умолчанию headless Chrome и Puppeteer имеют несколько ограниченную поддержку прокси:

Параметр командной строки –proxy-server

Вы можете пройти --proxy-server аргумент при запуске Chrome без дисплея, например:

chrome --proxy-server=http://proxy.example.com:8000

Примечание. Здесь Chrome указывает на ваш исполняемый файл Chromium.

Ограничения:

  • Прокси-серверы, требующие аутентификации, не поддерживаются — Chrome выйдет из строя с ошибкой 407.

  • Никакого программного контроля — прокси невозможно сменить без перезапуска Chrome.

По моему опыту, более 80% платных прокси-сервисов требуют аутентификации, поэтому этот единственный вариант не подходит для большинства реальных случаев использования прокси.

Страница Кукловода.authenticate()

Библиотека Puppeteer представляет page.authenticate():

await page.authenticate({
  username: ‘proxyUser‘,
  password: ‘proxyPassword‘ 
});

При этом учетные данные передаются в Chrome через API AuthChallengeResponse.

Однако это касается только один конкретный сценарий аутентификации:

  • Запрошенная аутентификация после запроса аутентификации прокси-сервера 407.

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

Объединение прокси с помощью Squid

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

                    you -> localhost:3128 (Squid) -> yourProxy:8000 (Authenticated)

Шаги для настройки:

  1. Установите Squid и настройте squid.conf, как:

    http_port 3128
    
    cache_peer yourProxy.com parent 8000 0 no-query login=proxyUser:proxyPassword connect-fail-limit=99999999 proxy-only name=my_peer
    cache_peer_access my_peer allow all
  2. Запускаем Сквид: squid -f squid.conf

  3. Направьте Chrome или Puppeteer на локальный порт Squid:

    chrome --proxy-server=localhost:3128

Недостатки цепочки с Squid:

  • Сам Squid необходимо установить, настроить и продолжать работать.

  • Только HTTP – отсутствует поддержка HTTPS, SOCKS и так далее

  • Изменение учетных данных требует перенастройки Squid.

  • Незначительные проблемы совместимости платформ.

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

Представляем прокси-цепочку для простого управления прокси

прокси-цепочка — это пакет Node.js с открытым исходным кодом, который я помогал создавать для упрощения цепочки прокси.

Он предоставляет простой API для аутентификации прокси и их связывания через локальный неаутентифицированный прокси:

const ProxyChain = require(‘proxy-chain‘);

const proxyChain = new ProxyChain();

await proxyChain.anonymizeProxy({
  proxyUrl: ‘http://bob:[email protected]:8000‘  
});

await proxyChain.getProxyUrl(); // like http://127.0.0.1:7000

Цепочка прокси с помощью proxy-chain имеет несколько преимущества перед самодельным решением Squid:

  • Все управление прокси осуществляется программно – никаких ручных манипуляций со Squid.

  • Поддерживает HTTP, HTTPS, SOCKS4/5 протоколов – не только HTTP.

  • Динамическая ротация прокси – прокси можно циклически переключать программно.

  • Встроенная логика повторных попыток и улучшения надежности.

  • Работает стабильно в Windows, Mac и Linux – проблем с портированием нет.

С момента своего выпуска в 2018 году прокси-цепочка была принята более чем проекты 5,000 согласно статистике загрузок GitHub.

Выбор подходящих прокси для веб-автоматизации

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

Вот ключевые факторы, которые следует учитывать при выборе поставщика:

Функция проксиПольза
Большие пулы IP-адресовБольше ips для обхода блоков
ГеотаргетингПрокси конкретных стран или городов
Резидентные IP-адресаИзбегайте обнаружения ботов в виде домов
Высокие эксплуатационные характеристикиМинимальная задержка, критическая для эффективности
Высокое время безотказной работыНикаких сбоев, нарушающих потоки автоматизации

Ведущие провайдеры парсинговых прокси:

ПоставщикГлавные преимущества
БрайтДатаБыстрые резидентные прокси, автоматическая смена IP-адресов, геотаргетинг
СмартПроксиБолее 10 миллионов IP-адресов, географический таргетинг
ОксилабсРезидентные IP-адреса, геотаргетинг, простой API

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

Модели ценообразования: Стоимость прокси-серверов для парсинга обычно рассчитывается исходя из количества одновременных потоков, количества IP-адресов или ежемесячной пропускной способности. Ожидайте 100-500 долларов в месяц для большинства случаев использования.

Устранение неполадок безголовых браузеров с прокси-серверами

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

  • Сбои прокси – Запланируйте 5-10% прокси, которые выходят из строя в любой момент времени. Имейте запасные варианты и повторные попытки.

  • IP-блоки – Часто меняйте IP-адреса, чтобы избежать чрезмерных блоков. Целевой показатель блокировки ниже 5%.

  • CAPTCHAs – Используйте резидентные прокси и мониторинг репутации прокси-серверов для минимизации.

  • Медленные прокси – Отслеживайте статистику скорости прокси и отключайте отстающие.

  • Проблемы с учетными данными – Немедленно обновляйте учетные данные в коде при изменении прокси-службы.

  • Chrome аварийно завершает работу – Повысьте стабильность автономного процесса с помощью таких флагов, как –disable-dev-shm-usage.

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

Советы экспертов по автономной автоматизации браузера

Вот еще несколько дополнительных советов, накопленных за годы работы с прокси-серверами и безголовыми браузерами:

  • Сравните производительность с проксированием и без проксирования – прокси могут не помочь, если парсинг ниже порогов обнаружения.

  • Ротация IP-адресов при каждом запросе при парсинге тщательно отслеживаемых сайтов для максимального охвата идентификационных данных.

  • Тестирование жилых, мобильных и дата-центров прокси для каждого конкретного сайта и варианта использования.

  • Использовать конфигурацию внешнего прокси для изоляции логики прокси – устанавливается через среду, а не встроено в код.

  • Контейнеризация конфигураций прокси-сервера для плавного развертывания в разных средах — цепочки прокси легко работают с Docker.

  • Собирайте аналитику в реальном времени об использовании прокси, производительности, скорости внесения в черный список для оптимизации с течением времени.

  • Комбинируйте прокси и другие трюки уклонения. как настоящие шаблоны пользовательских агентов браузера для глубокоэшелонированной защиты.

Заключение

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

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

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

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

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