Modo UC de SeleniumBase con Proxy No Funciona: Causas y Soluciones
La queja es siempre la misma: el Modo UC supera a Cloudflare sin un proxy y falla con uno, o la IP simplemente nunca cambia. Ambos síntomas tienen causas concretas, y ninguno es un error de SeleniumBase.
Busca seleniumbase uc mode proxy y llegas a las mismas tres páginas: una pregunta de Stack Overflow donde la IP nunca cambia a través de tres servicios de proxy diferentes, el problema de GitHub seleniumbase/SeleniumBase#3046 ("El modo UC no funciona con proxy", presentado en agosto de 2024 en la versión 4.29.9, cerrado como no reproducible), y un hilo de discusión donde la respuesta del mantenedor tiene dos oraciones: los proxies con autenticación necesitan una extensión de Chrome, y simplemente podrías tener un mal proxy. Ambas partes de esa respuesta son correctas, y juntas explican casi todos los fallos. Aquí está la versión larga, más el orden de depuración que encuentra la causa.
Dos fallos diferentes que parecen idénticos
Antes de cambiar algo, determina qué problema tienes, porque las soluciones no comparten nada. Fallo A: la IP de salida nunca cambia. Tu script se ejecuta, las páginas se cargan, y el objetivo ve tu dirección real: el proxy nunca estuvo en el camino. Fallo B: el proxy funciona y el sitio te bloquea. El Modo UC pasa por Cloudflare sin proxy, luego enfrenta un bucle de desafíos en el momento en que agregas uno, que es exactamente lo que describe el problema #3046. El Fallo A es un problema de conexión. El Fallo B es un problema de reputación de IP. Tratar uno como el otro es la razón por la que estos hilos se extienden por páginas.
Por qué los proxies autenticados necesitan una extensión — y por qué eso importa en el Modo UC
Chrome no tiene una forma de línea de comandos para proporcionar credenciales de proxy. La bandera --proxy-server descarta silenciosamente cualquier user:pass@ que insertes, y el desafío resultante 407 aparece como un diálogo nativo que WebDriver no puede tocar. Así que cuando pasas una cadena de proxy que contiene credenciales, SeleniumBase genera una pequeña extensión de Chrome sobre la marcha, la escribe en una carpeta temporal y la carga al inicio para que pueda responder al desafío por ti. Ese es el mecanismo al que se refiere el mantenedor, y el mismo que se describe en nuestra guía sobre proxies autenticados en Selenium.
El Modo UC agrega piezas móviles alrededor de eso: lanza Chrome primero, adjunta un chromedriver parcheado después, y desconecta el controlador durante acciones sigilosas. La extensión debe cargarse antes de que cualquiera de esas cosas suceda, y si no lo hace, nada genera una excepción — Chrome navega directamente, y obtienes el Fallo A. La causa habitual es la desviación de versión. Chrome 137 cambió el comportamiento de las extensiones lo suficiente como para romper la autenticación de proxy hasta que SeleniumBase lanzó una actualización, por lo que una versión antigua fijada más un Chrome actual falla silenciosamente cada vez. Actualiza primero, depura después.
Formatos de proxy del Modo UC de SeleniumBase que realmente funcionan
Los errores de formato representan una sorprendente proporción de los informes de "proxy ignorado". SeleniumBase toma el proxy como una cadena simple, con o sin credenciales, tanto en los gestores Driver como SB y en la línea de comandos:
from seleniumbase import Driver, SB
# Authenticated: SeleniumBase builds a proxy-auth extension for this
driver = Driver(uc=True, proxy="USER:PASS@gate.quantumproxies.io:PORT")
# IP-whitelisted: no credentials, no extension
with SB(uc=True, proxy="gate.quantumproxies.io:PORT") as sb:
sb.uc_open_with_reconnect("https://httpbin.org/ip", 4)
print(sb.get_text("body")) # must NOT be your own IP
# Same thing from pytest:
# pytest test_x.py --uc --proxy=USER:PASS@gate.quantumproxies.io:PORT
Tres reglas que se derivan de esto. No envuelvas la cadena en http:// y credenciales al mismo tiempo a menos que hayas verificado que tu versión lo maneja — USER:PASS@HOST:PORT es la forma documentada. No esperes que SOCKS5 con credenciales funcione en absoluto: esa es una limitación de Chromium, idéntica a la que cubrimos para autenticación SOCKS5 en Playwright, y ningún marco lo soluciona. Y si tu contraseña contiene @ o :, cámbiala por algo alfanumérico en lugar de depurar un analizador.
La solución que elimina toda la clase de fallos
Si la máquina que ejecuta tu scraper tiene una IP pública estable, autentícala en lugar de la solicitud. Registra la dirección con tu proveedor — cada plan de QuantumProxies admite la lista blanca de IP junto con user:pass — luego pasa un simple host:port. Sin credenciales significa sin extensión: un componente menos que se rompe en una actualización de Chrome, un archivo menos cargado en un navegador que deseas mantener discreto. En un VPS este es el cambio de mayor valor en esta publicación.
El límite es topológico, no técnico: la lista blanca autentica una máquina, por lo que los contenedores autoescalados, los corredores de CI y cualquier cosa detrás de un NAT rotativo aún necesitan credenciales. Para esos, mantén la ruta de la extensión y mantén SeleniumBase actualizado.

