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

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

Подробное руководство по настройке прокси в Selenium. Примеры кода для Python, Java, C# помогут вам быстро интегрировать GProxy и повысить анонимность. Идеально для веб-скрейпинга.

Python Браузер

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

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

Использование прокси-серверов с Selenium предоставляет несколько преимуществ для автоматизации веб-браузеров:

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

Типы прокси и методы аутентификации

Selenium поддерживает несколько типов прокси, каждый из которых имеет свои особенности:

  • HTTP/HTTPS прокси: Наиболее распространенный тип. HTTP-прокси обрабатывают трафик по протоколам HTTP/HTTPS. Для HTTPS трафика прокси работает как туннель (CONNECT метод).
  • SOCKS прокси (SOCKS4, SOCKS5): Прокси-серверы SOCKS (Socket Secure) работают на более низком уровне, чем HTTP-прокси, и могут передавать любой тип сетевого трафика. SOCKS5 поддерживает аутентификацию и UDP-трафик, в отличие от SOCKS4.

Методы аутентификации:

  • Без аутентификации: Прокси-сервер не требует учетных данных.
  • Базовая аутентификация (Basic Authentication): Учетные данные (логин/пароль) передаются в заголовке HTTP-запроса в кодировке Base64. Для прокси это может проявляться как всплывающее окно аутентификации в браузере.
  • Дайджест-аутентификация (Digest Authentication): Более безопасный метод, использующий хеширование для защиты учетных данных.

Общий подход к настройке прокси в Selenium

Настройка прокси в Selenium осуществляется через объект Proxy и установку его в DesiredCapabilities или непосредственно в опции конкретного браузера (ChromeOptions, FirefoxOptions).

Общая логика:
1. Создание экземпляра Proxy.
2. Установка типа прокси и адреса (IP:порт).
3. Применение объекта Proxy к опциям браузера или DesiredCapabilities.

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

Базовый HTTP/HTTPS прокси (без аутентификации)

Для настройки HTTP/HTTPS прокси без аутентификации используется класс selenium.webdriver.Proxy.

from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy, ProxyType
from selenium.webdriver.chrome.options import Options

# Параметры прокси
PROXY_HOST = 'your_proxy_host'
PROXY_PORT = 8080
PROXY_ADDRESS = f"{PROXY_HOST}:{PROXY_PORT}"

# Создание объекта Proxy
proxy = Proxy()
proxy.proxy_type = ProxyType.MANUAL
proxy.http_proxy = PROXY_ADDRESS
proxy.ssl_proxy = PROXY_ADDRESS # Можно использовать тот же адрес для HTTPS

# Настройка опций Chrome
chrome_options = Options()
chrome_options.add_argument(f'--proxy-server={PROXY_ADDRESS}')

# Или через DesiredCapabilities (устаревший, но рабочий метод для некоторых случаев)
# capabilities = webdriver.DesiredCapabilities.CHROME
# proxy.add_to_capabilities(capabilities)
# driver = webdriver.Chrome(options=chrome_options, desired_capabilities=capabilities)

# Запуск драйвера с прокси
driver = webdriver.Chrome(options=chrome_options)
driver.get("http://whatsmyip.org/") # Пример сайта для проверки IP
# ... дальнейшие действия
driver.quit()

Настройка прокси с аутентификацией (HTTP/HTTPS)

Selenium WebDriver не предоставляет прямого API для обработки всплывающих окон базовой или дайджест-аутентификации в браузере. Для HTTP/HTTPS прокси с аутентификацией рекомендуется использовать библиотеку selenium-wire, которая расширяет Selenium WebDriver, позволяя перехватывать и изменять сетевые запросы.

from seleniumwire import webdriver
import time

# Параметры прокси с аутентификацией
PROXY_HOST = 'your_auth_proxy_host'
PROXY_PORT = 8080
PROXY_USER = 'your_username'
PROXY_PASS = 'your_password'

