← Retour au blog

Proxies pour Scrapling, Botasaurus et nodriver : configuration contre les anti-bots en 2024

Nous examinons la configuration du proxy dans de nouveaux frameworks de scraping - Scrapling, Botasaurus et nodriver. Code, exemples de rotation, recommandations pour le choix des IP afin de contourner la protection contre les bots.

📅21 octobre 2026

Les combinaisons classiques de Selenium et Puppeteer rencontrent de plus en plus de difficultés avec les systèmes anti-bots de niveau Cloudflare, DataDome et PerimeterX. De nouveaux frameworks émergent — Scrapling, Botasaurus et nodriver, qui ont été conçus dès le départ pour contourner la détection. Mais même le framework le plus avancé est inutile sans des proxies correctement configurés. Dans cet article, nous allons examiner comment connecter des proxies dans chacun des trois outils, quelles erreurs nuisent à l'efficacité et comment choisir le type d'IP pour une tâche de parsing spécifique.

En quoi Scrapling, Botasaurus et nodriver diffèrent de Selenium

Les trois frameworks ont vu le jour en réponse au fait que Selenium et le Puppeteer classique sont devenus trop facilement détectables. Les systèmes anti-bots vérifient des dizaines de paramètres : le protocole CDP, navigator.webdriver, le rendu du canvas, les timings des événements — et les pilotes classiques laissent des traces caractéristiques dans presque chacun d'eux.

Scrapling — bibliothèque Python qui combine le parsing adaptatif HTML avec la possibilité d'émuler un navigateur via StealthyFetcher basé sur Camoufox (un fork de Firefox avec un fingerprint patché). Elle est idéale pour les tâches nécessitant un parsing rapide avec une consommation minimale de ressources, mais où la protection du site vérifie activement le TLS-fingerprint.

Botasaurus — framework basé sur un Chromium modifié (undetected-chromedriver sous le capot), conçu pour le scraping parallèle massif avec gestion automatique des profils de navigateur et prise en charge intégrée de la résolution de captcha via des services tiers.

nodriver — successeur de undetected-chromedriver du même auteur, qui a abandonné complètement Selenium WebDriver et fonctionne directement via CDP (Chrome DevTools Protocol), ce qui élimine une grande partie des artefacts de détection de l'automatisation.

Un point commun à tous les trois — ils réduisent la détection au niveau du fingerprint du navigateur, mais ne résolvent pas le problème de la réputation IP. Si les requêtes proviennent d'une IP de centre de données déjà répertoriée dans les listes noires de DataDome ou Cloudflare, aucun patch de navigateur ne sauvera de captcha ou d'erreur 403.

Configuration des proxies dans Scrapling

Scrapling prend en charge les proxies à la fois en mode HTTP rapide (Fetcher) et en mode navigateur (StealthyFetcher). Pour le parsing statique sans rendu JS, le proxy est passé directement dans les paramètres de la requête :

from scrapling.fetchers import Fetcher

response = Fetcher.get(
    "https://example.com",
    proxy="http://user:[email protected]:9000"
)
print(response.status)

Pour le mode avec un navigateur complet (StealthyFetcher sur Camoufox), le proxy est passé via un dictionnaire avec des champs séparés pour le serveur, le nom d'utilisateur et le mot de passe — c'est important, car Camoufox traite l'autorisation du proxy différemment du Chromium classique :

from scrapling.fetchers import StealthyFetcher

response = StealthyFetcher.fetch(
    "https://example.com",
    proxy={
        "server": "gate.proxycove.com:9000",
        "username": "user",
        "password": "pass"
    },
    headless=True
)
print(response.status)

Une erreur fréquente consiste à passer le proxy sous forme de chaîne complète en mode navigateur, comme dans les requêtes HTTP. Dans ce cas, Camoufox ignore soit l'autorisation, soit échoue avec un timeout lors de la connexion au serveur proxy. Si vous voyez l'erreur ERR_NO_SUPPORTED_PROXIES — vérifiez le format du dictionnaire avec des champs séparés.

Configuration des proxies dans Botasaurus

