Перейти к содержимому
Гайды 6 мин чтения 1 просмотров

Настройка прокси в Playwright

Подробное руководство по настройке HTTP и SOCKS прокси в Playwright с Python и Node.js. Узнайте, как использовать GProxy для эффективного веб-скрейпинга и тестирования.

Python Браузер

Настройка прокси в Playwright для Python и Node.js выполняется через опцию proxy при запуске экземпляра браузера, позволяя маршрутизировать весь сетевой трафик через указанный прокси-сервер.

Основы настройки прокси в Playwright

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

Почему используют прокси в Playwright?

  • Геотаргетинг: Доступ к контенту, ограниченному географическим положением, путем использования прокси-серверов в нужных регионах.
  • Обход ограничений: Преодоление лимитов запросов, блокировок IP-адресов или других ограничений, накладываемых целевыми веб-сайтами.
  • Анонимность и безопасность: Скрытие реального IP-адреса клиента, повышение анонимности при веб-скрапинге или тестировании.
  • Тестирование: Проверка поведения приложения при работе через прокси.

Поддерживаемые типы прокси

Playwright поддерживает следующие типы прокси:

  • HTTP/HTTPS
  • SOCKS5

Базовая конфигурация прокси

Для настройки прокси используется объект proxy в параметрах browserType.launch().

Python

from playwright.sync_api import sync_playwright

def setup_basic_proxy_python(proxy_url: str):
    with sync_playwright() as p:
        browser = p.chromium.launch(
            proxy={
                "server": proxy_url  # e.g., "http://192.168.1.1:8080"
            }
        )
        page = browser.new_page()
        page.goto("https://httpbin.org/ip")
        print(page.content())
        browser.close()

# Пример использования
# setup_basic_proxy_python("http://192.168.1.1:8080")

Node.js

const { chromium } = require('playwright');

async function setupBasicProxyNode(proxyUrl) {
    const browser = await chromium.launch({
        proxy: {
            server: proxyUrl // e.g., "http://192.168.1.1:8080"
        }
    });
    const page = await browser.newPage();
    await page.goto("https://httpbin.org/ip");
    console.log(await page.content());
    await browser.close();
}

// Пример использования
// setupBasicProxyNode("http://192.168.1.1:8080");

Конфигурация прокси с аутентификацией

Для прокси-серверов, требующих аутентификации, учетные данные могут быть предоставлены непосредственно в URL прокси или с использованием отдельных полей username и password.

Включение учетных данных в URL

Это наиболее распространенный способ.

Python

from playwright.sync_api import sync_playwright

def setup_auth_proxy_url_python(proxy_url_with_auth: str):
    # proxy_url_with_auth: e.g., "http://user:password@192.168.1.1:8080"
    with sync_playwright() as p:
        browser = p.chromium.launch(
            proxy={
                "server": proxy_url_with_auth
            }
        )
        page = browser.new_page()
        page.goto("https://httpbin.org/ip")
        print(page.content())
        browser.close()

# Пример использования
# setup_auth_proxy_url_python("http://proxyuser:proxypass@192.168.1.1:8080")

Node.js

const { chromium } = require('playwright');

async function setupAuthProxyUrlNode(proxyUrlWithAuth) {
    // proxyUrlWithAuth: e.g., "http://user:password@192.168.1.1:8080"
    const browser = await chromium.launch({
        proxy: {
            server: proxyUrlWithAuth
        }
    });
    const page = await browser.newPage();
    await page.goto("https://httpbin.org/ip");
    console.log(await page.content());
    await browser.close();
}

// Пример использования
// setupAuthProxyUrlNode("http://proxyuser:proxypass@192.168.1.1:8080");

Использование отдельных полей для учетных данных

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

Python

from playwright.sync_api import sync_playwright

def setup_auth_proxy_fields_python(host: str, port: int, username: str, password: str):
    with sync_playwright() as p:
        browser = p.chromium.launch(
            proxy={
                "server": f"http://{host}:{port}",
                "username": username,
                "password": password
            }
        )
        page = browser.new_page()
        page.goto("https://httpbin.org/ip")
        print(page.content())
        browser.close()