# Настройка опций selenium-wire
options = {
    'proxy': {
        'http': f'http://{PROXY_USER}:{PROXY_PASS}@{PROXY_HOST}:{PROXY_PORT}',
        'https': f'https://{PROXY_USER}:{PROXY_PASS}@{PROXY_HOST}:{PROXY_PORT}',
        'no_proxy': 'localhost,127.0.0.1' # Исключения
    }
}

# Запуск драйвера Chrome с selenium-wire и прокси
driver = webdriver.Chrome(seleniumwire_options=options)
driver.get("http://whatsmyip.org/")
time.sleep(5) # Дать время на загрузку
# ...
driver.quit()

SOCKS прокси

Для SOCKS прокси Selenium поддерживает явное указание типа SOCKS и, для SOCKS5, аутентификационных данных.

from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy, ProxyType
from selenium.webdriver.chrome.options import Options

# Параметры SOCKS прокси
SOCKS_PROXY_HOST = 'your_socks_proxy_host'
SOCKS_PROXY_PORT = 1080
SOCKS_USER = 'your_socks_username' # Для SOCKS5 с аутентификацией
SOCKS_PASS = 'your_socks_password' # Для SOCKS5 с аутентификацией

proxy = Proxy()
proxy.proxy_type = ProxyType.MANUAL
proxy.socks_proxy = f"{SOCKS_PROXY_HOST}:{SOCKS_PROXY_PORT}"
proxy.socks_version = 5 # Для SOCKS5
proxy.socks_username = SOCKS_USER # Устанавливается только для SOCKS5
proxy.socks_password = SOCKS_PASS # Устанавливается только для SOCKS5

chrome_options = Options()
# Для SOCKS прокси лучше использовать объект Proxy напрямую через capabilities
capabilities = webdriver.DesiredCapabilities.CHROME
proxy.add_to_capabilities(capabilities)

driver = webdriver.Chrome(options=chrome_options, desired_capabilities=capabilities)
driver.get("http://whatsmyip.org/")
# ...
driver.quit()

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

Базовый HTTP/HTTPS прокси (без аутентификации)

В Java настройка прокси выполняется с использованием класса org.openqa.selenium.Proxy и добавлением его в ChromeOptions или FirefoxOptions.

import org.openqa.selenium.Proxy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;

public class ProxyConfigJava {

    public static void main(String[] args) {
        // Установка системного свойства для ChromeDriver (путь к драйверу)
        System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");

        String proxyHost = "your_proxy_host";
        int proxyPort = 8080;
        String proxyAddress = proxyHost + ":" + proxyPort;

        // Создание объекта Proxy
        Proxy proxy = new Proxy();
        proxy.setProxyType(Proxy.ProxyType.MANUAL);
        proxy.setHttpProxy(proxyAddress);
        proxy.setSslProxy(proxyAddress); // Для HTTPS трафика

        // Настройка ChromeOptions
        ChromeOptions chromeOptions = new ChromeOptions();
        chromeOptions.setCapability("proxy", proxy); // Добавление прокси через capability

        // Запуск ChromeDriver с прокси
        WebDriver driver = new ChromeDriver(chromeOptions);
        driver.get("http://whatsmyip.org/");
        // ... дальнейшие действия
        driver.quit();

        // Пример для Firefox:
        // System.setProperty("webdriver.gecko.driver", "/path/to/geckodriver");
        // FirefoxOptions firefoxOptions = new FirefoxOptions();
        // firefoxOptions.setCapability("proxy", proxy);
        // WebDriver firefoxDriver = new FirefoxDriver(firefoxOptions);
        // firefoxDriver.get("http://whatsmyip.org/");
        // firefoxDriver.quit();
    }
}

Настройка прокси с аутентификацией (HTTP/HTTPS)

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

import org.openqa.selenium.Proxy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

public class ProxyAuthJava {

    public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");

