Configurer un proxy avec ChromeDriver, c’est le genre de tâche qui semble triviale… jusqu’au moment où tout part en vrille. Je me souviens encore de ma première tentative sérieuse : une erreur `ERR_PROXY_CONNECTION_FAILED` qui m’a pris une après-midi entière à diagnostiquer. Le pire ? La solution tenait en une ligne de code. Depuis, j’ai passé des centaines d’heures à bricoler Selenium et ChromeDriver, et j’ai appris à mes dépens où se cachent les pièges.

Points clés à retenir
  • La méthode `--proxy-server` fonctionne pour un proxy sans authentification, mais elle échoue lamentablement dès qu’un mot de passe est requis.
  • Pour un proxy authentifié, l’extension Chrome est la seule solution fiable, car Chrome ignore les identifiants dans l’URL.
  • Les proxys SOCKS5 et HTTP ne se configurent pas de la même manière, et l’erreur n’est pas toujours explicite.
  • Les certificats SSL des proxys intermédiaires provoquent des erreurs `ERR_CERT_AUTHORITY_INVALID` qu’il faut anticiper.
  • Tester la validité d’un proxy avant de lancer un scraping évite des heures de debugging inutiles.
  • La rotation de proxys sans gérer les cookies et le user-agent vous fera détecter en moins de dix requêtes.

Configurer un proxy ChromeDriver : les bases qui fonctionnent vraiment

La configuration de base est simple. Vous utilisez `ChromeOptions` et l’argument `--proxy-server`. Pour un proxy HTTP classique, ça donne quelque chose comme :

from selenium import webdriver

from selenium.webdriver.chrome.options import Options

options = Options()

options.add_argument('--proxy-server=http://proxy.example.com:8080')

driver = webdriver.Chrome(options=options)

Ça, c’est la théorie. En pratique, ce code fonctionne pour un proxy sans authentification. Le problème, c’est que presque tous les proxys sérieux (résidentiels, data center) nécessitent un identifiant et un mot de passe. Et c’est là que les choses se gâtent.

L’erreur classique : mettre les identifiants dans l’URL

J’ai vu des tutoriels qui suggèrent d’écrire :

options.add_argument('--proxy-server=http://username:[email protected]:8080')

Franchement, ne perdez pas votre temps. Cette méthode fonctionnait dans les premières versions de Chrome, mais elle a été désactivée pour des raisons de sécurité évidentes. Le navigateur ignore tout simplement les identifiants dans l’URL et vous obtenez une erreur d’authentification.

Le résultat ? Une session qui se lance, qui charge la page d’accueil du proxy avec une demande de connexion, et qui échoue. La solution propre, c’est de passer par une extension Chrome.

Proxy authentifié : la méthode qui marche (extension Chrome)

L’approche que j’utilise systématiquement depuis deux ans consiste à créer une extension Chrome qui configure le proxy. Le principe est simple : on crée un fichier `manifest.json` et un script JavaScript qui définit le proxy via l’API `chrome.proxy`.

Proxy authentifié : la méthode qui marche (extension Chrome)
Manifest.json

{

"version": "1.0.0",

"manifest_version": 2,

"name": "proxy-auth",

"permissions": ["proxy", "storage"],

"background": {

"scripts": ["background.js"]

}

}

background.js

var config = {

mode: "fixed_servers",

rules: {

singleProxy: {

scheme: "http",

host: "proxy.example.com",

port: 8080

}

}

};

chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});

function authCallback(details) {

return {

authCredentials: {

username: "votre_utilisateur",

password: "votre_mot_de_passe"

}

};

}

chrome.webRequest.onAuthRequired.addListener(

authCallback,

{urls: [""]}

);

Ensuite, on charge cette extension dans ChromeDriver :

options.add_extension('proxy-auth.zip')

C’est la méthode la plus stable que j’ai trouvée. Elle fonctionne avec les proxys HTTP et HTTPS authentifiés. Le seul inconvénient, c’est qu’elle nécessite de créer une extension à chaque changement de proxy. Pour une rotation agressive, ça devient vite fastidieux.

Utiliser undetected-chromedriver pour l’authentification

Si vous utilisez déjà `undetected-chromedriver` pour contourner la détection, sachez qu’il gère les proxys de manière différente. La bibliothèque injecte le proxy directement dans les options Chrome, mais elle souffre du même problème pour l’authentification.

La solution que je préfère avec cette bibliothèque, c’est de combiner l’extension et `undetected-chromedriver`. Ça alourdit le code, mais ça fonctionne.

Les pièges silencieux : SOCKS5, SSL et certificats

La configuration d’un proxy SOCKS5 est différente. L’argument `--proxy-server=socks5://proxy.example.com:1080` fonctionne, mais il y a un piège : Chrome ne gère pas l’authentification SOCKS5 nativement. Vous obtenez une connexion qui semble établie, mais les requêtes échouent avec des erreurs étranges.

Les pièges silencieux : SOCKS5, SSL et certificats

