J'ai passé des heures à me demander pourquoi mon script Selenium refusait d'atteindre un site, et à chaque fois, le responsable était le même : une configuration proxy foireuse. En 2026, avec la multiplication des environnements de test cloud et des restrictions géographiques, maîtriser le chromedriver proxy n'est plus une option. C'est une compétence de base pour tout développeur qui fait de l'automatisation navigateur. Dans cet article, je vais vous montrer exactement comment configurer un proxy dans ChromeDriver, les pièges à éviter, et des astuces que j'aurais aimé connaître il y a trois ans.

Points clés à retenir

  • Le proxy se configure via les options Chrome, pas en modifiant les variables système.
  • Les proxys authentifiés nécessitent une extension Chrome, pas juste un argument en ligne de commande.
  • Les erreurs de proxy (ERR_PROXY_CONNECTION_FAILED) sont souvent liées à un mauvais format d'adresse.
  • Le mode headless a des comportements différents avec les proxys : testez toujours en mode visible d'abord.
  • Les outils comme BrowserStack ou Selenium Grid ont leurs propres mécanismes de proxy.

Pourquoi le proxy est un casse-tête avec ChromeDriver

Quand j'ai commencé l'automatisation de tests web il y a cinq ans, je pensais que configurer un proxy serait trivial. Erreur monumentale. ChromeDriver, contrairement à Firefox ou à des outils comme PhantomJS (que plus personne n'utilise), a une approche particulière : il ne lit pas automatiquement les paramètres proxy du système d'exploitation. Vous devez lui passer explicitement l'information.

Le problème ? La documentation officielle de Google est… disons, évasive. Elle mentionne l'option --proxy-server mais sans expliquer les cas réels : proxy SOCKS, proxy HTTP, proxy HTTPS, ou pire, proxy avec authentification. En 2026, avec la montée en puissance des environnements de test cloud comme AWS Device Farm ou Sauce Labs, la gestion des proxys est devenue un point de défaillance fréquent.

Les bases du fonctionnement du proxy dans Chrome

Chrome utilise une pile réseau distincte de celle de l'OS. Quand vous lancez ChromeDriver, il crée une instance Chrome isolée. Cette instance ne partage pas les paramètres proxy de votre navigateur habituel. Du coup, si vous travaillez derrière un proxy d'entreprise, votre script Selenium WebDriver échouera jusqu'à ce que vous passiez l'option explicitement.

J'ai perdu deux jours sur ce point. Franchement, deux jours. Je regardais mon code, je vérifiais les variables d'environnement HTTP_PROXY et HTTPS_PROXY, et Chrome les ignorait royalement. La solution ? Les passer via les ChromeOptions.

Comment configurer un proxy dans ChromeDriver

Voici la méthode que j'utilise depuis des années. Elle fonctionne en Python, Java, C# ou JavaScript. Le principe est toujours le même : créer un objet ChromeOptions, ajouter un argument --proxy-server, puis lancer le driver avec ces options.

Comment configurer un proxy dans ChromeDriver
Image by edwebster from Pixabay

Exemple concret en Python :

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument('--proxy-server=http://192.168.1.100:8080')
driver = webdriver.Chrome(options=chrome_options)
driver.get('https://httpbin.org/ip')  # Vérifie l'IP

Ce code fonctionne pour un proxy HTTP ou HTTPS simple. Mais attention : si votre proxy supporte à la fois HTTP et HTTPS, il faut spécifier le schéma correct. J'ai vu des gens utiliser http:// pour un proxy SOCKS, et ça ne marche pas.

Proxy SOCKS avec ChromeDriver

Pour un proxy SOCKS5, la syntaxe change légèrement :

chrome_options.add_argument('--proxy-server=socks5://192.168.1.100:1080')

J'ai utilisé cette configuration pour tester un site bloqué dans mon pays. Résultat : ça fonctionne parfaitement, mais il faut que le proxy SOCKS supporte la résolution DNS distante. Sinon, vous aurez des erreurs de résolution de nom de domaine.

Proxy par type de protocole

Une astuce que j'ai découverte après des heures de debug : vous pouvez spécifier un proxy différent pour HTTP et HTTPS. ChromeDriver accepte l'option --proxy-server avec un seul proxy pour tous les protocoles, mais si vous voulez un proxy distinct pour HTTPS, vous devez passer par une extension Chrome. Je vous montre ça plus bas.

Tableau comparatif des méthodes :

MéthodeComplexitéSupporte authentificationSupporte SOCKS
--proxy-server (argument)FaibleNonOui
Extension ChromeMoyenneOuiOui
Variable d'environnementFaibleNonNon
Proxy PAC (fichier .pac)ÉlevéeOui (selon implémentation)Non

Mon conseil : commencez toujours par --proxy-server. C'est la méthode la plus simple. Si vous avez besoin d'authentification, passez à l'extension.

Les erreurs classiques et comment les résoudre

J'ai accumulé une collection d'erreurs de proxy avec ChromeDriver. Voici les trois plus fréquentes, avec leurs solutions.

Les erreurs classiques et comment les résoudre
Image by saulhm from Pixabay

ERR_PROXY_CONNECTION_FAILED

Cette erreur apparaît quand Chrome ne parvient pas à se connecter au proxy. Les causes possibles :

  • L'adresse du proxy est mal formatée (ex : oublier le port).
  • Le proxy est hors ligne ou le port est bloqué par un pare-feu.
  • Vous utilisez un proxy HTTPS mais vous avez spécifié http://.

J'ai eu ce cas avec un proxy d'entreprise qui utilisait le port 3128 (Squid). J'avais écrit --proxy-server=192.168.1.100:3128 sans le schéma, et ChromeDriver interprétait ça comme un proxy HTTP. Solution : ajoutez http:// explicitement.

ERR_TUNNEL_CONNECTION_FAILED

Cette erreur survient quand le proxy refuse de tunneler une connexion HTTPS. C'est souvent un problème de configuration du proxy lui-même, pas de ChromeDriver. Mais dans certains cas, c'est parce que le proxy exige une authentification que vous n'avez pas fournie.

J'ai passé une journée entière sur cette erreur. Mon proxy Squid exigeait une authentification NTLM, ce que ChromeDriver ne supporte pas nativement. La solution a été d'utiliser un proxy intermédiaire (comme Cntlm) qui gère l'authentification NTLM et expose un proxy local non authentifié.

Le proxy est ignoré en mode headless

Depuis Chrome 112 (2023), le mode headless utilise une architecture différente. Parfois, les arguments de proxy passés via add_argument sont ignorés. J'ai vu ça en 2025 sur un projet de scraping massif. La solution : forcer le mode headless "ancien" avec --headless=chrome ou utiliser l'extension Chrome même pour le mode headless.

Pour vérifier que votre proxy est bien utilisé, ouvrez http://httpbin.org/ip ou https://api.ipify.org. Si l'IP affichée est celle de votre proxy, tout va bien. Sinon, retour à la case départ.

Proxy authentifié et automatisation : le piège

Voici le sujet qui m'a fait le plus souffrir. Les proxys avec authentification (login/mot de passe) ne peuvent pas être configurés simplement via --proxy-server. ChromeDriver ne supporte pas l'option --proxy-auth (contrairement à Firefox).

La solution officieuse ? Créer une extension Chrome qui configure le proxy. Je sais, ça semble lourd, mais c'est la seule méthode fiable que j'ai trouvée après des mois de tests.

Créer une extension Chrome pour le proxy authentifié

Voici les fichiers nécessaires :

manifest.json

{
  "name": "Proxy Auth",
  "version": "1.0",
  "manifest_version": 2,
  "permissions": ["proxy", "webRequest", "webRequestBlocking", "http://*/*", "https://*/*"],
  "background": {
    "scripts": ["background.js"]
  }
}

background.js

var config = {
  mode: "fixed_servers",
  rules: {
    singleProxy: {
      scheme: "http",
      host: "192.168.1.100",
      port: 8080
    },
    bypassList: ["localhost"]
  }
};
chrome.proxy.settings.set({value: config, scope: 'regular'}, function() {});

function callbackFn(details) {
  return {
    authCredentials: {
      username: "mon_login",
      password: "mon_mot_de_passe"
    }
  };
}
chrome.webRequest.onAuthRequired.addListener(
  callbackFn,
  {urls: [""]},
  ['blocking']
);

Ensuite, vous chargez cette extension dans ChromeDriver :

chrome_options.add_argument('--load-extension=/chemin/vers/le/dossier/extension')

J'ai utilisé cette méthode pour un projet de test de site e-commerce derrière un proxy d'entreprise. Ça a marché du premier coup. Enfin, presque. J'ai dû ajuster les permissions pour que l'extension intercepte bien les requêtes HTTPS.

Alternative : utiliser un proxy local sans authentification

Si vous ne voulez pas vous embêter avec les extensions, une autre solution est d'utiliser un proxy local (comme mitmproxy ou Charles Proxy) qui se connecte au proxy distant avec authentification. Votre script ChromeDriver pointe alors vers le proxy local, qui fait le pont.

C'est ce que je fais maintenant pour tous mes projets d'automatisation navigateur. J'utilise mitmproxy en mode transparent, et ChromeDriver n'a même pas besoin de savoir qu'il y a une authentification derrière.

Pour une configuration plus large de vos outils, jetez un œil à notre guide sur la connexion Alexa à internet qui aborde des principes similaires de configuration réseau.

Conclusion et prochaines étapes

Configurer un proxy avec ChromeDriver n'est pas sorcier, mais les détails tuent. Retenez ces trois règles :

  • Utilisez --proxy-server pour les proxys sans authentification.
  • Pour l'authentification, passez par une extension Chrome ou un proxy intermédiaire.
  • Testez toujours en mode visible avant de passer en headless.

J'ai perdu des semaines à debugger des scripts qui fonctionnaient en local mais pas sur le serveur CI. La cause ? Le proxy d'entreprise qui bloquait les connexions sortantes. Depuis que j'ai automatisé la configuration proxy dans mes scripts de test, plus de surprises.

Maintenant, c'est à vous. Prenez votre script Selenium WebDriver, ajoutez les options de proxy, et testez. Si vous bloquez, vérifiez les logs de Chrome (chrome://net-internals/#events) – c'est une mine d'or pour le debug.

Et si vous travaillez avec d'autres environnements d'automatisation, notre guide pour configurer Alexa en wifi pourrait vous donner des idées sur la gestion des connexions réseau.

Questions fréquentes

Comment vérifier si mon proxy ChromeDriver fonctionne ?

Ouvrez une page comme http://httpbin.org/ip ou https://api.ipify.org dans votre script. Si l'IP affichée correspond à celle de votre proxy, tout est correct. Vous pouvez aussi inspecter les onglets chrome://net-internals/#proxy dans l'instance Chrome lancée par le driver.

Puis-je utiliser un fichier PAC avec ChromeDriver ?

Oui, via l'argument --proxy-pac-url. Exemple : chrome_options.add_argument('--proxy-pac-url=http://monserveur/proxy.pac'). Attention, le fichier PAC doit être accessible via HTTP ou HTTPS, pas en local.

Mon proxy fonctionne en mode visible mais pas en headless, pourquoi ?

Depuis Chrome 112, le mode headless utilise une architecture différente. Essayez --headless=chrome pour forcer l'ancien mode, ou passez par une extension Chrome pour configurer le proxy. Vérifiez aussi que votre proxy supporte les connexions WebSocket, car le mode headless en utilise.

ChromeDriver supporte-t-il les proxys SOCKS5 avec authentification ?

Pas nativement via --proxy-server. Vous devez utiliser une extension Chrome ou un proxy intermédiaire (comme mitmproxy) qui gère l'authentification SOCKS5. J'ai eu du succès avec cette deuxième approche.

Comment configurer un proxy pour Selenium Grid ?

Dans Selenium Grid, le proxy se configure au niveau du nœud, pas du driver. Utilisez les options de configuration du nœud (fichier config.json) pour spécifier le proxy. Pour plus de détails, notre guide sur la récupération de boîte mail Wanadoo aborde des concepts de configuration réseau qui peuvent vous aider.