Stratégies pour contourner la protection Cloudflare avec Puppeteer
Apprenez des techniques efficaces pour contourner de manière éthique les protections de Cloudflare à l'aide de Puppeteer, notamment la gestion des proxys et la simulation du comportement humain.

CloudflareLes mesures de sécurité rendent difficile l'accès des robots aux sites web. Mais avec MarionnettisteVous pouvez contourner ces défenses si vous le faites de manière éthique. Voici un guide rapide pour commencer :
Techniques de base:
- Utilisez le procurations résidentielles et les faire pivoter pour éviter d'être détectés.
- Imitez le comportement humain avec retards aléatoires et mouvements de souris.
- Poignée Défis JavaScript et CAPTCHA en utilisant des plugins comme
puppeteer-extra-plugin-recaptcha. - Masquer l'automatisation en peaufinant empreintes digitales du navigateur et les agents utilisateurs.
Configuration du marionnettiste:
Installer Puppeteer et les plugins :
npm install puppeteer puppeteer-extra puppeteer-extra-plugin-stealthAjoutez des paramètres furtifs pour éviter la détection :
<span class="hljs-keyword">const</span> puppeteer = <span class="hljs-built_in">require</span>(<span class="hljs-string">'puppeteer-extra'</span>); <span class="hljs-keyword">const</span> <span class="hljs-title class_">StealthPlugin</span> = <span class="hljs-built_in">require</span>(<span class="hljs-string">'puppeteer-extra-plugin-stealth'</span>); puppeteer.<span class="hljs-title function_">use</span>(<span class="hljs-title class_">StealthPlugin</span>());
Rappel juridique: Respectez toujours les conditions d’utilisation du site Web, évitez de surcharger les serveurs et utilisez l’automatisation de manière responsable.
Ces étapes peuvent améliorer votre taux de réussite face aux protections Cloudflare. Consultez l'article pour découvrir des extraits de code détaillés et des techniques avancées.
nodejs Marionnettiste Tutoriel n°7 - Détection de contournement à l'aide de ...
Guide d'installation du marionnettiste
Suivez ces étapes pour configurer Puppeteer avec des paramètres et des plugins personnalisés pour naviguer dans les protections Cloudflare.
Étapes d'installation de base du marionnettiste
Tout d'abord, assurez-vous d'avoir Node.js La version 18 ou ultérieure est installée. Exécutez ensuite la commande suivante pour installer Puppeteer et ses extensions associées :
npm install puppeteer puppeteer-extra puppeteer-extra-plugin-stealth
Ensuite, créez un nouveau fichier JavaScript et importez les modules nécessaires :
<span class="hljs-keyword">const</span> puppeteer = <span class="hljs-built_in">require</span>(<span class="hljs-string">'puppeteer-extra'</span>);
<span class="hljs-keyword">const</span> <span class="hljs-title class_">StealthPlugin</span> = <span class="hljs-built_in">require</span>(<span class="hljs-string">'puppeteer-extra-plugin-stealth'</span>);
puppeteer.<span class="hljs-title function_">use</span>(<span class="hljs-title class_">StealthPlugin</span>());
Après cela, vous devrez modifier les paramètres de lancement du navigateur pour éviter la détection.
Paramètres de marionnettiste requis
Configurez votre instance de navigateur avec des configurations qui réduisent le risque d'être signalé :
<span class="hljs-keyword">const</span> browser = <span class="hljs-keyword">await</span> puppeteer.<span class="hljs-title function_">launch</span>({
<span class="hljs-attr">headless</span>: <span class="hljs-literal">false</span>,
<span class="hljs-attr">args</span>: [
<span class="hljs-string">'--no-sandbox'</span>,
<span class="hljs-string">'--disable-setuid-sandbox'</span>,
<span class="hljs-string">'--disable-infobars'</span>,
<span class="hljs-string">'--window-position=0,0'</span>,
<span class="hljs-string">'--ignore-certificate-errors'</span>,
<span class="hljs-string">'--ignore-certificate-errors-spki-list'</span>
]
});
Si vous souhaitez utiliser un proxy pour masquer votre IP, incluez ces paramètres supplémentaires :
<span class="hljs-keyword">const</span> browser = <span class="hljs-keyword">await</span> puppeteer.<span class="hljs-title function_">launch</span>({
<span class="hljs-attr">args</span>: [
<span class="hljs-string">'--proxy-server=http://proxy-address:port'</span>
]
});
<span class="hljs-keyword">await</span> page.<span class="hljs-title function_">authenticate</span>({
<span class="hljs-attr">username</span>: <span class="hljs-string">'proxy-username'</span>,
<span class="hljs-attr">password</span>: <span class="hljs-string">'proxy-password'</span>
});
Modules complémentaires utiles pour Puppeteer
Améliorez les fonctionnalités de Puppeteer avec ces plugins :
| Nom Plugin | Interet | Fonctionnalités clés |
|---|---|---|
| marionnettiste-extra-plugin-furtif | Anti-détection | Modifie l'empreinte digitale du navigateur et imite le comportement humain |
| marionnettiste-extra-plugin-recaptcha | Gestion des CAPTCHA | Automatise la résolution des CAPTCHA |
| marionnettiste-extra-plugin-adblocker | La gestion des ressources | Bloque les publicités et les trackers pour réduire les risques de détection |
Pour intégrer ces modules complémentaires, utilisez le code suivant :
<span class="hljs-keyword">const</span> puppeteer = <span class="hljs-built_in">require</span>(<span class="hljs-string">'puppeteer-extra'</span>);
<span class="hljs-keyword">const</span> <span class="hljs-title class_">StealthPlugin</span> = <span class="hljs-built_in">require</span>(<span class="hljs-string">'puppeteer-extra-plugin-stealth'</span>);
<span class="hljs-keyword">const</span> <span class="hljs-title class_">AdblockerPlugin</span> = <span class="hljs-built_in">require</span>(<span class="hljs-string">'puppeteer-extra-plugin-adblocker'</span>);
puppeteer.<span class="hljs-title function_">use</span>(<span class="hljs-title class_">StealthPlugin</span>());
puppeteer.<span class="hljs-title function_">use</span>(<span class="hljs-title class_">AdblockerPlugin</span>({ <span class="hljs-attr">blockTrackers</span>: <span class="hljs-literal">true</span> }));
Enfin, pour rendre vos actions plus naturelles, introduisez des délais aléatoires entre elles :
<span class="hljs-keyword">const</span> <span class="hljs-title function_">delay</span> = ms => <span class="hljs-keyword">new</span> <span class="hljs-title class_">Promise</span>(<span class="hljs-function"><span class="hljs-params">resolve</span> =></span> <span class="hljs-built_in">setTimeout</span>(resolve, ms));
<span class="hljs-keyword">await</span> <span class="hljs-title function_">delay</span>(<span class="hljs-title class_">Math</span>.<span class="hljs-title function_">random</span>() * <span class="hljs-number">1000</span> + <span class="hljs-number">1000</span>); <span class="hljs-comment">// Random delay between 1-2 seconds</span>
sbb-itb-23997f1
Méthodes de gestion Cloudflare Sécurité
Améliorez votre configuration Puppeteer avec ces techniques pour mieux naviguer dans les défenses de Cloudflare.
Gestion de l'identité du navigateur
Le système anti-bot de Cloudflare surveille les empreintes digitales et les signaux d'automatisation du navigateur. Pour masquer l'activité de Puppeteer, modifiez les identifiants et les propriétés du navigateur comme indiqué ci-dessous :
<span class="hljs-keyword">const</span> browser = <span class="hljs-keyword">await</span> puppeteer.<span class="hljs-title function_">launch</span>({
<span class="hljs-attr">args</span>: [
<span class="hljs-string">'--window-size=1920,1080'</span>,
<span class="hljs-string">'--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36'</span>
],
<span class="hljs-attr">ignoreDefaultArgs</span>: [<span class="hljs-string">'--enable-automation'</span>]
});
<span class="hljs-keyword">await</span> page.<span class="hljs-title function_">evaluateOnNewDocument</span>(<span class="hljs-function">() =></span> {
<span class="hljs-keyword">delete</span> navigator.<span class="hljs-property">webdriver</span>;
<span class="hljs-title class_">Object</span>.<span class="hljs-title function_">defineProperty</span>(navigator, <span class="hljs-string">'plugins'</span>, {
<span class="hljs-attr">get</span>: <span class="hljs-function">() =></span> [<span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3</span>, <span class="hljs-number">4</span>, <span class="hljs-number">5</span>]
});
});
Cette configuration supprime les indicateurs d'automatisation et imite une empreinte digitale de navigateur standard, aidant à contourner les contrôles de Cloudflare.
Solutions aux défis JavaScript
Relever les défis JavaScript de Cloudflare nécessite de simuler un comportement humain. Par exemple, vous pouvez attendre la disparition du formulaire de défi et introduire des délais aléatoires entre les actions :
<span class="hljs-comment">// Wait until the Cloudflare challenge form is gone</span>
<span class="hljs-keyword">await</span> page.<span class="hljs-title function_">waitForFunction</span>(<span class="hljs-function">() =></span> {
<span class="hljs-keyword">return</span> <span class="hljs-variable language_">document</span>.<span class="hljs-title function_">querySelector</span>(<span class="hljs-string">'#challenge-form'</span>) === <span class="hljs-literal">null</span>;
}, { <span class="hljs-attr">timeout</span>: <span class="hljs-number">30000</span> });
<span class="hljs-comment">// Add random delays to simulate human interaction</span>
<span class="hljs-keyword">const</span> <span class="hljs-title function_">randomDelay</span> = (<span class="hljs-params">min, max</span>) => {
<span class="hljs-keyword">return</span> <span class="hljs-title class_">Math</span>.<span class="hljs-title function_">floor</span>(<span class="hljs-title class_">Math</span>.<span class="hljs-title function_">random</span>() * (max - min + <span class="hljs-number">1</span>) + min);
};
<span class="hljs-keyword">await</span> page.<span class="hljs-title function_">waitForTimeout</span>(<span class="hljs-title function_">randomDelay</span>(<span class="hljs-number">1000</span>, <span class="hljs-number">3000</span>));
Vous pouvez également créer des gestionnaires personnalisés pour mieux imiter le comportement des utilisateurs, si nécessaire. Ensuite, vous aurez besoin d'une stratégie de gestion des CAPTCHA.
Options de gestion CAPTCHA
Face aux CAPTCHA, l'utilisation d'un plugin de résolution de CAPTCHA peut simplifier le processus :
<span class="hljs-keyword">const</span> <span class="hljs-title class_">RecaptchaPlugin</span> = <span class="hljs-built_in">require</span>(<span class="hljs-string">'puppeteer-extra-plugin-recaptcha'</span>);
puppeteer.<span class="hljs-title function_">use</span>(
<span class="hljs-title class_">RecaptchaPlugin</span>({
<span class="hljs-attr">provider</span>: {
<span class="hljs-attr">id</span>: <span class="hljs-string">'2captcha'</span>,
<span class="hljs-attr">token</span>: <span class="hljs-string">'your-api-key'</span>
}
})
);
Si le plugin ne parvient pas à résoudre le CAPTCHA, vous pouvez passer à la rotation du proxy en guise de solution de secours :
<span class="hljs-keyword">try</span> {
<span class="hljs-keyword">await</span> page.<span class="hljs-title function_">solveRecaptchas</span>();
} <span class="hljs-keyword">catch</span> (e) {
<span class="hljs-comment">// Rotate to a new proxy if CAPTCHA solving fails</span>
<span class="hljs-keyword">await</span> page.<span class="hljs-title function_">setRequestInterception</span>(<span class="hljs-literal">true</span>);
<span class="hljs-keyword">await</span> <span class="hljs-title function_">useNextProxy</span>();
}
Ces méthodes vous aident à surmonter les défis CAPTCHA et à maintenir l’accès, même lorsque les outils d’automatisation rencontrent des obstacles.
Conseils et directives en matière de fiabilité
La mise en œuvre de techniques fiables est essentielle pour garantir le succès de l’automatisation.
Configuration et utilisation du proxy
L'utilisation de proxys bien gérés peut contribuer à réduire considérablement les risques de détection. Par exemple, les proxys résidentiels premium offrent de meilleures capacités de contournement. Voici un exemple de configuration :
<span class="hljs-keyword">const</span> browser = <span class="hljs-keyword">await</span> puppeteer.<span class="hljs-title function_">launch</span>({
<span class="hljs-attr">args</span>: [
<span class="hljs-string">`--proxy-server=<span class="hljs-subst">${proxyAddress}</span>`</span>,
<span class="hljs-string">'--no-sandbox'</span>,
<span class="hljs-string">'--disable-setuid-sandbox'</span>
]
});
<span class="hljs-comment">// Handle proxy authentication</span>
<span class="hljs-keyword">await</span> page.<span class="hljs-title function_">setRequestInterception</span>(<span class="hljs-literal">true</span>);
page.<span class="hljs-title function_">on</span>(<span class="hljs-string">'request'</span>, <span class="hljs-function"><span class="hljs-params">request</span> =></span> {
request.<span class="hljs-title function_">continue</span>({
<span class="hljs-attr">headers</span>: {
...request.<span class="hljs-title function_">headers</span>(),
<span class="hljs-string">'Proxy-Authorization'</span>: <span class="hljs-string">`Basic <span class="hljs-subst">${Buffer.<span class="hljs-keyword">from</span>(
<span class="hljs-string">`<span class="hljs-subst">${proxyUsername}</span>:<span class="hljs-subst">${proxyPassword}</span>`</span>
).toString(<span class="hljs-string">'base64'</span>)}</span>`</span>
}
});
});
La rotation régulière des proxys permet également de maintenir un accès ininterrompu :
<span class="hljs-keyword">const</span> proxyList = [
<span class="hljs-string">'proxy1.example.com:8080'</span>,
<span class="hljs-string">'proxy2.example.com:8080'</span>,
<span class="hljs-string">'proxy3.example.com:8080'</span>
];
<span class="hljs-keyword">function</span> <span class="hljs-title function_">getNextProxy</span>(<span class="hljs-params"></span>) {
<span class="hljs-keyword">const</span> proxy = proxyList.<span class="hljs-title function_">shift</span>();
proxyList.<span class="hljs-title function_">push</span>(proxy);
<span class="hljs-keyword">return</span> proxy;
}
Contrôle du temps de demande
Simuler un comportement humain peut minimiser les risques de détection. Voici comment gérer efficacement le timing des requêtes :
<span class="hljs-keyword">const</span> <span class="hljs-title function_">simulateHumanBehavior</span> = <span class="hljs-keyword">async</span> (<span class="hljs-params">page</span>) => {
<span class="hljs-comment">// Add random mouse movements</span>
<span class="hljs-keyword">await</span> page.<span class="hljs-property">mouse</span>.<span class="hljs-title function_">move</span>(<span class="hljs-number">100</span>, <span class="hljs-number">200</span>);
<span class="hljs-keyword">await</span> page.<span class="hljs-property">mouse</span>.<span class="hljs-title function_">move</span>(<span class="hljs-number">150</span>, <span class="hljs-number">250</span>, { <span class="hljs-attr">steps</span>: <span class="hljs-number">10</span> });
<span class="hljs-comment">// Randomize typing speed</span>
<span class="hljs-keyword">await</span> page.<span class="hljs-property">keyboard</span>.<span class="hljs-title function_">type</span>(<span class="hljs-string">'Hello World'</span>, {
<span class="hljs-attr">delay</span>: <span class="hljs-title class_">Math</span>.<span class="hljs-title function_">floor</span>(<span class="hljs-title class_">Math</span>.<span class="hljs-title function_">random</span>() * (<span class="hljs-number">150</span> - <span class="hljs-number">50</span>) + <span class="hljs-number">50</span>)
});
<span class="hljs-comment">// Add pauses</span>
<span class="hljs-keyword">await</span> page.<span class="hljs-title function_">waitForTimeout</span>(
<span class="hljs-title class_">Math</span>.<span class="hljs-title function_">floor</span>(<span class="hljs-title class_">Math</span>.<span class="hljs-title function_">random</span>() * (<span class="hljs-number">3000</span> - <span class="hljs-number">1000</span>) + <span class="hljs-number">1000</span>)
);
};
Ces techniques, combinées à une gestion appropriée des sessions, rendent les efforts d’automatisation plus fiables.
Gestion des cookies et des sessions
Une gestion efficace des cookies est essentielle pour assurer la continuité des sessions. Voici comment stocker et restaurer les sessions :
<span class="hljs-comment">// Store successful session cookies</span>
<span class="hljs-keyword">const</span> <span class="hljs-title function_">storeCookies</span> = <span class="hljs-keyword">async</span> (<span class="hljs-params">page</span>) => {
<span class="hljs-keyword">const</span> cookies = <span class="hljs-keyword">await</span> page.<span class="hljs-title function_">cookies</span>();
<span class="hljs-keyword">await</span> fs.<span class="hljs-title function_">writeFile</span>(
<span class="hljs-string">'cookies.json'</span>,
<span class="hljs-title class_">JSON</span>.<span class="hljs-title function_">stringify</span>(cookies, <span class="hljs-literal">null</span>, <span class="hljs-number">2</span>)
);
};
<span class="hljs-comment">// Restore previous session</span>
<span class="hljs-keyword">const</span> <span class="hljs-title function_">loadCookies</span> = <span class="hljs-keyword">async</span> (<span class="hljs-params">page</span>) => {
<span class="hljs-keyword">try</span> {
<span class="hljs-keyword">const</span> cookiesString = <span class="hljs-keyword">await</span> fs.<span class="hljs-title function_">readFile</span>(<span class="hljs-string">'cookies.json'</span>);
<span class="hljs-keyword">const</span> cookies = <span class="hljs-title class_">JSON</span>.<span class="hljs-title function_">parse</span>(cookiesString);
<span class="hljs-keyword">await</span> page.<span class="hljs-title function_">setCookie</span>(...cookies);
} <span class="hljs-keyword">catch</span> (error) {
<span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(<span class="hljs-string">'No stored cookies found'</span>);
}
};
Si les cookies échouent à la validation, vous pouvez les actualiser automatiquement :
<span class="hljs-keyword">const</span> <span class="hljs-title function_">validateCookies</span> = <span class="hljs-keyword">async</span> (<span class="hljs-params">page</span>) => {
<span class="hljs-keyword">const</span> response = <span class="hljs-keyword">await</span> page.<span class="hljs-title function_">goto</span>(targetUrl);
<span class="hljs-keyword">if</span> (response.<span class="hljs-title function_">status</span>() === <span class="hljs-number">403</span>) {
<span class="hljs-keyword">await</span> <span class="hljs-title function_">clearCookies</span>(page);
<span class="hljs-keyword">await</span> <span class="hljs-title function_">initializeNewSession</span>(page);
}
};
Conclusion
Terminons en soulignant les principales techniques et étapes que nous avons abordées.
Récapitulatif des techniques clés
Pour contourner la protection Cloudflare, il faut combiner des méthodes efficaces. Les stratégies les plus importantes sont les suivantes :
- Utilisation de proxys résidentiels avec une rotation appropriée
- Gestion des empreintes digitales du navigateur et des agents utilisateurs
- Gérer efficacement les cookies et les sessions
- Imiter le comportement humain avec des délais aléatoires
- Définition d'en-têtes de requête précis
- Gérer correctement l'authentification
Selon les données de l'industrie, la combinaison de ces techniques peut conduire à des taux de réussite pouvant atteindre 98.7 % lorsque les conditions sont optimisées. [1].
En vous concentrant sur ces méthodes de base, vous pouvez créer un processus d’automatisation fiable et conforme.
Étapes de mise en œuvre
Voici quelques conseils finaux pour affiner votre configuration Puppeteer et vos efforts de contournement de Cloudflare :
- Commencez par les configurations de base du marionnettiste
- Faites tourner les procurations de manière réfléchie
- Mettre en place des mécanismes solides de gestion des erreurs
- Vérifiez les conditions d'utilisation du site cible avant de commencer
- Maintenez les taux de demande modérés pour éviter de déclencher les défenses
- Documentez vos flux de travail d'automatisation
Puppeteer nécessite une configuration minutieuse et des ajustements réguliers pour rester efficace face aux défenses Cloudflare en constante évolution. À mesure que les mesures de sécurité se perfectionnent, le succès dépendra de la mise à jour régulière de votre stratégie et du strict respect des pratiques éthiques. Si les configurations initiales peuvent être efficaces, le maintien de performances à long terme implique de rester flexible et de suivre des directives claires.
articles similaires
- Comment fonctionne la détection de navigateur sans tête et comment la contourner
- Configuration du proxy dans Puppeteer : techniques d'authentification, de rotation et de contournement
- Gestion de l'empreinte digitale du navigateur dans Puppeteer pour éviter la détection
- Surmonter le CAPTCHA dans les scripts Puppeteer : de reCAPTCHA aux services de reconnaissance



