Как использовать Proxy с Selenium: Complete Guide
Настройте GProxy proxy с Selenium WebDriver для автоматизации браузера и парсинга. Охватывает Chrome, Firefox, headless режим и proxy аутентификацию.
Что вам понадобится
- ✓Установленный Python 3.8+
- ✓Установленный Selenium 4.x (pip install selenium)
- ✓ChromeDriver или GeckoDriver, соответствующий вашей версии браузера
- ✓Аккаунт GProxy с активным тарифным планом proxy
Пошаговая настройка
Установка Selenium
Установите Selenium и webdriver-manager
pip install selenium webdriver-manager
Настройка Chrome с proxy
Настройте Chrome WebDriver с использованием GProxy
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
opts = Options()
opts.add_argument('--proxy-server=http://proxy.gproxy.net:1000')
driver = webdriver.Chrome(options=opts)
Обработка аутентификации proxy
Для прокси с аутентификацией создайте расширение Chrome
import zipfile, json
manifest = {"version": "1.0.0", "manifest_version": 2,
"name": "Proxy Auth",
"permissions": ["proxy","webRequest","webRequestBlocking","<all_urls>"],
"background": {"scripts": ["background.js"]}}
bg_js = 'chrome.webRequest.onAuthRequired.addListener(function(d) { return {authCredentials: {username:"USER", password:"PASS"}}; }, {urls:["<all_urls>"]}, ["blocking"]);'
with zipfile.ZipFile('proxy_auth.zip','w') as zp:
zp.writestr('manifest.json', json.dumps(manifest))
zp.writestr('background.js', bg_js)
opts.add_extension('proxy_auth.zip')
Добавление логики ротации
Ротируйте IP, создавая новые экземпляры driver
def get_driver():
opts = Options()
opts.add_argument('--headless=new')
opts.add_argument('--proxy-server=http://proxy.gproxy.net:1000')
return webdriver.Chrome(options=opts)
for url in urls:
driver = get_driver()
driver.get(url)
# ... extract data
driver.quit()
Тестирование настройки
Проверьте, что proxy работает
driver.get('https://httpbin.org/ip')
print(driver.find_element('tag name', 'pre').text)
Примеры кода
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
import zipfile, json
def create_proxy_extension(proxy_host, proxy_port, proxy_user, proxy_pass):
manifest = {
"version": "1.0.0", "manifest_version": 2,
"name": "GProxy Auth",
"permissions": ["proxy", "webRequest", "webRequestBlocking", "<all_urls>"],
"background": {"scripts": ["background.js"]}
}
bg_js = f'chrome.webRequest.onAuthRequired.addListener(function(details) {{ return {{authCredentials: {{username: "{proxy_user}", password: "{proxy_pass}"}}}}; }}, {{urls: ["<all_urls>"]}}, ["blocking"]);'
ext_path = '/tmp/proxy_auth.zip'
with zipfile.ZipFile(ext_path, 'w') as zp:
zp.writestr('manifest.json', json.dumps(manifest))
zp.writestr('background.js', bg_js)
return ext_path
opts = Options()
opts.add_argument('--proxy-server=http://proxy.gproxy.net:1000')
opts.add_extension(create_proxy_extension('proxy.gproxy.net', 1000, 'USER', 'PASS'))
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=opts)
driver.get('https://httpbin.org/ip')
print(driver.find_element('tag name', 'pre').text)
driver.quit()
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
opts = Options()
opts.set_preference('network.proxy.type', 1)
opts.set_preference('network.proxy.http', 'proxy.gproxy.net')
opts.set_preference('network.proxy.http_port', 1000)
opts.set_preference('network.proxy.ssl', 'proxy.gproxy.net')
opts.set_preference('network.proxy.ssl_port', 1000)
driver = webdriver.Firefox(options=opts)
driver.get('https://httpbin.org/ip')
print(driver.page_source)
driver.quit()
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from concurrent.futures import ThreadPoolExecutor
def scrape_with_proxy(url):
opts = Options()
opts.add_argument('--headless=new')
opts.add_argument('--proxy-server=http://proxy.gproxy.net:1000')
opts.add_argument('--no-sandbox')
driver = webdriver.Chrome(options=opts)
try:
driver.set_page_load_timeout(30)
driver.get(url)
return driver.page_source
finally:
driver.quit()
urls = ['https://example.com/page1', 'https://example.com/page2']
with ThreadPoolExecutor(max_workers=4) as pool:
results = list(pool.map(scrape_with_proxy, urls))
Зачем использовать proxy в Selenium?
Selenium автоматизирует реальные браузеры, что делает его идеальным для скрапинга сайтов с большим количеством JavaScript. Однако запуск автоматизированных браузеров с одного IP быстро активирует анти-бот системы. Более 10M+ резидентных IP от GProxy позволяют вам ротировать выходной IP вашего браузера, благодаря чему каждая сессия выглядит как уникальный посетитель из любой из 150+ стран.
Настройка proxy в Chrome WebDriver
Chrome поддерживает конфигурацию proxy через аргументы ChromeOptions. Для простых настроек proxy без аутентификации передайте аргумент --proxy-server. Для прокси с аутентификацией, таких как GProxy, вам понадобится расширение Chrome, которое обрабатывает аутентификацию proxy, так как Chrome не поддерживает формат username:password в URL proxy нативном уровне.
Настройка proxy в Firefox WebDriver
Firefox управляет конфигурацией proxy через настройки FirefoxProfile или Options. В отличие от Chrome, Firefox поддерживает аутентификацию proxy через настройки профиля, что делает его настройку с аутентифицированными эндпоинтами GProxy немного проще.
Особенности Headless режима
Запуск Selenium в режиме headless часто используется для развертывания на серверах. И Chrome, и Firefox поддерживают работу в headless режиме с proxy. Обратите внимание, что некоторые анти-бот системы обнаруживают headless браузеры — резидентные IP от GProxy помогают в этом, но также рассмотрите возможность использования undetected-chromedriver или добавления реалистичных отпечатков браузера.
Стратегия ротации proxy
В отличие от библиотек HTTP, Selenium поддерживает сессию браузера, поэтому вы не можете легко ротировать proxy для каждого запроса. Вместо этого ротируйте их для каждой сессии: создавайте новый экземпляр WebDriver с другим proxy для каждой задачи. Backconnect эндпоинт GProxy упрощает это — каждое новое соединение автоматически получает свежий IP.
Советы по производительности
Автоматизация браузера ресурсоемка. Чтобы максимизировать пропускную способность: используйте headless режим, отключайте загрузку изображений и CSS, когда это не требуется, устанавливайте тайм-ауты загрузки страниц и запускайте несколько экземпляров браузера параллельно с различными эндпоинтами GProxy для разнообразия IP.
Сценарии применения
JavaScript-Heavy Scraping
Скрапинг SPA и динамических веб-сайтов, требующих полного рендеринга в браузере.
Form Automation
Автоматизация отправки форм и многошаговых рабочих процессов через проксированные браузеры.
Visual Testing
Создание скриншотов из различных гео-локаций с использованием целевых резидентных прокси.
Account Management
Управление несколькими аккаунтами с уникальными IP на каждую сессию для безопасной автоматизации.
FAQ
Работает ли Selenium с SOCKS5 прокси? +
Можно ли менять прокси в середине сессии? +
Как избежать обнаружения при использовании Selenium? +
Selenium медленнее, чем requests? +
Готовы попробовать?
Начните с GProxy за минуты — резидентные прокси от $0.85/GB, IPv6 от $0.03/прокси, оплата по факту использования.
