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

4 способа аутентификации прокси в Puppeteer с помощью Headless Chrome в 2024 году

Привет! Меня зовут Джон, и я гуру веб-скрапинга, работающий с прокси более 5 лет. На протяжении всей своей карьеры я сталкивался с различными проблемами аутентификации прокси-сервера при использовании Puppeteer и хочу поделиться методами, которым научился.

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

Почему важна аутентификация прокси

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

Согласно данным опроса 2021 года, более 65% пользователей прокси сообщают, что регулярно сталкиваются с проблемами аутентификации, которые блокируют их парсеры. Почти половина говорят, что тратят более 2 часов в неделю на устранение проблем с аутентификацией!

Корень проблемы заключается в том, как работают безголовые браузеры, такие как Puppeteer. Без видимого пользовательского интерфейса невозможно вручную ввести учетные данные прокси-сервера во всплывающем окне, как в обычном окне Chrome.

Вот почему изучение правильных методов аутентификации так важно для всех, кто использует прокси в автономном режиме.

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

Итак, без лишних слов, давайте перейдем к хорошему!

Обзор методов

В этом руководстве я расскажу о следующих 4 методах аутентификации:

  1. метод аутентификации() – Встроенный метод Puppeteer для передачи учетных данных прокси.
  2. Пакет прокси-цепочки – Ротация анонимных прокси
  3. Апифай SDK – Автоматическая ротация прокси
  4. Заголовок авторизации прокси – Альтернативный способ передачи учетных данных

Чтобы дать вам представление, вот краткое изложение того, как они работают:

  • Ассоциация метод аутентификации() непосредственно передает учетные данные Puppeteer перед очисткой. Это идеальный способ авторизации одного прокси.

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

  • Для объемного соскабливания Апифай SDK упрощает управление кредитами за счет автоматической обработки ротации.

  • Наконец, Заголовок прокси-авторизации напрямую вводит учетные данные в заголовки запросов. Это альтернатива, если другие методы не помогают.

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

1. Метод аутентификации()

Ассоциация authenticate() Метод — это встроенный в Puppeteer способ передачи учетных данных прокси. Он появился в Puppeteer v1.7.0 и с тех пор является наиболее подходящим решением.

Вот простой скрипт, использующий authenticate():

// Import Puppeteer 
const puppeteer = require(‘puppeteer‘);

// Proxy credentials
const proxy = ‘http://my.proxy.com:3001‘; 
const username = ‘john_doe‘;
const password = ‘p@ssword123‘;

// Launch Puppeteer and pass proxy to --proxy-server arg
const browser = await puppeteer.launch({
  args: [`--proxy-server=${proxy}`],
});

// Pass creds with authenticate()
const page = await browser.newPage();
await page.authenticate({ username, password });

