En bref
Scrapling offre de puissantes capacités de contournement anti-bot grâce à ses modes StealthyFetcher et DynamicFetcher. Utilisez StealthyFetcher pour les sites protégés par Cloudflare (résolution automatique de Turnstile, randomisation des empreintes numériques de canvas, blocage WebRTC) ou DynamicFetcher pour les implémentations anti-bot fortement basées sur JavaScript. Intégrez-le à OpenClaw pour contrôler toutes les opérations de scraping via des commandes en langage naturel.
Introduction
Vous visitez un site web pour collecter des données. La page se charge. Puis vous le voyez : "Accès Refusé" ou un défi CAPTCHA. Le site a détecté votre scraper et a bloqué l'accès. Ce scénario se produit constamment pour les développeurs, les scientifiques des données et les chercheurs qui ont besoin de données web pour des projets légitimes.
Cela se produit parce que les sites web déploient de plus en plus de systèmes anti-bot sophistiqués. Cloudflare, PerimeterX, Akamai et d'autres services similaires analysent les empreintes numériques du navigateur, les schémas de comportement et les caractéristiques des requêtes pour identifier les accès automatisés. Les scrapers traditionnels échouent immédiatement face à ces défenses.
L'industrie de la détection de bots est devenue un marché de plusieurs milliards de dollars. Les entreprises investissent massivement dans la protection de leurs actifs numériques contre les accès automatisés. Cloudflare à lui seul déclare bloquer des milliards de requêtes de bots chaque jour. Cela crée des défis importants pour la collecte légitime de données, que ce soit pour des études de marché, des analyses concurrentielles, la surveillance des prix ou la recherche universitaire.
Scrapling résout ce problème. La bibliothèque inclut plusieurs modes anti-détection conçus spécifiquement pour contourner ces protections. Combiné à l'interface en langage naturel d'OpenClaw, vous pouvez demander à votre assistant IA de contourner les vérifications anti-bot sans écrire de code complexe.
Comprendre la détection anti-bot
Avant de contourner la détection, vous devez comprendre comment elle fonctionne. Les systèmes anti-bot analysent plusieurs facteurs :
Empreinte numérique du navigateur (Browser Fingerprinting) : Les sites collectent des informations sur votre navigateur, y compris la résolution d'écran, les polices installées, le moteur de rendu WebGL, la sortie du canvas et des centaines d'autres signaux. Les outils automatisés se révèlent souvent par des empreintes numériques cohérentes qui diffèrent de celles des navigateurs réels.
Analyse comportementale : Les utilisateurs humains déplacent la souris de manière imprévisible, font défiler les pages à des vitesses variables et tapent avec un timing naturel. Les bots présentent souvent des schémas mécaniques : chargements instantanés des pages, vitesses de défilement uniformes, synchronisation parfaite entre les actions.
Analyse des requêtes : Chaque requête HTTP inclut des en-têtes, des empreintes TLS et des modèles de connexion. Les bibliothèques HTTP standard comme 'requests' effectuent des requêtes qui semblent clairement automatisées par rapport au trafic de navigateur réel.
Défis JavaScript : Les sites modernes exécutent du JavaScript pour collecter des informations sur le navigateur. Turnstile de Cloudflare, par exemple, exécute des tests invisibles qui vérifient l'intégrité du navigateur avant d'afficher le contenu.
Réputation de l'IP : Les adresses IP sont signalées en fonction du fournisseur d'hébergement, de l'historique d'activités suspectes et de la localisation géographique. Les IP des centres de données déclenchent une suspicion immédiate.
Scrapling aborde chacun de ces vecteurs de détection grâce à ses fetchers spécialisés.
Capacités anti-bot de Scrapling
Scrapling fournit deux fetchers principaux pour contourner les systèmes anti-bot :