Verifica la IP de salida antes de culpar al Modo UC
Este es el paso cero y la mayoría de las personas lo omite. Demuestra que el tráfico sale a través del proxy, en aislamiento, antes de tocar una configuración sigilosa. Prueba las mismas credenciales fuera del navegador primero — si curl no puede usarlas, ningún marco podrá:
# 1. Does the proxy work at all, outside any browser?
curl -x http://USER:PASS@gate.quantumproxies.io:PORT https://httpbin.org/ip
# 2. Is the toolchain current? (Chrome 137+ broke older extension handling)
pip install -U seleniumbase && sbase get chromedriver
# 3. Does the proxy work WITHOUT the stealth patches?
python -c "from seleniumbase import Driver; \
d=Driver(proxy='USER:PASS@gate.quantumproxies.io:PORT'); \
d.get('https://httpbin.org/ip'); \
print(d.find_element('tag name','body').text); d.quit()"
Si el paso 1 falla, el problema es el proxy o las credenciales. Si el paso 1 pasa y el paso 3 falla, el problema es la extensión o la versión de Chrome. Si ambos pasan y solo uc=True falla, entonces — y solo entonces — es una interacción del Modo UC. Saber qué salida realmente obtuviste importa tanto como saber que obtuviste una: nuestro verificador de calidad de IP gratuito informa la dirección, su tipo y su reputación, lo que marca la diferencia entre "el proxy funciona" y "el proxy pasará".
Cuando el proxy funciona y Cloudflare aún gana
Este es el Fallo B, y no es un error en nada. El Modo UC hace que el navegador parezca humano; no puede hacer que la red parezca residencial. Ruta un navegador sigiloso a través de un subred de centro de datos que ya quemaron otros cien scrapers y obtienes la versión difícil del desafío — la que nunca se resuelve por más veces que la hagas clic. Ningún marco de navegador resuelve eso, porque el veredicto se toma antes de que incluso se lea la huella digital. Nuestras notas sobre el error 1020 de Cloudflare y sobre evitar CAPTCHAs al hacer scraping terminan en el mismo lugar: el CAPTCHA es un síntoma, la reputación de IP es la causa.
Tres cosas cambian el resultado. Muévete a IPs residenciales: direcciones reales de hogares en más de 200 países llevan una reputación que un rango de centro de datos no puede. Usa una sesión pegajosa para cualquier cosa con un inicio de sesión o un carrito, ya que la rotación a mitad de flujo se lee como secuestro de sesión, y salidas rotativas para rastreos amplios sin estado. Y empareja el país de salida con la localidad que emulas — una salida alemana con una localidad en-US y una zona horaria de Nueva York se califica como una anomalía.
Dos detalles del entorno cierran el círculo. El Modo UC es detectable en modo sin cabeza, así que en Linux usa la pantalla virtual (xvfb=True) en lugar de headless=True — esa es la razón por la que varios informes de "funciona en Windows, falla en Ubuntu" se resuelven una vez que se arregla la pantalla, y por qué los ayudantes basados en PyAutoGUI como uc_gui_click_captcha() necesitan una pantalla para hacer clic en algo. Y prueba incognito=True de ambas maneras con un proxy de autenticación: las extensiones y el modo incógnito son una pareja frágil, y tus credenciales viajan en una extensión.

