Mode UC de SeleniumBase : Proxy ne fonctionne pas : Causes et solutions

La plainte est toujours la même : le mode UC bat Cloudflare sans proxy et échoue avec un, ou l'IP ne change tout simplement jamais. Les deux symptômes ont des causes concrètes — et aucun n'est un bug de SeleniumBase.

Recherchez seleniumbase uc mode proxy et vous tombez sur les mêmes trois pages : une question Stack Overflow où l'IP ne change jamais avec trois services de proxy différents, le problème GitHub seleniumbase/SeleniumBase#3046 ("Le mode UC ne fonctionne pas avec le proxy", déposé en août 2024 sur la version 4.29.9, fermé comme impossible à reproduire), et un fil de discussion où la réponse du mainteneur tient en deux phrases : les proxies avec authentification nécessitent une extension Chrome, et vous avez peut-être simplement un mauvais proxy. Les deux parties de cette réponse sont correctes, et ensemble elles expliquent presque tous les échecs. Voici la version longue, plus l'ordre de débogage qui trouve la cause.

Deux échecs différents qui se ressemblent

Avant de changer quoi que ce soit, déterminez quel problème vous avez, car les solutions ne partagent rien. Échec A : l'IP de sortie ne change jamais. Votre script s'exécute, les pages se chargent, et la cible voit votre véritable adresse — le proxy n'a jamais été dans le chemin. Échec B : le proxy fonctionne et le site vous bloque. Le mode UC passe à travers Cloudflare sans proxy, puis rencontre une boucle de défi dès que vous en ajoutez un, ce qui est exactement ce que décrit le problème #3046. L'échec A est un problème de plomberie. L'échec B est un problème de réputation IP. Traiter l'un comme l'autre est la raison pour laquelle ces discussions s'étendent sur des pages.

Pourquoi les proxies authentifiés ont besoin d'une extension — et pourquoi cela compte en mode UC

Chrome n'a pas de moyen en ligne de commande pour fournir des identifiants de proxy. Le drapeau --proxy-server ignore silencieusement tout user:pass@ que vous intégrez, et le défi 407 qui en résulte apparaît comme une boîte de dialogue native que WebDriver ne peut pas toucher. Donc, lorsque vous passez une chaîne de proxy contenant des identifiants, SeleniumBase génère une petite extension Chrome à la volée, l'écrit dans un dossier temporaire, et la charge au démarrage pour pouvoir répondre au défi pour vous. C'est le mécanisme auquel le mainteneur fait référence, et le même que celui décrit dans notre guide sur les proxies authentifiés dans Selenium.

Le mode UC ajoute des pièces mobiles autour de cela : il lance Chrome d'abord, attache un chromedriver patché ensuite, et déconnecte le pilote pendant les actions furtives. L'extension doit se charger avant que tout cela ne se produise, et si ce n'est pas le cas, rien ne soulève une exception — Chrome navigue directement, et vous obtenez l'échec A. La cause habituelle est la dérive de version. Chrome 137 a modifié le comportement des extensions suffisamment pour casser l'authentification proxy jusqu'à ce que SeleniumBase publie une mise à jour, donc une ancienne version épinglée plus un Chrome actuel échoue silencieusement à chaque fois. Mettez à jour d'abord, déboguez ensuite.

Formats de proxy du mode UC de SeleniumBase qui fonctionnent réellement

Les erreurs de format représentent une part surprenante des rapports "proxy ignoré". SeleniumBase prend le proxy comme une chaîne simple, avec ou sans identifiants, dans les gestionnaires Driver et SB et en ligne de commande :

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

Trois règles en découlent. Ne pas envelopper la chaîne dans http:// et les identifiants en même temps à moins d'avoir vérifié que votre version le gère — USER:PASS@HOST:PORT est la forme documentée. Ne pas s'attendre à ce que SOCKS5 avec identifiants fonctionne du tout : c'est une limitation de Chromium, identique à celle que nous couvrons pour l'authentification SOCKS5 de Playwright, et aucun framework ne la contourne. Et si votre mot de passe contient @ ou :, changez-le pour quelque chose d'alphanumérique plutôt que de déboguer un analyseur.