Pour un proxy SOCKS5 authentifié, j’ai dû passer par une extension qui gère l’authentification, car aucune méthode native ne fonctionne.

L’erreur de certificat qui vous fera douter de tout

Le problème le plus vicieux que j’ai rencontré, c’est l’erreur `ERR_CERT_AUTHORITY_INVALID`. Elle survient lorsque le proxy intercepte le trafic HTTPS et présente son propre certificat. Chrome, à juste titre, refuse de faire confiance.

La solution consiste à ajouter l’argument suivant :

options.add_argument('--ignore-certificate-errors')

Attention, j’utilise cette option uniquement en environnement de test. Pour du scraping en production, désactiver la vérification des certificats expose vos données à des interceptions. C’est un compromis risqué.

Tester son proxy avant de lancer le scraping : le réflexe qui sauve

J’ai appris cette leçon à la dure. Pendant des mois, je lançais mes scripts de scraping sans vérifier la validité du proxy, et je passais des heures à débugger des erreurs qui n’avaient rien à voir avec mon code.

Tester son proxy avant de lancer le scraping : le réflexe qui sauve

Maintenant, j’ai une fonction de vérification systématique :

import requests

def check_proxy(proxy):

try:

response = requests.get(

'https://api.ipify.org',

proxies={'https': f'http://{proxy}'},

timeout=10

)

return response.status_code == 200

except:

return False

Si la vérification échoue, je ne lance même pas ChromeDriver. Ça m’a fait gagner un temps considérable.

Les erreurs Chrome à connaître par cœur

Quand vous lancez ChromeDriver avec un proxy, certaines erreurs reviennent tout le temps :

  • `ERR_PROXY_CONNECTION_FAILED` : le proxy est injoignable ou les identifiants sont incorrects.
  • `ERR_TUNNEL_CONNECTION_FAILED` : problème de tunneling HTTPS via le proxy.
  • `ERR_PROXY_CERTIFICATE_INVALID` : le certificat SSL du proxy n’est pas reconnu.
  • `ERR_SOCKS_CONNECTION_FAILED` : le serveur SOCKS n’accepte pas la connexion.

Dans la plupart des cas, ces erreurs apparaissent dans les logs ChromeDriver. Activez les logs en mode verbeux pour les voir :

options.add_argument('--enable-logging')

options.add_argument('--v=1')

Rotation de proxys et performances : ce que personne ne vous dit

La configuration d’un proxy, c’est une chose. La rotation, c’en est une autre. Au début, je créais une nouvelle instance de ChromeDriver pour chaque requête, avec un nouveau proxy. Résultat : des temps de chargement de 10 à 15 secondes par requête. Pour 1000 URLs, ça faisait des heures.

Aujourd’hui, j’utilise un seul ChromeDriver et je change le proxy à la volée via l’extension. Le problème, c’est que changer de proxy sans vider les cookies et sans changer de user-agent vous trahit immédiatement.

La session persistante : le secret des scrapers expérimentés

Quand vous changez d’IP, les sites suivent vos cookies. Si vous utilisez le même user-agent et les mêmes cookies avec une nouvelle IP, le site détecte l’incohérence et vous bloque.

La solution que j’ai adoptée : je garde une session persistante avec des cookies validés pour chaque proxy. Concrètement, je lance une requête de test avec le nouveau proxy pour obtenir un cookie de session, puis je lance le scraping avec ce cookie.

Ça a réduit mon taux de blocage de 30 % à moins de 5 %. Mais ça demande une gestion minutieuse de l’état de la session.

Comparatif des méthodes de configuration de proxy

MéthodeAuthentificationSOCKS5StabilitéComplexité
`--proxy-server`NonOuiMoyenneFaible
URL avec identifiantsNon (obsolète)NonÉlevéeFaible
Extension ChromeOuiOuiÉlevéeMoyenne
`undetected-chromedriver` + extensionOuiOuiÉlevéeMoyenne
Extension + rotation dynamiqueOuiOuiTrès élevéeÉlevée

Combien de temps faut-il pour configurer un proxy ChromeDriver ?

Honêtement, la première configuration m’a pris deux jours. Aujourd’hui, je peux mettre en place un proxy authentifié en moins d’une heure, en comptant les tests.

Le vrai problème, ce n’est pas la configuration initiale. C’est la maintenance. Les proxys changent, expirent, se réinitialisent. Une infrastructure de scraping sérieuse doit inclure un système de monitoring qui vérifie la santé de chaque proxy en continu.

J’ai appris qu’il ne faut jamais faire confiance à un proxy qui a fonctionné hier. Le web dynamique est un jeu de dupe permanent. La seule chose qui compte, c’est de tester, tester, et re-tester.

Si vous débutez, commencez simple. Utilisez un proxy sans authentification, faites fonctionner le code de base, puis ajoutez les couches de complexité. Et gardez ce réflexe : testez toujours votre proxy avant de lancer le scraping. Vous m’en remercierez plus tard.