# Пример использования
# setup_auth_proxy_fields_python("192.168.1.1", 8080, "proxyuser", "proxypass")

Node.js

const { chromium } = require('playwright');

async function setupAuthProxyFieldsNode(host, port, username, password) {
    const browser = await chromium.launch({
        proxy: {
            server: `http://${host}:${port}`,
            username: username,
            password: password
        }
    });
    const page = await browser.newPage();
    await page.goto("https://httpbin.org/ip");
    console.log(await page.content());
    await browser.close();
}

// Пример использования
// setupAuthProxyFieldsNode("192.168.1.1", 8080, "proxyuser", "proxypass");

Обход прокси (Bypass)

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

Список bypass представляет собой массив строк, где каждая строка может быть:
* Полным именем хоста (например, localhost).
* Шаблоном с подстановочными знаками (например, *.example.com).
* Специальными значениями (например, <local> для всех локальных адресов).

Python

from playwright.sync_api import sync_playwright

def setup_proxy_with_bypass_python(proxy_url: str, bypass_domains: list):
    with sync_playwright() as p:
        browser = p.chromium.launch(
            proxy={
                "server": proxy_url,
                "bypass": bypass_domains  # e.g., ["localhost", "*.internal-domain.com"]
            }
        )
        page = browser.new_page()
        page.goto("https://httpbin.org/ip") # Пройдет через прокси
        page.goto("http://localhost:8000") # Не пройдет через прокси, если localhost в bypass
        print(page.content())
        browser.close()

# Пример использования
# setup_proxy_with_bypass_python("http://192.168.1.1:8080", ["localhost", "*.myinternal.net"])

Node.js

const { chromium } = require('playwright');

async function setupProxyWithBypassNode(proxyUrl, bypassDomains) {
    const browser = await chromium.launch({
        proxy: {
            server: proxyUrl,
            bypass: bypassDomains // e.g., ["localhost", "*.internal-domain.com"]
        }
    });
    const page = await browser.newPage();
    await page.goto("https://httpbin.org/ip"); // Пройдет через прокси
    await page.goto("http://localhost:8000"); // Не пройдет через прокси, если localhost в bypass
    console.log(await page.content());
    await browser.close();
}

// Пример использования
// setupProxyWithBypassNode("http://192.168.1.1:8080", ["localhost", "*.myinternal.net"]);

Использование SOCKS5 прокси

Playwright также поддерживает SOCKS5 прокси. Для этого достаточно указать схему socks5:// в URL прокси.

Python

from playwright.sync_api import sync_playwright

def setup_socks5_proxy_python(socks5_proxy_url: str):
    # socks5_proxy_url: e.g., "socks5://192.168.1.1:1080"
    with sync_playwright() as p:
        browser = p.chromium.launch(
            proxy={
                "server": socks5_proxy_url
            }
        )
        page = browser.new_page()
        page.goto("https://httpbin.org/ip")
        print(page.content())
        browser.close()

# Пример использования
# setup_socks5_proxy_python("socks5://user:pass@192.168.1.1:1080")

Node.js

const { chromium } = require('playwright');

async function setupSocks5ProxyNode(socks5ProxyUrl) {
    // socks5ProxyUrl: e.g., "socks5://192.168.1.1:1080"
    const browser = await chromium.launch({
        proxy: {
            server: socks5ProxyUrl
        }
    });
    const page = await browser.newPage();
    await page.goto("https://httpbin.org/ip");
    console.log(await page.content());
    await browser.close();
}

// Пример использования
// setupSocks5ProxyNode("socks5://user:pass@192.168.1.1:1080");

Управление несколькими прокси и ротация

Playwright настраивает прокси на уровне экземпляра браузера. Для использования разных прокси для разных запросов или сессий необходимо запускать отдельные экземпляры браузера для каждого прокси или реализовать логику ротации прокси на уровне вашего приложения.

Ротация прокси

Пример простой ротации прокси из списка.

Python

from playwright.sync_api import sync_playwright
import itertools

