Как использовать SOCKS5 прокси с логином и паролем в Playwright
SOCKS5-прокси — это популярный инструмент для анонимизации трафика и обхода ограничений. Однако большинство современных браузеров (Chrome, Firefox) не поддерживают SOCKS5-прокси с авторизацией (логин и пароль) напрямую. Playwright, мощный инструмент для автоматизации браузеров, также имеет ограничения: он позволяет использовать SOCKS5-прокси без авторизации, но не поддерживает аутентификацию. В этой статье мы разберем, как обойти это ограничение с помощью дополнительных библиотек, таких как
socks-proxy-agent
и
proxy-chain
Проблема: Playwright и SOCKS5-прокси с авторизацией
Playwright предоставляет встроенную поддержку SOCKS5-прокси, но без авторизации. Пример базовой настройки:
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch({
proxy: {
server: 'socks5://127.0.0.1:1080' // SOCKS5 без авторизации
}
});
const page = await browser.newPage();
await page.goto('https://example.com');
await browser.close();
})();
Однако если ваш прокси требует логин и пароль, этот код не сработает. Для решения проблемы потребуются сторонние библиотеки.
Решение 1: Использование socks-proxy-agent и node-fetch
Если вам нужно выполнять HTTP/HTTPS-запросы через SOCKS5-прокси с авторизацией, используйте
socks-proxy-agent
и
node-fetch
Установка зависимостей:
npm install socks-proxy-agent node-fetch
Пример кода:
const { SocksProxyAgent } = require('socks-proxy-agent');
const http = require('http');
async function **startProxy**() {
*// Настройки SOCKS5 прокси*
const proxyUrl = 'socks5://login:password@proxy:port';
const agent = new SocksProxyAgent(proxyUrl);
*// Создаем локальный прокси-сервер*
const server = http.createServer((*req*, *res*) => {
const options = {
method: *req*.method,
headers: *req*.headers,
agent: agent
};
const proxyReq = http.request('https://example.com', options, (*proxyRes*) => {
*res*.writeHead(*proxyRes*.statusCode, *proxyRes*.headers);
*proxyRes*.pipe(*res*);
});
*req*.pipe(proxyReq);
});
*// Запускаем локальный сервер*
server.listen(8080, () => {
console.log('Прокси-сервер запущен на порту 8080');
openBrowser();
});
}
async function **openBrowser**() {
const { chromium } = require('playwright');
try {
const browser = await chromium.launch({
headless: false,
args: ['--start-maximized']
});
const context = await browser.newContext();
const page = await context.newPage();
*// Открываем через локальный прокси*
await page.goto('http://localhost:8080');
*// Держим браузер открытым*
await new Promise(() => {});
} catch (error) {
console.error('Ошибка:', error);
}
}
startProxy();
Ограничения:
- Этот метод работает только для HTTP/HTTPS-запросов, а не для автоматизации браузера через Playwright.
Решение 2: Использование proxy-chain для автоматизации в Playwright
Для работы с браузером через SOCKS5-прокси с авторизацией можно создать промежуточный HTTP-прокси с помощью библиотеки
proxy-chain
Установка зависимостей:
npm install proxy-chain
Пример кода:
const { chromium } = require('playwright');
const ProxyChain = require('proxy-chain');
async function **openBrowser**() {
const oldProxyUrl = 'socks5://login:password@proxy:port';
try {
*// Создаем новый прокси URL без аутентификации*
const newProxyUrl = await ProxyChain.anonymizeProxy(oldProxyUrl);
console.log('Запускаем браузер с прокси...');
*// Запускаем браузер с анонимизированным прокси*
const browser = await chromium.launch({
headless: false,
args: [
'--start-maximized',
`--proxy-server=${newProxyUrl}`
]
});
const context = await browser.newContext();
const page = await context.newPage();
console.log('Открываем example.com...');
await page.goto('https://example.com');
*// Держим браузер открытым*
await new Promise(() => {});
} catch (error) {
console.error('Ошибка:', error);
}
}
openBrowser();
Как это работает:
-
proxy-chain создает HTTP-прокси на локальном порту (например, 8080)
-
Этот прокси перенаправляет трафик на SOCKS5-прокси с авторизацией.
-
Playwright использует локальный HTTP-прокси, который не требует авторизации.
Заключение
- Playwright поддерживает SOCKS5-прокси без авторизации.
- Для работы с авторизацией используйте:
- socks-proxy-agent + node-fetch для HTTP-запросов.
- proxy-chain для автоматизации браузера.
- Выбор метода зависит от ваших задач: автоматизация браузера, API-запросы или анонимность.