SeleniumBase es un marco de pruebas construido sobre Selenium, y acepta proxies con credenciales. Eso es justo lo que Selenium por sí solo no consigue, y por eso el rodeo merece la pena en cualquier trabajo de scraping.
El problema de los proxies en Selenium
Selenium puede fijar un proxy, pero no autenticarse en él: Chrome ignora el usuario y la contraseña en el argumento --proxy-server y abre en su lugar una ventana de acceso que el WebDriver no puede rellenar. La herramienta que antes cubría ese hueco, SeleniumWire, lleva tiempo sin mantenimiento y ya no es recomendable.
Primeros pasos
Instalación
pip install seleniumbaseUn caso de prueba
La siguiente prueba pide la información en JSON de IPinfo y la escribe en la consola: así ves de inmediato qué dirección se muestra hacia fuera.
from seleniumbase import BaseCase
from selenium.webdriver.common.by import By
import json
class ProxyTest(BaseCase):
def test_proxy(self):
# Abrir la página
self.driver.get("https://ipinfo.io/json")
# Leer la respuesta JSON
location_info = json.loads(self.driver.find_element(By.TAG_NAME, "body").text)
# Imprimir el contenido
for k, v in location_info.items():
print(f"{k}: {v}")Ejecutar la prueba
Se lanza con pytest.
Sin proxy
pytest proxy_test.py -sEn la consola aparecen tu propia IP y tu ubicación.
Con proxy
pytest proxy_test.py --proxy=USUARIO:CONTRASENA@pr.proxynet.io:8000 -sEl usuario, la contraseña, el nombre de host y el puerto están en tu panel de Proxynet. La salida se parece a esto:
=================================== test session starts ===================================
platform linux -- Python 3.10.12, pytest-8.3.4, pluggy-1.5.0
plugins: seleniumbase-4.34.6, rerunfailures-15.0, xdist-3.6.1
collected 1 item
proxy_test.py ip: 144.202.4.246
hostname: 144-202-4-246.pxnet.io
city: Piscataway
region: New Jersey
country: US
timezone: America/New_York
.
==================================== 1 passed in 3.25s ====================================La dirección ha cambiado y no ha aparecido ninguna ventana de acceso: ese es todo el propósito.
Rotar proxies
Con lo que trae Python de serie montas una rotación sencilla. El script siguiente lanza la misma prueba una vez por país:
import subprocess
USER = "USUARIO"
PASSWORD = "CONTRASENA"
# Países desde los que debe salir la petición
countries = ["us", "es", "gb", "tr"]
for country in countries:
# En Proxynet el país de destino va dentro del nombre de usuario
proxy = f"{USER}-country-{country}:{PASSWORD}@pr.proxynet.io:8000"
subprocess.run(f"pytest proxy_test.py --proxy={proxy} -s", shell=True)La forma exacta de indicar el país está en tu panel y cambia según el producto. Cómo resolver lo mismo dentro de un script, en vez de desde la línea de comandos, lo explicamos en Cómo rotar proxies en Python.
Conclusión
Con SeleniumBase, una prueba de Selenium sale por un proxy con autenticación, comprueba la ubicación visible y la cambia entre ejecuciones: tres cosas que con Selenium a secas cuestan bastante más trabajo.
Cuáles de nuestros productos de proxy sirven para esto:




