Cómo usar proxies con Selenium: Guía completa
Configura proxies de GProxy con Selenium WebDriver para browser automation y scraping. Cubre Chrome, Firefox, headless mode y proxy authentication.
Requisitos previos
- ✓Python 3.8+ instalado
- ✓Selenium 4.x instalado (pip install selenium)
- ✓ChromeDriver o GeckoDriver compatible con su versión de navegador
- ✓Cuenta de GProxy con un plan de proxy activo
Configuración paso a paso
Instalar Selenium
Instalar Selenium y webdriver-manager
pip install selenium webdriver-manager
Configurar Chrome con proxy
Configurar Chrome WebDriver con 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)
Manejar la autenticación del proxy
Para proxies con autenticación, crear una extensión de 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')
Añadir lógica de rotación
Rotar IPs creando nuevas instancias del 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()
Probar la configuración
Verificar que el proxy está funcionando
driver.get('https://httpbin.org/ip')
print(driver.find_element('tag name', 'pre').text)
Ejemplos de código
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))
¿Por qué usar proxies con Selenium?
Selenium automatiza navegadores reales, lo que lo hace ideal para el scraping de sitios web con mucho JavaScript. Sin embargo, ejecutar navegadores automatizados desde una única IP activa rápidamente los sistemas anti-bot. Los más de 10M+ de residential IPs de GProxy le permiten rotar la IP de salida de su navegador, haciendo que cada sesión aparezca como un visitante único de cualquiera de los 150+ países.
Configuración de proxy en Chrome WebDriver
Chrome admite la configuración de proxy a través de los argumentos de ChromeOptions. Para configuraciones de proxy simples sin autenticación, pase el argumento --proxy-server. Para proxies con autenticación como GProxy, necesitará una extensión de Chrome que gestione la autenticación del proxy, ya que Chrome no admite de forma nativa el formato username:password en la URL del proxy.
Configuración de proxy en Firefox WebDriver
Firefox gestiona la configuración del proxy a través de las preferencias de FirefoxProfile o Options. A diferencia de Chrome, Firefox admite la autenticación de proxy a través de los ajustes del perfil, lo que facilita ligeramente la configuración con los endpoints autenticados de GProxy.
Consideraciones del modo Headless
Ejecutar Selenium en modo headless es común para despliegues en servidores. Tanto Chrome como Firefox admiten la operación headless con proxies. Tenga en cuenta que algunos sistemas anti-bot detectan navegadores headless; las residential IPs de GProxy ayudan, pero considere también usar undetected-chromedriver o añadir huellas digitales de navegador realistas.
Estrategia de rotación de proxy
A diferencia de las librerías HTTP, Selenium mantiene una sesión de navegador, por lo que no se pueden rotar proxies fácilmente por cada solicitud. En su lugar, rote por sesión: cree una nueva instancia de WebDriver con un proxy diferente para cada tarea. El endpoint de backconnect de GProxy simplifica esto: cada nueva conexión obtiene automáticamente una IP fresca.
Consejos de rendimiento
La automatización del navegador consume muchos recursos. Para maximizar el rendimiento: use el modo headless, desactive la carga de imágenes y CSS cuando no sean necesarios, establezca tiempos de espera de carga de página y ejecute múltiples instancias de navegador en paralelo con diferentes endpoints de GProxy para obtener diversidad de IP.
Casos de uso
JavaScript-Heavy Scraping
Scrape SPAs y sitios web dinámicos que requieren renderizado completo del navegador.
Form Automation
Automatice el envío de formularios y flujos de trabajo de varios pasos a través de navegadores con proxy.
Visual Testing
Tome capturas de pantalla desde diferentes ubicaciones geográficas utilizando proxies residenciales segmentados.
Account Management
Gestione múltiples cuentas con IPs únicas por sesión para una automatización segura.
FAQ
¿Funciona Selenium con proxies SOCKS5? +
¿Puedo rotar proxies a mitad de la sesión? +
¿Cómo evito la detección con Selenium? +
¿Es Selenium más lento que requests? +
¿Listo para empezar?
Comience con GProxy en minutos — proxies residenciales desde $0.85/GB, IPv6 desde $0.03/proxy, pago por uso.