La solution qui élimine toute la classe d'échecs

Si la machine exécutant votre scraper a une IP publique stable, authentifiez-la au lieu de la requête. Enregistrez l'adresse auprès de votre fournisseur — chaque plan QuantumProxies prend en charge la liste blanche d'IP en plus de user:pass — puis passez un simple host:port. Pas d'identifiants signifie pas d'extension : un composant de moins qui casse lors d'une mise à jour de Chrome, un fichier de moins chargé dans un navigateur que vous souhaitez garder discret. Sur un VPS, c'est le changement le plus précieux de cet article.

La limite est topologique, pas technique : la liste blanche authentifie une machine, donc les conteneurs à mise à l'échelle automatique, les coureurs CI et tout ce qui est derrière un NAT rotatif ont toujours besoin d'identifiants. Pour ceux-ci, gardez le chemin de l'extension et gardez SeleniumBase à jour.

Diagramme de flux de comment le mode UC de SeleniumBase lance un navigateur Chrome avec proxy : extension d'authentification, attachement tardif de chromedriver, IP de sortie résidentielle propre
Chaque boîte est un endroit où le proxy peut tomber de la chaîne. La liste blanche supprime la première, qui est aussi celle qui casse lors des mises à jour de Chrome.

Vérifiez l'IP de sortie avant de blâmer le mode UC

C'est l'étape zéro et la plupart des gens la sautent. Prouvez que le trafic sort par le proxy, isolément, avant de toucher un paramètre furtif. Testez les mêmes identifiants en dehors du navigateur d'abord — si curl ne peut pas les utiliser, aucun framework ne le pourra :

# 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 l'étape 1 échoue, le problème est le proxy ou les identifiants. Si l'étape 1 réussit et que l'étape 3 échoue, le problème est l'extension ou la version de Chrome. Si les deux réussissent et que seul uc=True échoue, alors — et seulement alors — c'est une interaction du mode UC. Savoir quelle sortie vous avez réellement obtenue est aussi important que de savoir que vous en avez obtenu une : notre vérificateur de qualité IP gratuit rapporte l'adresse, son type et sa réputation, ce qui fait la différence entre "le proxy fonctionne" et "le proxy passera".

Quand le proxy fonctionne et que Cloudflare gagne toujours

C'est l'échec B, et ce n'est pas un bug dans quoi que ce soit. Le mode UC fait en sorte que le navigateur semble humain ; il ne peut pas faire en sorte que le réseau semble résidentiel. Routez un navigateur furtif à travers un sous-réseau de centre de données qu'une centaine d'autres scrapers ont déjà brûlé et vous obtenez la version difficile du défi — celle qui ne se résout jamais, peu importe combien de fois vous cliquez dessus. Aucun framework de navigateur ne résout cela, car le verdict est rendu avant même que l'empreinte ne soit lue. Nos notes sur l'erreur 1020 de Cloudflare et sur l'évitation des CAPTCHAs lors du scraping aboutissent au même endroit : le CAPTCHA est un symptôme, la réputation IP est la cause.

Trois choses changent le résultat. Passez à des IPs résidentielles : de vraies adresses de ménage dans plus de 200 pays portent une réputation qu'une plage de centre de données ne peut pas. Utilisez une session persistante pour tout ce qui a une connexion ou un panier, car une rotation en cours de flux est perçue comme un détournement de session, et des sorties rotatives pour des explorations larges et sans état. Et faites correspondre le pays de sortie à la locale que vous émulez — une sortie allemande avec une locale en-US et un fuseau horaire de New York est considérée comme une anomalie.

