Каждый контекст печатает ваш собственный IP
Проверьте Страница создана из контекста, а не из браузера?
Решение Используйте context.newPage() и печатайте ipinfo.io/json для каждого контекста.
Выберите, что именно ротируется, и проверяйте выходной IP каждого запуска.
| Пункт | Как задаётся прокси | Что получаете | Цена |
|---|---|---|---|
| Контекст на прокси | createBrowserContext({ proxyServer }) и page.authenticate | Отдельные cookie и хранилище у каждого контекста, один процесс браузера | Нужно вести список прокси |
| Браузер на прокси | --proxy-server при запуске (с proxy-chain, если у прокси есть логин) | Полная изоляция, по процессу на каждый | Больше памяти на каждый прокси |
| Один ротируемый шлюз | Один --proxy-server и один логин | Новый IP на каждое новое соединение | Список не нужен; без сессии одна страница может выходить с нескольких IP |
По страницам API Puppeteer и README proxy-chain (прочитано 13 ноября 2026) и фактам о продуктах Proxy302.
В справочнике Puppeteer proxyServer указан как параметр контекста браузера: прокси для всех запросов этого контекста. Аргумент запуска действует на весь браузер. Открытую страницу нельзя перевести на другой прокси, поэтому наименьшая единица ротации — контекст.
Учётные данные передаёт Page.authenticate. Puppeteer предупреждает, что для этого в фоне включается перехват запросов, что может влиять на производительность, поэтому вызывайте его только на нужных страницах и до первого перехода.
import puppeteer from 'puppeteer'
const proxies = [
{ server: 'http://HOST1:2222', username: 'LOGIN1', password: 'PASSWORD1' },
{ server: 'http://HOST2:2222', username: 'LOGIN2', password: 'PASSWORD2' },
]
const browser = await puppeteer.launch()
for (const p of proxies) {
const context = await browser.createBrowserContext({ proxyServer: p.server })
const page = await context.newPage()
await page.authenticate({ username: p.username, password: p.password })
await page.goto('https://ipinfo.io/json')
console.log(await page.evaluate(() => document.body.innerText))
await context.close()
}
await browser.close()Только пример. Замените HOST, LOGIN и PASSWORD значениями из «Мои активы». Каждый запуск печатает данные IP этого прокси.
Когда нужен целый браузер на прокси, флаг запуска принимает URL, но Chrome не берёт из него логин и пароль. Библиотека proxy-chain запускает небольшой локальный прокси с логином и возвращает локальный URL для --proxy-server; по окончании работы браузера его закрывают.
Chrome не поддерживает методы аутентификации SOCKS5, поэтому браузеру нужен HTTP-адрес.
import puppeteer from 'puppeteer'
import { anonymizeProxy, closeAnonymizedProxy } from 'proxy-chain'
const localUrl = await anonymizeProxy('http://LOGIN:PASSWORD@HOST:2222')
const browser = await puppeteer.launch({ args: [`--proxy-server=${localUrl}`] })
const page = await browser.newPage()
await page.goto('https://ipinfo.io/json')
console.log(await page.evaluate(() => document.body.innerText))
await browser.close()
await closeAnonymizedProxy(localUrl, true)Только пример. Нужно сначала выполнить npm install puppeteer proxy-chain. Замените HOST, LOGIN и PASSWORD.
С динамическими резидентными прокси задаётся один прокси — proxy.proxy302.com, HTTP порт 2222, — а выходной IP меняется сам. Без сессии каждое новое соединение получает новый IP, а повторно используемое сохраняет его. Страница открывает несколько соединений, поэтому разные запросы одной страницы могут выходить с разных IP.
Если странице нужен один IP, создайте прокси с сессией; на Бюджетной линии в консоли есть 10, 30, 60 и 120 минут или своё число минут от 1 до 120. Для адреса, неизменного несколько дней, берите статический IP. Бюджетная линия стоит $1,50 за ГБ.
import puppeteer from 'puppeteer'
const browser = await puppeteer.launch({
args: ['--proxy-server=http://proxy.proxy302.com:2222'],
})
for (let i = 0; i < 3; i++) {
const page = await browser.newPage()
await page.authenticate({ username: 'LOGIN', password: 'PASSWORD' })
await page.goto('https://ipinfo.io/json')
console.log(await page.evaluate(() => document.body.innerText))
await page.close()
}
await browser.close()Только пример. Замените LOGIN и PASSWORD значениями из «Мои активы». Если две страницы печатают один IP, соединение было использовано повторно: для следующей задачи возьмите новый контекст или браузер.
Решите, что должно оставаться вместе. Процессу входа нужен один IP на весь запуск: берите контекст или браузер на прокси либо сессию. Независимые загрузки страниц можно вести через шлюз.
Скопируйте хост, порт, логин и пароль из «Мои активы» и выберите протокол HTTP, потому что в Chrome нет логина SOCKS5.
Запустите один из примеров с двумя прокси или двумя запусками и сравните поле ip в ipinfo.io/json.
Ожидаемый результат Разные IP у разных контекстов или запусков и один IP внутри сессии.
Только после этого добавляйте реальную задачу. Соблюдайте условия сайтов и держите разумную частоту запросов.
Проверьте Страница создана из контекста, а не из браузера?
Решение Используйте context.newPage() и печатайте ipinfo.io/json для каждого контекста.
Проверьте page.authenticate должен выполняться до первого goto и с верным логином.
Решение Заново скопируйте логин и пароль из «Мои активы».
Проверьте Повторно используемое соединение сохраняет IP, а сессия закрепляет один IP намеренно.
Решение Закрывайте контекст или браузер между задачами либо создайте прокси без сессии.
Когда остановиться Если адрес прокси не подключается совсем, отправьте номер заказа в поддержку, а не продолжайте ротацию.
Для уже открытых страниц нет. Прокси задаётся на браузер при запуске или на контекст, наименьшая единица — контекст.
Вызовите page.authenticate с логином и паролем до первого перехода или используйте proxy-chain, чтобы логин хранился в локальном прокси.
Нет. Новый IP выдаётся на каждое новое соединение; повторно используемое соединение сохраняет IP.
В Chrome нет: методы аутентификации SOCKS5 не поддерживаются. Используйте HTTP-адрес.
Динамические резидентные — если нужен шлюз со сменой IP; список статических ISP-IP — если каждой задаче нужен постоянный адрес.
Официальная документация · Проверено:
Прочитано 13 ноября 2026: proxyServer — прокси-сервер (порт необязателен) для всех запросов контекста, логин и пароль задаются в Page.authenticate; proxyBypassList — список хостов без прокси.
Официальная документация · Проверено:
Прочитано 13 ноября 2026: передаёт учётные данные для HTTP-аутентификации; для этого в фоне включается перехват запросов, что может влиять на производительность.
Сторонний источник · Проверено:
Прочитано 13 ноября 2026: anonymizeProxy запускает локальный открытый прокси, пересылающий на HTTP/HTTPS-прокси с аутентификацией, и возвращает его URL; closeAnonymizedProxy его закрывает; в примере Puppeteer запускается с --proxy-server, равным этому локальному URL.
Официальная документация · Проверено:
Прочитано 13 ноября 2026: Chrome не поддерживает методы аутентификации SOCKSv5; --proxy-server принимает URI вида http:// или socks5://.
Наблюдение за продуктом · Проверено:
Файл фактов сайта и описание линий, проверено 10 и 11 ноября 2026: вход динамических резидентных proxy.proxy302.com, HTTP порт 2222 и SOCKS5 порт 3333; Бюджетная линия $1,50 за ГБ; новый IP на каждое новое соединение, если не задана сессия; повторно используемые (keep-alive) соединения сохраняют IP; сессии Бюджетной линии от 1 до 120 минут; статические ISP-IP не меняются весь срок аренды.
Создайте аккаунт, пополните баланс и выберите ротируемый резидентный, статический ISP или дата-центр IP — настроить его в браузере можно за несколько минут.