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-запросы или анонимность.
Добавить комментарий