        String proxyHost = "your_auth_proxy_host";
        int proxyPort = 8080;
        String proxyUser = "your_username";
        String proxyPass = "your_password";

        // Попытка передать учетные данные в строке прокси (не всегда работает для browser-level auth dialogs)
        String proxyAuthAddress = String.format("%s:%s@%s:%d", proxyUser, proxyPass, proxyHost, proxyPort);

        Proxy proxy = new Proxy();
        proxy.setProxyType(Proxy.ProxyType.MANUAL);
        proxy.setHttpProxy(proxyAuthAddress);
        proxy.setSslProxy(proxyAuthAddress);

        ChromeOptions chromeOptions = new ChromeOptions();
        chromeOptions.setCapability("proxy", proxy);

        WebDriver driver = new ChromeDriver(chromeOptions);
        driver.get("http://whatsmyip.org/");
        // Если прокси требует браузерную аутентификацию, этот метод может не сработать.
        // В таких случаях требуются сторонние решения или прокси, обрабатывающие аутентификацию до браузера.
        driver.quit();
    }
}

SOCKS прокси

Для SOCKS5 прокси Selenium в Java поддерживает указание учетных данных напрямую через объект Proxy.

import org.openqa.selenium.Proxy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

public class SocksProxyJava {

    public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");

        String socksProxyHost = "your_socks_proxy_host";
        int socksProxyPort = 1080;
        String socksUser = "your_socks_username"; // Для SOCKS5 с аутентификацией
        String socksPass = "your_socks_password"; // Для SOCKS5 с аутентификацией

        Proxy proxy = new Proxy();
        proxy.setProxyType(Proxy.ProxyType.MANUAL);
        proxy.setSocksProxy(socksProxyHost + ":" + socksProxyPort);
        proxy.setSocksVersion(5); // Указываем SOCKS5
        proxy.setSocksUsername(socksUser); // Учетные данные для SOCKS5
        proxy.setSocksPassword(socksPass);

        ChromeOptions chromeOptions = new ChromeOptions();
        chromeOptions.setCapability("proxy", proxy);

        WebDriver driver = new ChromeDriver(chromeOptions);
        driver.get("http://whatsmyip.org/");
        driver.quit();
    }
}

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

Базовый HTTP/HTTPS прокси (без аутентификации)

В C# настройка прокси аналогична Java, используя класс OpenQA.Selenium.Proxy и опции браузера.

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Firefox;

public class ProxyConfigCSharp
{
    public static void Main(string[] args)
    {
        string proxyHost = "your_proxy_host";
        int proxyPort = 8080;
        string proxyAddress = $"{proxyHost}:{proxyPort}";

        // Создание объекта Proxy
        Proxy proxy = new Proxy();
        proxy.Kind = ProxyKind.Manual;
        proxy.HttpProxy = proxyAddress;
        proxy.SslProxy = proxyAddress; // Для HTTPS трафика

        // Настройка ChromeOptions
        ChromeOptions chromeOptions = new ChromeOptions();
        chromeOptions.Proxy = proxy; // Добавление прокси через свойство Proxy

        // Запуск ChromeDriver с прокси
        IWebDriver driver = new ChromeDriver(chromeOptions);
        driver.Navigate().GoToUrl("http://whatsmyip.org/");
        // ... дальнейшие действия
        driver.Quit();

        // Пример для Firefox:
        // FirefoxOptions firefoxOptions = new FirefoxOptions();
        // firefoxOptions.Proxy = proxy;
        // IWebDriver firefoxDriver = new FirefoxDriver(firefoxOptions);
        // firefoxDriver.Navigate().GoToUrl("http://whatsmyip.org/");
        // firefoxDriver.Quit();
    }
}

Настройка прокси с аутентификацией (HTTP/HTTPS)

Как и в Java, прямое управление всплывающими окнами аутентификации HTTP/HTTPS прокси в Selenium для C# отсутствует. Возможность использования username:password@host:port в строке прокси зависит от драйвера и браузера.

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;