def rotate_proxies_python(proxy_list: list, num_sessions: int):
    proxy_cycle = itertools.cycle(proxy_list)

    for i in range(num_sessions):
        current_proxy = next(proxy_cycle)
        print(f"Запуск сессии {i+1} с прокси: {current_proxy}")
        with sync_playwright() as p:
            try:
                browser = p.chromium.launch(
                    proxy={
                        "server": current_proxy
                    }
                )
                page = browser.new_page()
                page.goto("https://httpbin.org/ip")
                print(f"IP для сессии {i+1}: {page.inner_text('body')}")
                browser.close()
            except Exception as e:
                print(f"Ошибка при использовании прокси {current_proxy}: {e}")

# Пример использования
# proxy_servers = [
#     "http://user1:pass1@proxy1.example.com:8080",
#     "http://user2:pass2@proxy2.example.com:8080",
#     "http://user3:pass3@proxy3.example.com:8080",
# ]
# rotate_proxies_python(proxy_servers, 5)

Node.js

const { chromium } = require('playwright');

async function rotateProxiesNode(proxyList, numSessions) {
    let proxyIndex = 0;

    for (let i = 0; i < numSessions; i++) {
        const currentProxy = proxyList[proxyIndex % proxyList.length];
        console.log(`Запуск сессии ${i+1} с прокси: ${currentProxy}`);

        try {
            const browser = await chromium.launch({
                proxy: {
                    server: currentProxy
                }
            });
            const page = await browser.newPage();
            await page.goto("https://httpbin.org/ip");
            console.log(`IP для сессии ${i+1}: ${await page.innerText('body')}`);
            await browser.close();
        } catch (e) {
            console.error(`Ошибка при использовании прокси ${currentProxy}: ${e.message}`);
        }
        proxyIndex++;
    }
}

// Пример использования
// const proxyServers = [
//     "http://user1:pass1@proxy1.example.com:8080",
//     "http://user2:pass2@proxy2.example.com:8080",
//     "http://user3:pass3@proxy3.example.com:8080",
// ];
// rotateProxiesNode(proxyServers, 5);

Устранение неполадок с прокси

При возникновении проблем с прокси-сервером в Playwright рассмотрите следующие шаги:

  • Проверка доступности прокси: Убедитесь, что прокси-сервер доступен и работает, используя инструменты командной строки (например, curl или wget с опцией --proxy).
  • Правильность учетных данных: Перепроверьте имя пользователя и пароль для прокси, если требуется аутентификация.
  • Формат URL: Убедитесь, что URL прокси указан в правильном формате (http://host:port, https://host:port, socks5://host:port).
  • Playwright логи: Включите подробные логи Playwright для диагностики сетевых запросов.
    • Node.js: Установите переменную окружения DEBUG=pw:browser.
    • Python: Используйте logging модуль или установите PWDEBUG=1 для открытия инспектора.
  • Целевой сайт: Проверьте, доступен ли целевой сайт без прокси, чтобы исключить проблемы с сайтом.
  • Брандмауэр: Убедитесь, что брандмауэр на вашей машине или на сервере не блокирует исходящие соединения к прокси-серверу.

Сравнение настройки прокси

Функция / Язык Python Node.js
Базовый прокси p.chromium.launch(proxy={"server": "http://host:port"}) chromium.launch({ proxy: { server: "http://host:port" } })
Прокси с Auth (URL) p.chromium.launch(proxy={"server": "http://user:pass@host:port"}) chromium.launch({ proxy: { server: "http://user:pass@host:port" } })
Прокси с Auth (поля) p.chromium.launch(proxy={"server": "http://host:port", "username": "user", "password": "pass"}) chromium.launch({ proxy: { server: "http://host:port", username: "user", password: "pass" } })
Обход прокси p.chromium.launch(proxy={"server": "...", "bypass": ["localhost", "*.domain.com"]}) chromium.launch({ proxy: { server: "...", bypass: ["localhost", "*.domain.com"] } })
SOCKS5 прокси p.chromium.launch(proxy={"server": "socks5://host:port"}) chromium.launch({ proxy: { server: "socks5://host:port" } })
Обновлено: 03.03.2026
Назад к категории

Попробуйте наши прокси

20,000+ прокси в 100+ странах мира