Botasaurus utilise le décorateur @browser pour configurer le driver, et le proxy est passé comme paramètre de ce décorateur ou directement dans la fonction de lancement :

from botasaurus.browser import browser, Driver

@browser(
    proxy="http://user:[email protected]:9000"
)
def scrape_data(driver: Driver, data):
    driver.get("https://example.com")
    return driver.page_html

scrape_data()

Si vous devez connecter différents proxies pour chaque tâche parallèle (ce qui est critique lors du scraping massif via Botasaurus), il est préférable de passer le proxy dynamiquement via une liste de données, plutôt que de le coder en dur dans le décorateur :

from botasaurus.browser import browser, Driver

@browser
def scrape_with_proxy(driver: Driver, data):
    driver.config.proxy = data["proxy"]
    driver.get(data["url"])
    return driver.page_html

tasks = [
    {"url": "https://example.com/page1", "proxy": "http://user:pass@ip1:port"},
    {"url": "https://example.com/page2", "proxy": "http://user:pass@ip2:port"},
]
scrape_with_proxy(tasks)

Botasaurus gère très bien les tâches en parallèle grâce à multiprocessing, donc lors du scraping massif, il est important d'utiliser des proxies avec un pool d'IP suffisant — sinon plusieurs threads vont frapper la même adresse, ce qui révèle instantanément l'automatisation aux anti-bots par le motif de fréquence des requêtes.

Configuration des proxies dans nodriver

nodriver fonctionne via une connexion directe à CDP sans couche Selenium, donc le proxy est configuré ici via les arguments de lancement du navigateur, et non via une API séparée. Pour les proxies sans autorisation, c'est simple :

import nodriver as uc
import asyncio

async def main():
    browser = await uc.start(
        browser_args=["--proxy-server=http://gate.proxycove.com:9000"]
    )
    page = await browser.get("https://example.com")
    await asyncio.sleep(3)
    browser.stop()

asyncio.run(main())

Le problème est que Chromium ne prend pas en charge le login/mot de passe dans le proxy via --proxy-server directement. Pour les proxies autorisés dans nodriver, il faut soit établir un tunnel proxy local sans autorisation (par exemple, via px ou 3proxy), soit traiter l'événement CDP Fetch.authRequired :

import nodriver as uc
import asyncio

async def main():
    browser = await uc.start(
        browser_args=["--proxy-server=http://gate.proxycove.com:9000"]
    )
    page = await browser.get("https://example.com")

    async def auth_handler(event):
        await page.send(uc.cdp.fetch.continue_with_auth(
            request_id=event.request_id,
            auth_challenge_response=uc.cdp.fetch.AuthChallengeResponse(
                response="ProvideCredentials",
                username="user",
                password="pass"
            )
        ))

    page.add_handler(uc.cdp.fetch.AuthRequired, auth_handler)
    await asyncio.sleep(5)
    browser.stop()

asyncio.run(main())

C'est le point le moins évident parmi les trois frameworks — de nombreux développeurs passent des heures à essayer de comprendre pourquoi l'autorisation ne fonctionne tout simplement pas, sans connaître le domaine Fetch dans CDP.

Rotation des proxies et lutte contre les anti-bots

Même un fingerprint de navigateur parfaitement configuré ne sauvera pas si une seule IP reçoit plus de 50-100 requêtes par minute vers un domaine protégé. DataDome et Cloudflare analysent la fréquence des requêtes à partir d'une adresse spécifique et les motifs temporels entre les actions — des intervalles trop réguliers sont également suspects.

Le schéma de rotation fonctionnel pour les trois frameworks est construit de la même manière :

  1. Utilisez une passerelle avec rotation automatique des IP au niveau du fournisseur — pas besoin d'écrire votre propre logique de changement d'adresses pour chaque requête.
  2. Pour les tâches de session (connexion, navigation multi-pages), fixez l'IP pour la session via un paramètre sticky dans la chaîne de connexion.
  3. Pour le parsing simple de pages statiques, faites tourner les IP à chaque requête ou toutes les 5-10 requêtes.
  4. Ajoutez des délais aléatoires entre les requêtes (1-4 secondes) — cela réduit la détection par motifs temporels.