Deux détails d'environnement ferment la boucle. Le mode UC est détectable en mode sans tête, donc sur Linux utilisez l'affichage virtuel (xvfb=True) plutôt que headless=True — c'est pourquoi plusieurs rapports "fonctionne sur Windows, plante sur Ubuntu" se résolvent une fois l'affichage corrigé, et pourquoi les aides basées sur PyAutoGUI comme uc_gui_click_captcha() ont besoin d'un affichage pour cliquer sur quoi que ce soit. Et testez incognito=True dans les deux sens avec un proxy d'authentification : les extensions et l'incognito sont une paire fragile, et vos identifiants voyagent dans une extension.

Liste de contrôle de débogage pour les problèmes de proxy du mode UC de SeleniumBase, ordonnée de la vérification de l'IP de sortie aux changements de furtivité et de type de proxy
Travaillez la colonne de gauche de haut en bas. La plupart des tickets se ferment sur les deux premières lignes, bien avant que quiconque ait besoin de toucher un paramètre furtif.

La liste de contrôle de débogage, dans l'ordre

Le mode CDP, le successeur documenté du mode UC simple, ne change rien à cela : les contraintes de proxy viennent de Chrome, pas du framework, donc la même liste de contrôle s'applique. Pour la vue inter-framework de qui prend en charge les proxies authentifiés, notre carte des proxies des frameworks anti-détection la présente côte à côte.

Questions fréquemment posées

Pourquoi mon IP ne change-t-elle pas avec le mode UC de SeleniumBase ?

Presque toujours parce que l'extension d'authentification proxy ne s'est pas chargée, donc Chrome a navigué directement. Rien ne soulève une erreur lorsque cela se produit. Mettez à jour SeleniumBase, confirmez que la chaîne de proxy est USER:PASS@HOST:PORT, et testez les mêmes identifiants avec curl. Si la machine a une IP publique stable, mettez-la en liste blanche et supprimez complètement les identifiants.

Pourquoi le mode UC contourne-t-il Cloudflare sans proxy mais pas avec un ?

Parce que votre propre connexion a une réputation propre et que la sortie du proxy ne l'a pas. Les plages de centres de données partagées sont fortement signalées, et une IP signalée reçoit le défi difficile qu'aucune automatisation ne peut résoudre. Déplacez le travail vers des sorties résidentielles ou mobiles et testez à nouveau avant de changer un paramètre furtif — le navigateur n'a jamais été le problème.

Le mode UC de SeleniumBase fonctionne-t-il avec des proxies SOCKS5 ?

Sans identifiants, oui. Avec identifiants, non — Chromium n'a jamais implémenté l'authentification SOCKS5 par nom d'utilisateur/mot de passe, donc aucun framework de la famille Selenium ne peut l'ajouter. Utilisez le point de terminaison HTTP de la même passerelle avec identifiants, ou mettez votre IP en liste blanche et gardez le point de terminaison SOCKS5 non authentifié.

Puis-je exécuter le mode UC avec un proxy en mode sans tête ?

Vous pouvez, mais vous ne devriez pas. Le mode UC est détectable en mode sans tête, et les méthodes d'aide CAPTCHA ont besoin d'un affichage réel car elles pilotent la souris via PyAutoGUI. Sur un serveur Linux, utilisez xvfb=True pour un affichage virtuel à la place ; cette combinaison est celle que ciblent les exemples maintenus.

Comment utiliser la rotation de proxy avec SeleniumBase ?

Pointez vers une passerelle rotative plutôt que de gérer une liste : chaque nouvelle connexion obtient une sortie différente du pool, sans changement de code. Pour les flux qui doivent conserver une identité sur plusieurs pages, demandez une session persistante dans les paramètres de nom d'utilisateur afin que la sortie soit maintenue pour la fenêtre de session, et démarrez un nouveau pilote par identité.

Le mode UC ne combat pas votre proxy. Il empile une séquence de lancement furtive sur un mécanisme d'identification que Chrome n'a jamais conçu pour l'automatisation, puis une IP brûlée termine le travail. Supprimez l'extension en mettant en liste blanche, vérifiez la sortie avant de toucher quoi que ce soit d'autre, et donnez au navigateur une IP qui n'a pas déjà été dépensée.

Exécutez le mode UC sur des IPs résidentielles propres