
Collection de correctifs pour puppeteer et playwright afin d'éviter la détection d'automatisation et les fuites. Aide à éviter les pages CAPTCHA de Cloudflare et DataDome. Facile à patcher/dépatcher, peut être activé/désactivé à la demande.
Ce dépôt contient des correctifs pour améliorer les bibliothèques d'automatisation web populaires. Plus précisément, il cible les packages puppeteer et playwright.
Certains aspects des bibliothèques d'automatisation ou du comportement du navigateur ne peuvent pas être ajustés via les paramètres ou les options de ligne de commande. C'est pourquoi nous corrigeons ces problèmes en patchant le code source de la bibliothèque. Bien que cette approche soit fragile et puisse se casser au fil du temps lorsque le code source des bibliothèques évolue, l'objectif est de maintenir ce dépôt avec l'aide de la communauté pour garder les correctifs à jour.
Par défaut, Puppeteer et Playwright présentent des fuites importantes et faciles à détecter. Peu importe la qualité de vos proxys, de vos empreintes numériques et de vos scripts de comportement : si vous n'avez pas appliqué les correctifs, vous n'êtes qu'un énorme drapeau rouge pour tout site web majeur.
🕵️ Vous pouvez facilement tester votre configuration d'automatisation face aux principales détections modernes avec rebrowser-bot-detector (sources et détails)
| Avant les correctifs 👎 | Après les correctifs 👍 |
|---|---|
![]() | ![]() |
Si vous ne voulez pas vous embêter avec les correctifs et toutes les erreurs possibles, il existe une solution de remplacement direct pour vous. Ces packages appliquent simplement rebrowser-patches par-dessus le code d'origine, rien de plus.
Puppeteer : rebrowser-puppeteer (src) et rebrowser-puppeteer-core (src)
Playwright (Node.js) : rebrowser-playwright (src) et rebrowser-playwright-core (src)
Playwright (Python) : rebrowser-playwright (src)
Le moyen le plus simple de commencer est de modifier votre package.json pour utiliser les nouveaux packages tout en conservant l'ancien nom comme alias. Ainsi, vous n'avez pas besoin de modifier le code source de votre automatisation. Voici comment procéder :
package.json et remplacez "puppeteer": "^23.3.1" et "puppeteer-core": "^23.3.1" par "puppeteer": "npm:rebrowser-puppeteer@^23.3.1" et "puppeteer-core": "npm:rebrowser-puppeteer-core@^23.3.1". Remarque : 23.3.1 n'est qu'un exemple, vérifiez la dernière version sur npm.npm install (ou yarn install)Une autre façon est d'utiliser directement les nouveaux packages à la place de ceux d'origine. Voici les étapes à suivre :
package.json et remplacez les packages puppeteer et puppeteer-core par rebrowser-puppeteer et rebrowser-puppeteer-core. Ne changez pas les versions des packages, remplacez uniquement les noms.npm install (ou yarn install)puppeteer et puppeteer-core par rebrowser-puppeteer et rebrowser-puppeteer-core🚀 Et voilà ! Il ne vous reste plus qu'à visiter la page rebrowser-bot-detector et à tester votre navigateur patché.
Notre objectif est de maintenir et de prendre en charge ces packages de remplacement direct avec les dernières versions, mais nous nous concentrons principalement sur les versions récentes, donc si vous utilisez encore puppeteer 13.3.7 du début des années 90, il est peut-être temps de passer à une version supérieure. Il y a de fortes chances que cela ne casse rien, car l'API est assez stable dans le temps.
Runtime.EnableLes bibliothèques d'automatisation populaires s'appuient sur la commande CDP Runtime.Enable, qui permet de recevoir des événements du domaine Runtime.. C'est crucial pour gérer les contextes d'exécution utilisés afin d'évaluer du JavaScript sur les pages, une fonctionnalité clé pour tout processus d'automatisation.
Cependant, il existe une technique qui détecte l'utilisation de cette commande, révélant que le navigateur est contrôlé par un logiciel d'automatisation comme Puppeteer ou Playwright. Cette technique est utilisée par tous les principaux logiciels anti-bot tels que Cloudflare, DataDome, et d'autres.
Nous avons préparé un article complet sur notre enquête concernant cette fuite, que vous pouvez lire sur notre blog.
Pour plus de détails sur cette technique, lisez l'article de blog de DataDome : How New Headless Chrome & the CDP Signal Are Impacting Bot Detection.
En bref, il s'agit de quelques lignes de JavaScript sur la page qui sont automatiquement appelées si Runtime.Enable a été utilisé.
Notre correctif désactive la commande automatique Runtime.Enable sur chaque frame. À la place, nous créons manuellement des contextes avec des ID inconnus lorsqu'un frame est créé. Ensuite, lorsque du code doit être exécuté, il existe plusieurs façons d'obtenir l'ID du contexte.
🟢 Avantages : L'approche ultime qui conserve l'accès au monde principal et fonctionne avec les web workers et les iframes. Vous n'avez pas besoin de modifier votre code existant.
🔴 Inconvénients : Aucun découvert jusqu'à présent.
Page.createIsolatedWorld et enregistrer son ID.🟢 Avantages : Tout votre code sera exécuté dans un monde isolé séparé, empêchant les scripts de la page de détecter vos modifications via MutationObserver et d'autres techniques.
🔴 Inconvénients : Vous ne pourrez pas accéder aux variables et au code du contexte principal. Bien que cela soit nécessaire pour certains cas d'usage, le contexte isolé fonctionne généralement bien dans la plupart des scénarios. De plus, les web workers ne permettent pas de créer de nouveaux mondes, vous ne pouvez donc pas exécuter votre code dans un worker. C'est un cas d'usage de niche, mais cela peut avoir son importance dans certaines situations. Il existe une solution de contournement pour ce problème, veuillez lire How to Access Main Context Objects from Isolated Context in Puppeteer & Playwright.