public class ProxyAuthCSharp
{
    public static void Main(string[] args)
    {
        string proxyHost = "your_auth_proxy_host";
        int proxyPort = 8080;
        string proxyUser = "your_username";
        string proxyPass = "your_password";

        // Попытка передать учетные данные в строке прокси
        string proxyAuthAddress = $"{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}";

        Proxy proxy = new Proxy();
        proxy.Kind = ProxyKind.Manual;
        proxy.HttpProxy = proxyAuthAddress;
        proxy.SslProxy = proxyAuthAddress;

        ChromeOptions chromeOptions = new ChromeOptions();
        chromeOptions.Proxy = proxy;

        IWebDriver driver = new ChromeDriver(chromeOptions);
        driver.Navigate().GoToUrl("http://whatsmyip.org/");
        // Эффективность этого метода для обработки браузерной аутентификации не гарантирована.
        driver.Quit();
    }
}

SOCKS прокси

Для SOCKS5 прокси с аутентификацией в C# используются свойства SocksUserName и SocksPassword объекта Proxy.

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;

public class SocksProxyCSharp
{
    public static void Main(string[] args)
    {
        string socksProxyHost = "your_socks_proxy_host";
        int socksProxyPort = 1080;
        string socksUser = "your_socks_username"; // Для SOCKS5 с аутентификацией
        string socksPass = "your_socks_password"; // Для SOCKS5 с аутентификацией

        Proxy proxy = new Proxy();
        proxy.Kind = ProxyKind.Manual;
        proxy.SocksProxy = $"{socksProxyHost}:{socksProxyPort}";
        proxy.SocksVersion = 5; // Указываем SOCKS5
        proxy.SocksUserName = socksUser; // Учетные данные для SOCKS5
        proxy.SocksPassword = socksPass;

        ChromeOptions chromeOptions = new ChromeOptions();
        chromeOptions.Proxy = proxy;

        IWebDriver driver = new ChromeDriver(chromeOptions);
        driver.Navigate().GoToUrl("http://whatsmyip.org/");
        driver.Quit();
    }
}

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

Язык Тип прокси Аутентификация Особенности и рекомендации
Python HTTP/HTTPS (без аутентификации) Не требуется Используется selenium.webdriver.common.proxy.Proxy и chrome_options.add_argument('--proxy-server=...').
HTTP/HTTPS (с аутентификацией) Basic/Digest Рекомендуется selenium-wire для перехвата и изменения запросов. Прямая обработка браузерных диалогов Selenium'ом отсутствует.
SOCKS (SOCKS5) С аутентификацией proxy.socks_proxy, proxy.socks_version, proxy.socks_username, proxy.socks_password.
Java HTTP/HTTPS (без аутентификации) Не требуется org.openqa.selenium.Proxy и chromeOptions.setCapability("proxy", proxy).
HTTP/HTTPS (с аутентификацией) Basic/Digest Прямой поддержки для браузерных диалогов нет. Возможность username:password@host:port в строке httpProxy зависит от драйвера/браузера/прокси. Для надежной работы часто требуются внешние решения или прокси, обрабатывающие аутентификацию до браузера.
SOCKS (SOCKS5) С аутентификацией proxy.setSocksProxy(), proxy.setSocksVersion(), proxy.setSocksUsername(), proxy.setSocksPassword().
C# HTTP/HTTPS (без аутентификации) Не требуется OpenQA.Selenium.Proxy и chromeOptions.Proxy = proxy;.
HTTP/HTTPS (с аутентификацией) Basic/Digest Аналогично Java, прямая поддержка отсутствует. username:password@host:port в строке HttpProxy не гарантирует решение проблемы браузерных диалогов.
SOCKS (SOCKS5) С аутентификацией proxy.SocksProxy, proxy.SocksVersion, proxy.SocksUserName, proxy.SocksPassword.
Обновлено: 03.03.2026
Назад к категории

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

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