Geonode logo
Geonode Team

Geonode Team

Mis à jour : 7 octobre 2026

Publié : 2 septembre 2026

Cloudscraper en Python : un guide complet

Cloudscraper est une bibliothèque Python permettant de contourner la page de vérification interstitielle de Cloudflare. Elle était réellement efficace, elle est largement recommandée, mais aucune version fonctionnelle n’a été publiée depuis 2023. Cette lacune est plus importante que n'importe quel guide d'utilisation, car la détection de Cloudflare a considérablement évolué au cours des années qui ont suivi et le fichier README de la bibliothèque décrit un modèle de menace qui n'existe plus. Cet article explique ce que fait cette bibliothèque, pourquoi cette approche a cessé de fonctionner et quelles alternatives existent.

Nous sommes Geonode et nous vendons des proxys, ce qui est généralement le produit recommandé en complément d'une bibliothèque comme celle-ci. Pour être honnêtes, nous n'avons pas l'intention de rédiger un guide pour contourner cette restriction, d'autant plus que, dans ce cas précis, l'outil est de toute façon obsolète. Nous avons vérifié le paquet en septembre 2026 : version 1.2.71 sur PyPI, mise en ligne en avril 2023, avec un dépôt source dont la dernière modification remonte à juin 2025 et dont les commits sont de nature administrative plutôt que fonctionnelle. Entre-temps, la détection des bots de Cloudflare s’est orientée vers l’apprentissage automatique sur des milliards de requêtes, la détection « headless » basée sur JavaScript et l’analyse de l’ordre des en-têtes. Une bibliothèque basée sur requestsqui résout un problème lié à JavaScript ne répond à aucun de ces aspects. La partie utile de cet article réside dans les trois dernières sections.

À quoi sert Cloudscraper ?

La description fournie par la bibliothèque elle-même est claire quant à son objectif, et sa lecture s'avère aujourd'hui très instructive.

