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)
Шаги для настройки:
Установите 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
Запускаем Сквид:
squid -f squid.conf
Направьте 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 не имеют встроенной поддержки прокси-серверов с проверкой подлинности, обходные решения дошли до такой степени, что прокси-серверы можно легко включить в ваши конвейеры очистки и автоматизации.
Такие инструменты, как цепочка прокси-серверов, в сочетании с надежными, хорошо управляемыми прокси-сервисами, снимают большую часть головной боли с управлением прокси. Сосредоточьтесь на тонкой настройке логики парсинга более высокого уровня и позвольте прокси творить чудеса под капотом!
Я надеюсь, что эти советы, почерпнутые из многих проектов по интеграции прокси, помогут вам в полной мере использовать преимущества прокси в рамках ваших собственных усилий по автоматизации автономного браузера. Дайте мне знать, если у вас возникнут другие вопросы при внедрении прокси в ваши рабочие процессы!