StealthyFetcher gère la plupart des protections Cloudflare et similaires. Il utilise Chrome sans interface graphique (headless) avec des techniques d'évasion intégrées qui corrigent automatiquement les vecteurs de détection courants.
DynamicFetcher fournit une automatisation complète du navigateur via Playwright. Utilisez-le lorsque StealthyFetcher échoue ou lorsque le site utilise une détection avancée basée sur JavaScript.
Voici comment choisir :
| Scénario | Fetcher recommandé |
|---|---|
| Protection Cloudflare | StealthyFetcher |
| CAPTCHA Turnstile | StealthyFetcher |
| Détection de bot basique | StealthyFetcher |
| Défis JavaScript complexes | DynamicFetcher |
| Défilement infini avec anti-bot | DynamicFetcher |
| Solutions anti-bot personnalisées | DynamicFetcher |
StealthyFetcher : Examen approfondi
StealthyFetcher est l'outil principal de Scrapling pour contourner les systèmes anti-bot. Il gère automatiquement la plupart des mécanismes de protection courants.
Utilisation de base
from scrapling.fetchers import StealthyFetcher
fetcher = StealthyFetcher()
page = fetcher.get('https://protected-site.com')
print(page.text)
Le fetcher tente automatiquement de contourner Cloudflare, PerimeterX et les protections similaires.
Contournement de Cloudflare Turnstile
Cloudflare Turnstile est l'un des défis anti-bot les plus courants. StealthyFetcher le résout automatiquement :
page = StealthyFetcher.fetch(
'https://cloudflare-protected-site.com',
solve_cloudflare=True
)
Le paramètre solve_cloudflare=True déclenche la résolution automatique du défi. Cela fonctionne à la fois pour les défis interstitiels (la page "Vérification de votre navigateur avant l'accès") et les widgets Turnstile.
Randomisation de l'empreinte numérique du Canvas
L'empreinte numérique du canvas crée des identifiants uniques basés sur la façon dont votre navigateur rend les graphiques. StealthyFetcher ajoute un bruit aléatoire aux opérations du canvas :
page = StealthyFetcher.fetch(
'https://site.com',
hide_canvas=True
)
Chaque requête génère une sortie de canvas différente, rendant le suivi d'empreintes numériques inefficace.
Prévention des fuites WebRTC
WebRTC peut exposer votre véritable adresse IP même en utilisant des proxys. StealthyFetcher bloque les requêtes WebRTC :
page = StealthyFetcher.fetch(
'https://site.com',
block_webrtc=True
)
Cela empêche les fuites d'IP locales qui pourraient révéler votre identité ou votre localisation.
Usurpation du référent de recherche Google
De nombreux sites autorisent l'accès s'ils pensent que le trafic provient de la recherche Google. StealthyFetcher usurpe ce référent :
page = StealthyFetcher.fetch(
'https://site.com',
google_search=True
)
Cela fait en sorte que la requête semble provenir de la page de résultats de recherche de Google.
Utilisation de Chrome installé
Pour une évasion maximale, utilisez votre navigateur Chrome installé au lieu du Chromium de Playwright :
page = StealthyFetcher.fetch(
'https://site.com',
real_chrome=True
)
Cela utilise votre véritable installation de Chrome, qui a une empreinte numérique de navigateur légitime.
Usurpation géographique
Faites correspondre votre requête à un emplacement spécifique :
page = StealthyFetcher.fetch(
'https://site.com',
locale='en-US',
timezone_id='America/New_York'
)
Cela définit les paramètres de fuseau horaire et de langue du navigateur pour correspondre à l'emplacement souhaité.
DynamicFetcher pour la protection avancée
Certains sites utilisent des systèmes anti-bot sophistiqués que StealthyFetcher ne peut pas contourner. DynamicFetcher fournit une automatisation complète du navigateur avec Playwright :
from scrapling.fetchers import DynamicFetcher
fetcher = DynamicFetcher()
page = fetcher.get('https://highly-protected-site.com')
print(page.text)
Gestion du défilement infini
Les sites avec défilement infini et protection anti-bot nécessitent une automatisation du navigateur :
from scrapling.fetchers import DynamicFetcher
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
fetcher = DynamicFetcher(playwright=p)
page = fetcher.get('https://site.com/infinite-scroll')
# Wait for content to load
page.wait_for_selector('.content-item')
# Scroll to load more
for _ in range(5):
page.evaluate('window.scrollTo(0, document.body.scrollHeight)')
page.wait_for_timeout(1000)
Attendre l'exécution de JavaScript
Certains contenus se chargent via JavaScript après le chargement initial de la page :
page = DynamicFetcher.get('https://site.com')
page.wait_for_load_state('networkidle')
content = page.content()
Cela garantit que tout le JavaScript a été exécuté avant l'extraction du contenu.
Gestion manuelle des CAPTCHA
Pour les CAPTCHA qui ne peuvent pas être résolus automatiquement :
page = DynamicFetcher.get('https://site.com')
# Check if CAPTCHA is present
if page.is_visible('.captcha-container'):
# Take screenshot for manual solving
page.screenshot(path='captcha.png')
# After manual solve, continue
page.click('.captcha-submit')
Vous pouvez faire une pause pour une intervention manuelle, résoudre le CAPTCHA vous-même et reprendre le scraping.
Utilisation avec OpenClaw
OpenClaw vous permet de contrôler les capacités anti-bot de Scrapling via le langage naturel (si vous voulez savoir comment configurer Scrapling dans OpenClaw, consultez cet article) :
Contourner Cloudflare sur un site :
"Récupérer les données produit de https://shop.example.com, ce site a une protection Cloudflare"
OpenClaw utilise automatiquement StealthyFetcher avec solve_cloudflare activé.
Gérer un site avec une protection avancée :
"Scraper les offres d'emploi de https://careers.example.com, utiliser le mode navigateur sans tête car ils ont une forte protection anti-bot"
OpenClaw passe à DynamicFetcher pour une automatisation complète du navigateur.
Utiliser la rotation de proxy :
"Extraire les données de ces 100 URL, faire pivoter ces proxys : proxy1.com:8080, proxy2.com:8080, proxy3.com:8080"
OpenClaw distribue les requêtes sur plusieurs proxys.
Usurper la localisation géographique :
"Obtenir les données de prix de https://site.com, utiliser les paramètres de la côte Est des États-Unis"
OpenClaw configure le fuseau horaire et les paramètres régionaux en conséquence.
Techniques anti-bot expliquées
Comprendre les techniques sous-jacentes vous aide à choisir la bonne approche :
Usurpation de l'empreinte TLS
Lorsque votre navigateur se connecte à un site web, il effectue une négociation TLS. Le message ClientHello inclut des caractéristiques qui identifient votre bibliothèque cliente. Les requêtes Python standard ont des empreintes distinctives que les systèmes anti-bot reconnaissent.
Scrapling usurpe les empreintes TLS pour apparaître comme des navigateurs légitimes. Cela se produit automatiquement avec StealthyFetcher et DynamicFetcher.
Rotation de l'User-Agent
L'envoi de requêtes avec la même chaîne User-Agent déclenche la détection. Scrapling fait pivoter automatiquement les User-Agents :
# L'User-Agent est automatiquement tourné
page = StealthyFetcher.get('https://site.com')
Chaque requête semble provenir d'une version de navigateur différente.
Usurpation d'en-tête
Les navigateurs réels envoient des en-têtes spécifiques dans un ordre spécifique. Scrapling garantit que les en-têtes correspondent automatiquement au comportement légitime du navigateur.
Randomisation du Canvas
Lorsqu'un site web demande à votre navigateur de dessiner quelque chose, les pixels exacts révèlent votre navigateur et votre GPU. Scrapling ajoute un bruit imperceptible aux opérations du canvas, rendant chaque empreinte numérique unique.
Résolution d'écran et taille de fenêtre
Les navigateurs sans interface graphique (headless) signalent souvent des tailles d'écran par défaut. Scrapling randomise les dimensions de la fenêtre d'affichage pour correspondre aux écrans d'utilisateurs réels.
Simulation du mouvement de la souris
DynamicFetcher peut simuler des mouvements de souris de type humain :
page.mouse.move_to_element('.button')
page.mouse.move_by_offset(50, 20)
page.click('.submit')
Cela ajoute des motifs de mouvement réalistes qui passent l'analyse comportementale.
Intégration de proxy
L'utilisation de proxys aide à éviter le blocage basé sur l'IP et permet le scraping géographique :
Utilisation de base des proxys
from scrapling.fetchers import StealthyFetcher
fetcher = StealthyFetcher()
page = fetcher.get(
'https://site.com',
proxy='http://username:password@proxy.example.com:8080'
)
Rotation de proxy
Pour le scraping à grande échelle, utilisez plusieurs proxys en rotation :
import random
from scrapling.fetchers import StealthyFetcher
proxies = [
'http://proxy1.com:8080',
'http://proxy2.com:8080',
'http://proxy3.com:8080'
]
fetcher = StealthyFetcher()
for url in urls:
proxy = random.choice(proxies)
page = fetcher.get(url, proxy=proxy)
# Process page
Proxys résidentiels
Les proxys résidentiels utilisent des adresses IP de véritables fournisseurs d'accès Internet. Ils sont plus difficiles à détecter que les IP des centres de données :
page = StealthyFetcher.get(
'https://site.com',
proxy='http://residential-proxy-provider:port'
)
Les proxys résidentiels coûtent plus cher mais offrent des taux de réussite nettement plus élevés sur les sites protégés.
Scénarios anti-bot courants
Protection Cloudflare
Cloudflare est la solution anti-bot la plus courante. La plupart des sites fonctionnent avec StealthyFetcher de base :
page = StealthyFetcher.fetch('https://cloudflare-site.com', solve_cloudflare=True)
Si Cloudflare affiche une page de défi, le fetcher la résout automatiquement et réessaie.
PerimeterX (maintenant Ownl)
PerimeterX (maintenant intégré à Ownl) utilise l'analyse comportementale :
# Utiliser DynamicFetcher pour PerimeterX
page = DynamicFetcher.get('https://perimeterx-site.com')
L'automatisation complète du navigateur gère mieux les défis comportementaux.
Akamai
Akamai offre une gestion des bots de qualité entreprise :
# Akamai nécessite souvent des proxys résidentiels
page = StealthyFetcher.get(
'https://akamai-protected.com',
proxy='http://residential-proxy:port',
solve_cloudflare=True
)
Les sites protégés par Akamai nécessitent souvent de combiner plusieurs techniques d'évasion.
Solutions anti-bot personnalisées
Certains sites créent leurs propres systèmes de détection :
# Utiliser les paramètres de furtivité maximale
page = StealthyFetcher.fetch(
'https://custom-protected.com',
solve_cloudflare=True,
block_webrtc=True,
hide_canvas=True,
google_search=True,
real_chrome=True
)
Si cela échoue, passez à DynamicFetcher avec une automatisation complète du navigateur.
Bonnes pratiques
Commencer simple
Commencez avec le StealthyFetcher de base. N'ajoutez de la complexité que si vous rencontrez des blocages :
# Essayer le basique d'abord
page = StealthyFetcher.get('https://site.com')
# Ajouter l'évasion si nécessaire
if 'blocked' in page.text.lower():
page = StealthyFetcher.fetch('https://site.com', solve_cloudflare=True)
Respecter les limites de débit
Même avec des capacités anti-bot, l'envoi de trop de requêtes déclenche la protection :
import time
for url in urls:
page = StealthyFetcher.get(url)
time.sleep(2) # Attendre entre les requêtes
Utiliser des proxys résidentiels pour la production
Les proxys gratuits ou bon marché ont souvent une mauvaise réputation. Investissez dans des proxys résidentiels de qualité pour un scraping fiable :
# Proxy résidentiel de qualité
page = StealthyFetcher.get(
'https://site.com',
proxy='http://premium-residential-proxy:port'
)
Vérifier robots.txt
Vérifiez toujours si le site autorise le scraping :
# Vérifier robots.txt avant le scraping
from urllib.parse import urlparse
domain = urlparse('https://site.com').netloc
robots_url = f'https://{domain}/robots.txt'
Gérer les erreurs avec élégance
Intégrez la gestion des erreurs dans votre scraper :
from scrapling.fetchers import StealthyFetcher
fetcher = StealthyFetcher()
try:
page = fetcher.get('https://site.com')
except Exception as e:
print(f'Erreur: {e}')
# Revenir à DynamicFetcher
from scrapling.fetchers import DynamicFetcher
fetcher = DynamicFetcher()
page = fetcher.get('https://site.com')
Dépannage
Toujours bloqué
Si vous rencontrez des blocages malgré l'utilisation de StealthyFetcher :
- Activez toutes les options d'évasion :
page = StealthyFetcher.fetch(
'https://site.com',
solve_cloudflare=True,
block_webrtc=True,
hide_canvas=True,
google_search=True,
real_chrome=True
)
- Passez à DynamicFetcher :
from scrapling.fetchers import DynamicFetcher
page = DynamicFetcher.get('https://site.com')
- Ajouter la rotation de proxy :
page = StealthyFetcher.get(
'https://site.com',
proxy='http://residential-proxy:port'
)
Boucle de défi Cloudflare
Parfois, StealthyFetcher reste bloqué dans une boucle de défi :
- Augmentez le délai d'attente :
page = StealthyFetcher.fetch(
'https://site.com',
solve_cloudflare=True,
timeout=120
)
- Utilisez real_chrome :
page = StealthyFetcher.fetch(
'https://site.com',
solve_cloudflare=True,
real_chrome=True
)
Les CAPTCHA ne se résolvent pas
Certains CAPTCHA nécessitent une intervention manuelle :
page = DynamicFetcher.get('https://site.com')
if page.is_visible('[class*="captcha"]'):
page.screenshot(path='manual_captcha.png')
# Résolvez manuellement, puis continuez
input('Appuyez sur Entrée après avoir résolu le CAPTCHA...')
page.click('.submit-button')
Performances lentes
L'évasion anti-bot ajoute une surcharge. Pour un scraping plus rapide :
- Utilisez StealthyFetcher au lieu de DynamicFetcher lorsque c'est possible
- Ajoutez la mise en commun des connexions (connection pooling)
- Utilisez des proxys plus rapides
- Réduisez les options d'évasion inutiles
Conclusion
Le contournement des vérifications anti-bot nécessite de comprendre comment fonctionne la détection et d'utiliser les bons outils pour chaque situation. Scrapling fournit des solutions complètes via StealthyFetcher pour la plupart des systèmes de protection et DynamicFetcher pour les scénarios avancés.
Les principaux points à retenir :
- Utilisez StealthyFetcher pour Cloudflare, Turnstile et la protection anti-bot de base
- Activez solve_cloudflare=True pour la résolution automatique des défis
- Passez à DynamicFetcher lorsque StealthyFetcher échoue
- Ajoutez la rotation de proxy pour le scraping à grande échelle
- Combinez plusieurs techniques d'évasion pour les sites tenaces
Avec l'intégration OpenClaw, vous contrôlez toutes ces capacités via le langage naturel. Dites à votre assistant IA ce dont vous avez besoin, et il sélectionnera automatiquement l'approche anti-bot appropriée. Une fois vos données collectées, vous pouvez utiliser Apidog pour tester et valider les API, créer des suites de tests automatisées et générer de la documentation pour les points de terminaison que vous découvrez.
FAQ
Quelle est la différence entre StealthyFetcher et DynamicFetcher ?
StealthyFetcher utilise un Chrome sans interface graphique modifié avec des correctifs d'évasion intégrés. DynamicFetcher utilise l'automatisation complète de Playwright. StealthyFetcher est plus rapide mais peut échouer face à une détection avancée. DynamicFetcher est plus fiable mais plus lent.
Scrapling fonctionne-t-il contre tous les systèmes anti-bot ?
Aucune solution anti-bot ne fonctionne à 100 % du temps. Scrapling gère la plupart des systèmes courants (Cloudflare, PerimeterX, Akamai) de manière fiable. Les solutions personnalisées ou d'entreprise peuvent nécessiter des techniques supplémentaires ou une intervention manuelle.
Le contournement des anti-bots est-il légal ?
Les lois varient selon les juridictions et dépendent des conditions de service du site. Généralement, le scraping de données publiques est acceptable. Le contournement de l'authentification ou l'accès à des données privées sans autorisation franchit les limites légales.
Pourquoi mon scraping est-il toujours bloqué ?
Vérifiez ces problèmes courants : réputation de l'IP (utilisez des proxys résidentiels), limitation de débit (ajoutez des délais), évasion insuffisante (activez plus d'options), ou défis JavaScript (utilisez DynamicFetcher).
Comment gérer les CAPTCHA ?
StealthyFetcher résout automatiquement Cloudflare Turnstile. Pour les autres CAPTCHA, utilisez DynamicFetcher et mettez en pause pour une résolution manuelle, ou intégrez des services tiers de résolution de CAPTCHA.
Puis-je utiliser mon propre navigateur Chrome ?
Oui. Définissez real_chrome=True dans StealthyFetcher pour utiliser votre Chrome installé au lieu du Chromium de Playwright. Cela fournit une empreinte numérique de navigateur plus légitime.
Ai-je besoin de proxys ?
Pour le scraping à petite échelle, non. Pour les opérations de production ou à grande échelle, les proxys résidentiels améliorent considérablement les taux de réussite en évitant le blocage basé sur l'IP.
Comment faire pivoter les User-Agents ?
StealthyFetcher fait pivoter automatiquement les User-Agents. Pour un contrôle manuel :
fetcher = StealthyFetcher(headers={'User-Agent': 'Votre-UA-personnalisé'})
Quel est le taux de réussite contre Cloudflare ?
Avec une configuration appropriée, les taux de réussite dépassent 90 % pour la plupart des sites protégés par Cloudflare. Les défis Turnstile sont résolus automatiquement.
Puis-je scraper depuis plusieurs emplacements géographiques ?
Oui. Utilisez les paramètres timezone_id et locale :
page = StealthyFetcher.fetch(
'https://site.com',
timezone_id='Europe/London',
locale='en-GB'
)