await page.goto(‘https://example.com‘);
// Rest of script...

Как видите, сначала мы запускаем Puppeteer и передаем URL-адрес нашего прокси-сервера --proxy-server аргумент. Это сообщает Puppeteer, какой прокси использовать.

Далее мы звоним page.authenticate() и передать ему объект с помощью нашего username и password записи. Это позволит авторизовать прокси, прежде чем мы начнем парсинг.

Основное преимущество authenticate() это его простота. Этот метод взят прямо из библиотеки Puppeteer, поэтому никаких зависимостей не требуется. Это быстро реализовать и просто работает.

Однако есть и недостатки, о которых следует знать:

  • Только один проксиauthenticate() может авторизовать только один прокси одновременно. Это не сработает, если вам нужно поменять несколько прокси.

  • Ограниченный контроль – У вас нет возможности настроить или настроить расширенную логику аутентификации.

  • Проблемы с HTTPS – Некоторые пользователи сообщают о неоднозначных результатах при использовании его с прокси-серверами HTTPS.

Итак, в итоге, authenticate() отлично подходит для быстрой авторизации одного HTTP-прокси. Но для большей гибкости вы можете рассмотреть другие методы.

Далее давайте рассмотрим использование пакета proxy-chain, который помогает решить некоторые из этих ограничений.

2. Пакет прокси-цепочки

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

proxy-chain работает, беря существующий URL-адрес прокси-сервера и преобразуя его в анонимную версию. Этот анонимный прокси-сервер перенаправляет трафик через исходный прокси-сервер, скрывая при этом свои учетные данные.

Вот как это выглядит на практике:

// Import packages
const puppeteer = require(‘puppeteer‘); 
const proxyChain = require(‘proxy-chain‘);

// Original authenticated proxy URL 
const proxyUrl = ‘http://john:[email protected]:8000‘;

// Anonymize proxy 
const anonProxyUrl = await proxyChain.anonymizeProxy(proxyUrl);

// Use anonymous proxy URL  
const browser = await puppeteer.launch({
 args: [`--proxy-server=${anonProxyUrl}`], 
});

// creds are now handled automatically!
const page = await browser.newPage();

await page.goto(‘https://example.com‘);
// Rest of script...

// Close anonymized proxy when done
proxyChain.closeAnonymizedProxy(anonProxyUrl);

Вместо того, чтобы вручную передавать учетные данные, мы позволяем прокси-цепочке выполнять аутентификацию «под капотом».

Это дает несколько преимуществ:

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

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

  • Работает с HTTPS – Туннелирование поддерживает такие протоколы, как HTTPS и SOCKS.

  • Расширенные возможности – Пользовательские правила, автоматическая повторная попытка, аварийное переключение и многое другое.

Функции ротации и настройки прокси — вот что делает прокси-цепочку сияющей. Это мой личный набор для большинства работ по очистке.

Однако в больших масштабах управление учетными данными вручную может оказаться утомительным. Вот тут-то и вступает в игру Apify SDK.

3. Apify SDK

Для больших задач по парсингу веб-страниц Апифай SDK устраняет почти все накладные расходы на управление прокси.

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

Вот пример использования их сканера Puppeteer:

// Require Apify SDK packages
const { PuppeteerCrawler } = require(‘apify‘);

// Create a proxy configuration
const proxyConfig = await Apify.createProxyConfiguration({
  groups: [‘RESIDENTIAL‘]
});

// Launch crawler
const crawler = new PuppeteerCrawler({

  // Pass proxy configuration
  proxyConfiguration: proxyConfig,

  // Rest of crawler options...

  async handlePageFunction({ page, proxyInfo }) {
    // Proxy will automatically rotate
    console.log(`Using proxy ${proxyInfo.url}`)

    // No manual authentication needed!
    await page.goto(‘https://example.com‘);
  }

});

// Run crawler
await crawler.run(); 

Сканер незаметно управляет сменой прокси-серверов и аутентифицирует их. Вы просто сосредотачиваетесь на реальной логике парсинга.

Некоторые ключевые преимущества использования Apify SDK для прокси:

  • Автоматическое вращение – Просто определите свои требования к прокси. Apify берет на себя управление учетными данными за вас.

  • Высокие эксплуатационные характеристики – Оптимизирован для больших задач по парсингу с сотнями прокси.

  • Глобальные жилые IP-адреса – Выбирайте местоположения и группы прокси, которые лучше всего подходят для каждого сайта.

  • Встроенная логика повтора – Автоматически повторяет неудачные запросы с использованием новых прокси.

Использование их прокси-менеджера экономит массу времени и разблокирует сложные сайты. По моим оценкам, это может ускорить разработку в 2-3 раза для крупных парсинговых проектов.

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

4. Заголовок авторизации прокси

Если вам нужен точный контроль над аутентификацией прокси, установите Proxy-Authorization заголовок вручную может быть опцией.

Это включает в себя кодирование вашего имени пользователя и пароля base64 в строку аутентификации:

// Encode credentials 
const encodedCreds = Buffer.from(`${username}:${password}`).toString(‘base64‘);

// Create auth header value
const authValue = `Basic ${encodedCreds}`;

Затем напрямую вставьте этот заголовок в ваши запросы:

// Set header on page
await page.setExtraHTTPHeaders({ 
  ‘Proxy-Authorization‘: authValue
});

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

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

  • Укажите точную схему авторизации – Basic, Digest, NTLM и т. д.

  • Меняйте учетные данные, создавая новые заголовки.

  • Устраняйте проблемы с аутентификацией, поскольку вы контролируете весь процесс.

  • Потенциальная аутентификация с использованием нестандартных прокси.

Однако есть и существенные недостатки:

  • Только HTTP – Внедрение заголовка не будет работать для прокси-соединений HTTPS.

  • Дополнительное кодирование – Больше работы, чем выгрузка логики аутентификации в пакет.

  • хлопьевидный – Некоторые прокси могут работать некорректно с установленными вручную заголовками.

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

Основные выводы

Вот основные выводы из каждого метода аутентификации прокси:

  • аутентифицировать() – Простая авторизация с использованием одного прокси, встроенная в Puppeteer.

  • прокси-цепочка – Легко анонимизируйте и меняйте несколько прокси.

  • Апифай SDK – Автоматизируйте управление прокси для больших заказов.

  • Заголовок прокси – Впрыск жатки вручную в крайнем случае.

Подводя итог, рекомендую попробовать authenticate() сначала для базовой аутентификации, прокси-цепочки для большего контроля и Apify SDK для заданий корпоративного уровня.

Сфера прокси-серверов будет только развиваться, поэтому мне не терпится увидеть, какие новые методы аутентификации появятся в будущем. На данный момент эти 4 метода должны дать вам возможность отказаться от работы и автоматизировать ее в больших масштабах.

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

Спасибо за чтение!

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

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