Ir al contenido

Cómo usar proxies con Selenium: Guía completa

TL;DR

Configura proxies de GProxy con Selenium WebDriver para browser automation y scraping. Cubre Chrome, Firefox, headless mode y proxy authentication.

Idioma: Python

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

1

Instalar Selenium

Instalar Selenium y webdriver-manager

pip install selenium webdriver-manager
2

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)
3

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')
4

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()
5

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

Chrome con Extensión Proxy Auth · python
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()
Firefox con Proxy · python
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()
Rotación Multi-Session · python
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.

Consejos profesionales
Use undetected-chromedriver para omitir Cloudflare y sistemas anti-bot. Desactive las imágenes con prefs para acelerar la carga de páginas cuando solo necesite texto. Establezca page_load_timeout en 30s para evitar bloqueos en páginas lentas. Use sesiones sticky de GProxy para flujos de trabajo de varias páginas que necesiten IP consistentes.

FAQ

¿Funciona Selenium con proxies SOCKS5? +
Sí, usa --proxy-server=socks5://host:port para Chrome. Firefox admite SOCKS5 a través de las preferencias del perfil.
¿Puedo rotar proxies a mitad de la sesión? +
No sin reiniciar el navegador. Para la rotación por solicitud, considera usar Playwright o Puppeteer, que admiten cambios de proxy por contexto.
¿Cómo evito la detección con Selenium? +
Usa undetected-chromedriver, IPs residenciales de GProxy, user agents realistas y evita los patrones de detección de headless.
¿Es Selenium más lento que requests? +
Sí, la automatización del navegador es 5-10 veces más lenta. Usa Selenium solo para contenido renderizado con JS; usa requests/Scrapy para páginas estáticas.

¿Listo para empezar?

Comience con GProxy en minutos — proxies residenciales desde $0.85/GB, IPv6 desde $0.03/proxy, pago por uso.

Otras integraciones

support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.