Cloudscraper se décrit comme « un module Python simple permettant de contourner la page anti-bot de Cloudflare (également appelée « I'm Under Attack Mode », ou IUAM), implémenté avec Requests ». Elle précise que « la page anti-bot de Cloudflare se contente actuellement de vérifier si le client prend en charge JavaScript, bien qu’ils puissent ajouter d’autres techniques à l’avenir ».

Le mécanisme qu’il contournait est la page interstitielle classique :

Checking your browser before accessing website.com.
This process is automatic. Your browser will redirect to your requested content shortly.
Please allow up to 5 seconds...

L’approche de la bibliothèque consistait à utiliser « un moteur/interpréteur JavaScript pour résoudre les défis JavaScript », ce qui « permet au script d’usurper facilement l’identité d’un navigateur web classique sans avoir à désobfusquer ni analyser explicitement le JavaScript de Cloudflare ». Sa documentation précise qu’un script « resterait inactif pendant environ 5 secondes lors de la première visite sur n’importe quel site sur lequel l’anti-bot de Cloudflare est activé », sans délai par la suite.

Compte tenu du problème tel qu’il se présentait, il s’agissait d’une conception raisonnable. Le défi consistait en une énigme JavaScript ; la bibliothèque exécutait un moteur JavaScript et la résolvait.

Le fichier README contient également un engagement qui date précisément le projet : « Cloudflare modifie ses techniques périodiquement, je mettrai donc fréquemment à jour ce dépôt. »

Le statut de maintenance, vérifié

Des faits plutôt que des impressions, vérifiés en septembre 2026.

La dernière version disponible sur PyPI est la 1.2.71, publiée le 25 avril 2023. Cela représente un écart de plus de trois ans par rapport à un objectif que l’auteur décrivait comme évoluant périodiquement.

La dernière mise à jour du dépôt GitHub remonte à juin 2025, et les commits les plus récents sont intitulés « Fix owner », « re-add gitignore » et « Correct the owner details » — il s’agit davantage de tâches d’entretien que de mises à jour liées à la détection.

Il n’est pas archivé et compte environ 36 tickets ouverts.

Rien de tout cela ne constitue une critique à l’égard de l’auteur, qui a écrit un outil utile et l’a mis à disposition gratuitement sous licence MIT. Il s’agit simplement de l’état actuel du paquet, et c’est le fait le plus pertinent pour quiconque s’apprête à l’utiliser. Une bibliothèque dont toute la valeur réside dans sa capacité à suivre le rythme d’un adversaire est une bibliothèque dont la date de publication est la spécification.

Si vous trouvez que cloudscraper est recommandé dans un article, vérifiez la date de cet article. Une grande partie des conseils qui circulent étaient exacts au moment où ils ont été rédigés, mais n’ont pas été remis à jour.

Comment fonctionne désormais la détection de Cloudflare

La raison pour laquelle cette approche ne fonctionne plus, d'après la documentation de Cloudflare.

Le score bot de Cloudflare va de 1 à 99, où 1 signifie « Cloudflare est presque certain que la requête était automatisée » et 99 indique qu'il s'agit probablement d'un utilisateur humain. Ce score est généré par plusieurs moteurs fonctionnant de concert.

L'apprentissage automatique est à l'origine de la plupart des détections. Cloudflare décrit une « méthodologie d'apprentissage automatique supervisé » qui analyse des milliards de requêtes quotidiennes, en examinant « les caractéristiques des requêtes telles que les en-têtes et les signaux du navigateur » afin de prédire la probabilité qu'un client soit un humain.

Les heuristiques comparent les signatures connues, attribuant un score de 1 aux détections hautement fiables.

Les détections JavaScript identifient les navigateurs sans interface graphique grâce à une « injection JavaScript légère et invisible côté client » qui, selon Cloudflare, « ne collecte aucune information permettant d’identifier personnellement l’utilisateur ».

Les identifiants de détection sont des règles statiques identifiant des comportements prévisibles. L’exemple donné par Cloudflare est révélateur : ils permettent de détecter lorsqu’« un client envoie des en-têtes dans un ordre différent de celui que son navigateur déclaré utiliserait ».

C’est là que réside le nœud du problème. L’ordre des en-têtes n’est pas contrôlé par une bibliothèque basée sur l’requests, et il ne change pas lorsque vous résolvez un défi JavaScript. Il en va de même pour la signature de la poignée de main TLS, qui est une propriété de votre pile HTTP Python plutôt que de ce que vous envoyez.

Le modèle s’est donc inversé. En 2019, la question était « ce client peut-il exécuter du JavaScript ? », et une bibliothèque dotée d’un moteur JavaScript répondait par l’affirmative. Désormais, la question est « tous les aspects de ce client correspondent-ils à ce qu’il prétend être ? », et un processus Python se présentant comme Chrome échoue sur plusieurs signaux indépendants à la fois — dont aucun n’est pris en compte par un outil de résolution de défis.

Cloudflare a également ajouté des réponses délibérément adversaires. Son « AI Labyrinth » fournit indéfiniment aux robots d’indexation du contenu généré cohérent au lieu de les bloquer, ce qui signifie qu’un scraper peut donner l’impression de réussir tout en ne collectant rien de valeur. Nous avons abordé ce schéma dans les pièges de type honeypot.

Pourquoi les proxys ne résolvent pas ce problème

C'est le moment où nous remettons en cause notre propre produit, car c'est la vérité.

Regardez la liste de détection ci-dessus et notez ce qu’elle contient : composition et ordre des en-têtes, signaux du navigateur, caractéristiques des requêtes identifiées par apprentissage automatique, caractéristiques d’exécution du JavaScript. L’adresse IP n’apparaît nulle part dans la description fournie par Cloudflare elle-même sur la manière dont le score de bot est calculé.

La réputation de l'adresse est certes l’un des critères pris en compte par Cloudflare dans sa décision globale, et une mauvaise adresse ne vous aidera pas. Mais ce n’est qu’un critère parmi tant d’autres, et ce n’est pas celui qui identifie un client Python comme automatisé. Un proxy résidentiel placé en amont d’une session requests vous fournit une adresse « propre » associée à un client qui continue de se présenter exactement tel qu’il est.

En résumé : si vous êtes signalé parce que votre adresse se trouve dans une plage de centres de données partagés ayant des antécédents négatifs, de meilleures adresses peuvent vous aider. Si vous êtes signalé parce que votre requête ne correspond pas au navigateur qu’elle prétend être, aucun changement d’adresse n’y changera quoi que ce soit — et nous préférons vous le dire plutôt que de vous vendre de la bande passante pour cela.

Que faire à la place ?

La partie vraiment utile, classée par ordre de priorité pour résoudre le plus grand nombre de problèmes.

Vérifiez s’il existe une API officielle. Une grande partie des sites hébergés par Cloudflare en publient une, précisément pour que les utilisateurs légitimes disposent d’un accès autorisé. Cette vérification est bien moins fréquente qu’elle ne devrait l’être, car le réflexe est de chercher un contournement plutôt que de consulter la documentation.

Vérifiez s’il existe un flux de données ou un programme de partenariat. Des secteurs entiers publient des données en masse à l’intention des utilisateurs en aval. Renseignez-vous.

Vérifiez ce qui est disponible sans passer par le chemin protégé. Plans de site, flux RSS, JSON-LD intégrés dans les pages, ensembles de données publics, archives. Il est fréquent de constater que ce que vous recherchiez précisément est publié quelque part sans protection.

Contactez le site. Un e-mail expliquant qui vous êtes, ce dont vous avez besoin et en quelle quantité résout le problème plus souvent que ne le laisse entendre le discours courant. L’objection d’un exploitant de site porte généralement sur une charge non justifiée, et non sur vous en particulier. C’est également la seule voie qui garantit un accès qui continue de fonctionner.

Faites appel à un fournisseur de données sous licence. Pour les données courantes — informations sur les entreprises, catalogues de produits, données de marché —, quelqu’un les vend, et le prix est souvent inférieur au temps de développement nécessaire pour éviter cet achat.

Demandez-vous si vous n’avez pas besoin de moins de données. Une grande partie de la collecte rassemble bien plus que ce que la requête exige. Une demande plus restreinte et plus précise est plus facile à satisfaire par des moyens légitimes et plus facile à justifier lorsque vous la formulez.

Et si vous utilisez un client automatisé légitime, la voie qui s’impose est celle de l’identification plutôt que du camouflage. Le secteur s’oriente vers l’authentification cryptographique des agents, des politiques d’accès par agent et, dans certains cas, un accès payant pour le trafic automatisé — une orientation que nous avons décrite dans notre article sur DataDome. Être un agent qu’un site peut identifier et choisir d’autoriser est la seule approche qui gagne en fiabilité au fil du temps, plutôt que l’inverse.

Si vous disposez déjà d'un code qui l'utilise

Conseils pratiques pour la situation dans laquelle se trouvent de nombreuses personnes : un pipeline fonctionnel basé sur CloudScraper qui a commencé à présenter des dysfonctionnements.

Commencez par déterminer ce qui se passe réellement. L'expression « ça ne fonctionne plus » recouvre plusieurs types de défaillances distinctes nécessitant des réponses différentes. Affichez le code d'état et la première partie du corps du message plutôt que de vous contenter d'intercepter l'exception :

import cloudscraper

scraper = cloudscraper.create_scraper()
r = scraper.get(url)
print(r.status_code, r.headers.get("content-type"))
print(r.text[:300])

Une réponse de type 403 avec une page de blocage Cloudflare signifie que vous avez été identifié. Une réponse de type 200 avec une page de défi signifie que le défi n'a pas été résolu. Une page 200 avec un contenu plausible mais non pertinent signifie que vous êtes peut-être pris dans un « tarpit ». Une page 503 avec une page interstitielle Cloudflare signifie que l’ancien type de défi est toujours en place et qu’un autre élément de votre configuration est incorrect. Chacune de ces situations indique une cause différente.

Vérifiez ensuite si c’est le site qui a changé ou la bibliothèque. Récupérez la même URL avec requests et avec un vrai navigateur. Si le navigateur fonctionne et que les deux chemins Python échouent de manière identique, le site a renforcé sa protection et aucune configuration de la bibliothèque n’y changera rien. Si requests fonctionne, cloudscraper ajoute un problème au lieu d’en résoudre un — ce qui arrive, et qui mérite d’être vérifié avant de supposer que vous en avez besoin.

Ne fixez pas une ancienne version dans l’espoir de rétablir le comportement antérieur. L’échec se situe de l’autre côté de la connexion, et non dans le paquet. Aucune version antérieure ne connaît une méthode de détection introduite après sa création.

Supprimez-la si elle ne sert plus à rien. Une dépendance qui résolvait un problème qui n’existe plus est un paquet non maintenu dans votre chaîne d’approvisionnement qui n’apporte aucun avantage. Les sites passent par des phases d’activation et de désactivation des modes les plus agressifs de Cloudflare, et un pipeline construit pendant une période où ces modes étaient actifs peut désormais fonctionner correctement sans cette bibliothèque. Testez-le.

Et considérez cet échec comme une information sur le projet plutôt que comme un bug à corriger. Un pipeline de collecte qui nécessite une bibliothèque de contournement non maintenue pour fonctionner présente un problème structurel, et le temps passé à le restaurer est du temps qui n’est pas consacré à la recherche de l’API, du flux ou de la personne à qui s’adresser. D’après notre expérience, la deuxième recherche aboutit plus souvent que la première.

La véritable utilité des proxys

Par souci d'exhaustivité, puisque c'est notre domaine d'activité et qu'il existe de réelles applications.

Répartir le trafic entre plusieurs adresses lorsque vous avez optimisé votre débit et qu’une seule adresse constitue un goulot d’étranglement. Il s’agit d’un problème de débit, et c’est précisément ce que les proxys permettent de résoudre.

Accéder à du contenu spécifique à une région, lorsque le but premier est de donner l’impression de se trouver à un endroit précis.

Contourner un réseau qui filtre un site, ce qui est un problème de votre côté plutôt que de celui du site.

La vérification des publicités et la surveillance de la marque, pour contrôler vos propres dépenses dans les régions pour lesquelles vous avez payé.

Aucun de ces cas ne constitue un contournement. Dans tous ces cas, l’adresse est véritablement la variable, et dans chacun d’entre eux, le point de départ judicieux est la bande passante des centres de données — la nôtre à partir de 0,14 $/Go —, qui ne passe à la bande passante résidentielle à 0,79 $/Go que lorsque cela s’avère manifestement nécessaire. Chiffres tirés de notre page de tarification, vérifiés en septembre 2026.

Ce que nous ne ferons pas, c’est vendre une offre en laissant entendre qu’elle permet de contourner un modèle d’apprentissage automatique analysant l’ordre des en-têtes. Ce n’est pas le rôle d’une adresse IP.

Questions fréquentes

Cloudscraper fonctionne-t-il toujours ?

Face à la protection moderne de Cloudflare, généralement non. La dernière version disponible sur PyPI date d’avril 2023, et la bibliothèque a été conçue à une époque où le défi consistait principalement en une vérification JavaScript. La détection actuelle repose sur l’apprentissage automatique appliqué aux caractéristiques des requêtes, l’analyse de l’ordre des en-têtes et la détection « headless » basée sur JavaScript, autant d’éléments qu’aucun outil de résolution de défis ne prend en compte.

Cloudscraper fait-il encore l’objet d’une maintenance ?

Le dépôt n’est pas archivé, mais la dernière version date d’avril 2023 et les commits les plus récents — datant de juin 2025 — sont d’ordre administratif plutôt que fonctionnel. Pour une bibliothèque dont la valeur repose entièrement sur le suivi d’une cible en constante évolution, la date de publication correspond de fait à la spécification.

Pourquoi Cloudscraper renvoie-t-il un code 403 ?

Parce que Cloudflare a identifié le client grâce à des signaux que la bibliothèque ne contrôle pas. L’ordre des en-têtes, les caractéristiques de la poignée de main TLS et les caractéristiques des requêtes identifiées par apprentissage automatique indiquent toutes qu’il s’agit d’un client HTTP Python, que le défi JavaScript ait été résolu ou non.

Un proxy permettra-t-il à Cloudscraper de fonctionner ?

Non, sauf si la réputation de votre adresse est précisément la raison pour laquelle vous avez été signalé. La description fournie par Cloudflare de son « bot score » inclut l’apprentissage automatique des caractéristiques des requêtes, des heuristiques, des détections JavaScript et des règles d’ordre des en-têtes — aucun de ces éléments ne change lorsque votre adresse change.

Que puis-je utiliser à la place de Cloudscraper ?

Recherchez une API officielle, un flux de données d’un partenaire ou des données publiées ailleurs sans protection. Envisagez ensuite de vous adresser directement au site, ce qui permet souvent de résoudre le problème plus facilement qu’on ne le pense et d’obtenir un accès qui continue de fonctionner. Les fournisseurs de données sous licence sont souvent moins coûteux que le temps d’ingénierie passé à les contourner.

Est-il légal de contourner Cloudflare ?

Dans la plupart des juridictions, les violations des conditions d’utilisation relèvent du droit des contrats plutôt que du droit pénal, et la conséquence concrète est le blocage. La légalité dépend de la juridiction, des données concernées et de leur utilisation. Un site ayant déployé une protection a exprimé une position, qu’il convient de prendre en compte indépendamment de l’analyse juridique. Ceci ne constitue pas un avis juridique.

Pourquoi obtiens-je une réponse 200 sans contenu utile ?

Vous avez peut-être atteint un « tarpit ». Le Labyrinth de Cloudflare, basé sur l’IA, fournit aux robots d’exploration un contenu généré cohérent et plausible d’un point de vue factuel, mais qui n’a tout simplement aucun rapport avec le site, plutôt que de les bloquer. Tout renvoie un résultat positif alors que vous ne collectez aucune information, ce qui est voulu.

L’utilisation d’un navigateur « headless » est-elle plus efficace ?

Cela permet de détecter davantage de signaux qu’une bibliothèque basée sur requests, car un véritable navigateur produit de véritables caractéristiques TLS et d’en-tête. Cela coûte également beaucoup plus cher en bande passante et en puissance de calcul, et les détections JavaScript de Cloudflare ciblent spécifiquement les navigateurs sans interface graphique. Il s’agit davantage d’un compromis que d’une solution, et la question des conditions reste inchangée.

Conclusion

Cloudscraper a bien résolu un problème concret, mais ce problème n’existe plus sous la forme pour laquelle il avait été conçu. La dernière version fonctionnelle date d’avant plusieurs générations de changements de l’autre côté, et le fichier README de la bibliothèque promet des mises à jour fréquentes qui n’ont pas eu lieu depuis plus de trois ans.

Comprendre pourquoi est plus utile que de trouver un remplacement. L’ancienne question était de savoir si un client pouvait exécuter du JavaScript, et une bibliothèque dotée d’un moteur JavaScript pouvait y répondre. La question actuelle est de savoir si toutes les caractéristiques d’un client correspondent à ce qu’il prétend être — ordre des en-têtes, caractéristiques TLS, signaux du navigateur, comportement — et une session HTTP Python prétendant être Chrome échoue simultanément sur plusieurs de ces points, peu importe ce qu’elle résout.

C’est également la raison pour laquelle nous ne vous vendrons pas de proxys comme solution. L’explication fournie par Cloudflare sur la manière dont son « bot score » est calculé ne mentionne absolument pas l’adresse du client. De meilleures adresses aident à résoudre les problèmes d’adresse, et rien d’autre.

Ce qui fonctionne, c’est une méthode sans fioritures mais durable : trouver l’API, trouver le flux, trouver les données publiées ailleurs, ou demander. Cette dernière solution, en particulier, présente un taux de réussite bien plus élevé que ne le laisse entendre le débat, et c’est la seule voie qui ne nécessite pas d’être réexaminée chaque fois qu’une mise à jour de détection est publiée.