Як використовувати Proxy з Selenium: повний гайд
Налаштуйте GProxy proxy за допомогою Selenium WebDriver для автоматизації браузера та скрапінгу. Охоплює Chrome, Firefox, headless mode та proxy authentication.
Що вам знадобиться
- ✓Встановлений 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
Для 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. Для автентифікованих proxy, таких як 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
Автоматизація заповнення форм та багатоетапних робочих процесів через браузери з використанням proxy.
Visual Testing
Створення скріншотів з різних географічних локацій за допомогою таргетованих резидентських proxy.
Account Management
Керування кількома акаунтами з унікальними IP для кожної сесії для безпечної автоматизації.
FAQ
Чи працює Selenium з SOCKS5 проксі? +
Чи можу я ротувати проксі посеред сесії? +
Як уникнути виявлення з Selenium? +
Чи Selenium повільніший за requests? +
Готові спробувати?
Почніть з GProxy за хвилини — резидентні проксі від $0.85/GB, IPv6 від $0.03/проксі, оплата за використання.