La lista de verificación de depuración, en orden
- Verifica que la IP de salida haya cambiado. Carga un endpoint de eco de IP y léelo. Todo lo que sigue es inútil hasta que esto pase.
- Prueba el proxy fuera del navegador con curl o requests, usando las mismas credenciales exactas.
- Actualiza SeleniumBase y el controlador. Los cambios de extensión de Chrome 137 rompieron la autenticación de proxy en versiones anteriores.
- Elimina temporalmente
uc=True. Si el proxy funciona en modo simple, has aislado la interacción. - Cambia a la lista blanca de IP si la máquina tiene una dirección fija — esto elimina la extensión de la imagen por completo.
- Usa xvfb, no sin cabeza, en Linux; el Modo UC es detectable sin cabeza y los ayudantes de CAPTCHA necesitan una pantalla.
- Solo ahora cambia las configuraciones de sigilo: alterna incógnito, aumenta
reconnect_time, luego cambia el tipo de proxy.
El Modo CDP, el sucesor documentado del Modo UC simple, no cambia nada de esto: las restricciones del proxy provienen de Chrome, no del marco, por lo que la misma lista de verificación se aplica. Para la vista cruzada de marcos de quién admite proxies autenticados, nuestro mapa de proxies de marcos anti-detección lo expone lado a lado.
Preguntas frecuentes
¿Por qué mi IP no cambia con el Modo UC de SeleniumBase?
Casi siempre porque la extensión de autenticación de proxy no se cargó, por lo que Chrome navegó directamente. Nada genera un error cuando eso sucede. Actualiza SeleniumBase, confirma que la cadena de proxy es USER:PASS@HOST:PORT, y prueba las mismas credenciales con curl. Si la máquina tiene una IP pública estable, ponla en lista blanca y elimina las credenciales por completo.
¿Por qué el Modo UC pasa por Cloudflare sin un proxy pero no con uno?
Porque tu propia conexión tiene una reputación limpia y la salida del proxy no. Los rangos compartidos de centros de datos están muy marcados, y una IP marcada obtiene el desafío difícil que ninguna automatización puede superar. Mueve el trabajo a salidas residenciales o móviles y prueba de nuevo antes de cambiar cualquier configuración sigilosa — el navegador nunca fue el problema.
¿Funciona el Modo UC de SeleniumBase con proxies SOCKS5?
Sin credenciales, sí. Con credenciales, no — Chromium nunca ha implementado la autenticación de nombre de usuario/contraseña SOCKS5, por lo que ningún marco de la familia Selenium puede agregarlo. Usa el endpoint HTTP del mismo gateway con credenciales, o pon en lista blanca tu IP y mantén el endpoint SOCKS5 sin autenticar.
¿Puedo ejecutar el Modo UC con un proxy en modo sin cabeza?
Puedes, pero no deberías. El Modo UC es detectable en modo sin cabeza, y los métodos de ayuda de CAPTCHA necesitan una pantalla real porque manejan el ratón a través de PyAutoGUI. En un servidor Linux usa xvfb=True para una pantalla virtual en su lugar; esa combinación es la que los ejemplos mantenidos apuntan.
¿Cómo uso la rotación de proxy con SeleniumBase?
Apunta a un gateway rotativo en lugar de gestionar una lista: cada nueva conexión obtiene una salida diferente del grupo, sin cambios de código. Para flujos que deben mantener una identidad a través de varias páginas, solicita una sesión pegajosa en los parámetros de nombre de usuario para que la salida se mantenga durante la ventana de sesión, y comienza un controlador nuevo por identidad.
El Modo UC no está luchando contra tu proxy. Está apilando una secuencia de lanzamiento sigilosa sobre un mecanismo de credenciales para el que Chrome nunca fue diseñado para la automatización, y luego una IP quemada termina el trabajo. Elimina la extensión mediante la lista blanca, verifica la salida antes de tocar cualquier otra cosa, y dale al navegador una IP que no haya sido ya gastada.