Exemple de session sticky dans la chaîne de connexion, où le session-id conserve la même IP sortante pendant 10 minutes :

proxy = "http://user-session-abc123:[email protected]:9000"

Pour Botasaurus, ce schéma est particulièrement utile, car lors du scraping parallèle, chaque processus peut obtenir son propre session-id unique, et vous obtenez un pool stable de différentes IP sans gestion manuelle de la liste d'adresses.

Quel type de proxy choisir pour chaque framework

Le type de proxy influence le succès du parsing autant que le choix du framework. Voici une comparaison par tâches :

Tâche Type de proxy recommandé Pourquoi
Parsing de sites avec Cloudflare/DataDome Proxies résidentiels Les IP réelles des utilisateurs domestiques sont rarement répertoriées dans les listes noires des anti-bots
Scraping massif sans protection stricte Proxies de centres de données Vitesse plus élevée, coût inférieur pour de grands volumes de requêtes
Émulation d'un utilisateur réel sur des sites mobiles Proxies mobiles Les adresses CGNAT des opérateurs de télécommunications ont le plus haut niveau de confiance auprès des anti-bots

Pour Scrapling en mode StealthyFetcher, les proxies résidentiels offrent le meilleur effet, car Camoufox résout déjà le problème du fingerprint du navigateur — il ne reste qu'à ne pas se faire prendre par l'IP. Pour Botasaurus lors du scraping parallèle massif, les proxies de centres de données sont souvent optimaux en termes de rapport vitesse/prix, si le site cible n'utilise pas de protection avancée de niveau DataDome.

Erreurs typiques lors de la liaison des proxies et de l'automatisation du navigateur

Dans la pratique, la plupart des échecs de parsing sont liés non pas au framework lui-même, mais à une configuration incorrecte des proxies. Voici une liste d'erreurs qui se produisent le plus souvent :

  • La même IP pour tous les threads parallèles de Botasaurus. L'anti-bot voit 20 sessions simultanées depuis une seule adresse et la bloque en quelques minutes.
  • Passage du proxy sous forme de chaîne dans le mode navigateur de Scrapling. Camoufox nécessite un dictionnaire avec des champs séparés — sinon l'autorisation ne passe pas.
  • Ignorer le domaine CDP Fetch dans nodriver. Sans gestionnaire authRequired, le proxy autorisé ne se connectera tout simplement pas, le navigateur se bloquera lors du chargement.
  • Absence de rotation lors des actions de session. Changer d'IP au milieu d'une session autorisée révèle instantanément l'automatisation — utilisez des sessions sticky.
  • Inadéquation entre la géolocalisation du proxy et la locale du navigateur. Une IP d'Allemagne avec des en-têtes Accept-Language : ru — un signe classique de bot pour les systèmes de scoring de fraude.
  • Fréquence de requêtes trop agressive même avec rotation. La rotation des IP n'annule pas la nécessité de faire des pauses entre les requêtes — le motif de comportement est également analysé.

Il est également important de vérifier les fuites DNS lors de l'utilisation de proxies en mode navigateur — parfois, le navigateur résout les domaines via le DNS système, et non via le tunnel proxy, ce qui crée un décalage entre l'IP de la requête et l'IP de résolution, qui est facilement détecté par les systèmes de protection.

Conclusion

Scrapling, Botasaurus et nodriver résolvent le problème de détection au niveau du fingerprint du navigateur bien mieux que le classique Selenium, mais aucun d'eux ne réduit l'importance d'un proxy de qualité. Une configuration correcte de l'autorisation (surtout dans nodriver via CDP), une rotation IP appropriée et le choix du type de proxy adapté à un système anti-bot spécifique — trois facteurs qui déterminent la stabilité du parsing à long terme.

Si vous scrapez des sites avec une protection avancée comme Cloudflare ou DataDome, commencez par des proxies résidentiels — ils offrent le plus grand pourcentage de requêtes réussies grâce à la réputation des IP. Pour des tâches massives sans protection stricte, les proxies de centres de données restent le choix optimal en termes de vitesse et de coût pour de grands volumes.