Passer au contenu

Contourner la protection contre les robots PerimeterX : guide de l'expert

En tant que professionnel expérimenté du proxy et du web scraping ayant travaillé sur des centaines de projets de scraping au cours des 5 dernières années, j'ai acquis une vaste expérience dans le domaine des solutions sophistiquées d'atténuation des robots telles que PerimeterX.

Dans ce guide complet de plus de 3000 XNUMX mots, je partagerai mes méthodes et outils éprouvés pour contourner PerimeterX et supprimer avec succès les sites cibles.

Qu’est-ce que PerimeterX exactement ?

Avant d’aborder les techniques de contournement, il est important de comprendre ce qu’est PerimeterX et comment il fonctionne.

PérimètreX est l'un des principaux services d'atténuation des robots et de pare-feu d'applications Web (WAF) sur le marché aujourd'hui. Plus de 10 % des principales propriétés Web d'Internet utilisent PerimeterX pour se protéger contre le web scraping, les attaques de piratage de compte, la fraude aux paiements et d'autres types d'abus d'automatisation.

La société propose un moteur avancé de détection de robots alimenté par des technologies telles que :

  • Empreinte digitale de l'appareil – collecte plus de 300 paramètres d'appareil pour créer des profils de visiteurs uniques
  • Analyse comportementale – modélise des modèles de comportement humain comme les mouvements de la souris pour détecter les robots
  • Base de données de réputation IP – suit et bloque les adresses IP des centres de données et des proxys résidentiels
  • Vérifications d'interaction avec les pages – analyse les éléments DOM, les erreurs JavaScript et le rendu pour détecter les navigateurs sans tête
  • CAPTCHA – utilise des défis visuels et invisibles avancés pour amener les robots à prouver l'humanité

PerimeterX affirme que sa solution peut détecter l'automatisation avec une précision de plus de 99 %, ce qui est assez élevé. Leur objectif est de maximiser les taux de détection tout en minimisant les faux positifs pour les utilisateurs légitimes.

Cela représente un défi de taille pour les web scrapers. Mais après avoir traité de la protection PerimeterX sur de nombreux projets antérieurs, j'ai identifié des méthodes éprouvées pour que vos scrapers ne soient pas détectés.

Dans ce guide, je partagerai mes techniques d'initiés pour imiter les utilisateurs humains et comprendre comment PerimeterX fonctionne sous le capot.

Techniques d’atténuation des robots PerimeterX

La première étape consiste à comprendre les différents mécanismes de détection sur lesquels PerimeterX s'appuie pour identifier les robots :

Empreinte digitale de l'appareil

PerimeterX utilise des empreintes digitales avancées sur les appareils en collectant plus de 300 paramètres tels que :

  • ID matériel – type de processeur, rendu GPU, résolution d’écran
  • Configuration du logiciel – système d'exploitation, type et version du navigateur, versions des pilotes, langue
  • Polices, plugins et extensions installés
  • Empreinte digitale Canvas et WebGL

Ils compilent ces attributs dans une signature d'appareil unique pour chaque visiteur. La signature d'un scraper Node.js se démarquera clairement d'un vrai navigateur de bureau ou mobile.

Analyse comportementale

En plus des empreintes techniques, PerimeterX analyse le comportement des visiteurs, notamment :

  • Modèles de mouvements de la souris – les vrais humains présentent des micro-mouvements et un défilement naturels
  • Suivi des clics – les humains ne cliquent pas parfaitement sur les éléments comme le font les robots
  • Cadence de frappe – analyse la vitesse de frappe pour déterminer si un utilisateur réel saisit des données
  • Modèles de balayage – sur les appareils mobiles, vérifie les comportements de balayage naturels

Les robots n'imitent pas ces modèles de comportement humain, ce qui les rend plus faciles à détecter.

Base de données de réputation IP

PerimeterX gère une énorme base de données de réputation IP balisant les adresses IP des centres de données, des proxys résidentiels, des fournisseurs de cloud et d'autres infrastructures généralement associées au scraping.

Si vous supprimez une adresse IP statique, il est probable que PerimeterX l'ait déjà signalée comme à haut risque.

Vérifications des interactions avec les pages

PerimeterX effectue également diverses vérifications d'interaction sur chaque page pour tenter de détecter les navigateurs sans tête et les environnements non JavaScript. Par exemple:

  • Vérifier que les CSS/images sont chargées
  • Test des éléments DOM attendus
  • Suivi des mouvements du curseur de la souris
  • Recherche d'erreurs JavaScript

Les navigateurs sans tête n'exécutent pas JavaScript ni ne restituent les CSS/images de la même manière que les vrais navigateurs.

Défis CAPTCHA

Lorsque PerimeterX soupçonne un visiteur de robot, il déclenche des défis interactifs pour obliger l'utilisateur à prouver qu'il est humain. Par exemple:

  • Cliquer sur un bouton ou un objet spécifique sur la page
  • CAPTCHA visuels nécessitant une reconnaissance d'image ou de texte
  • CAPTCHA invisibles qui effectuent des vérifications comportementales en arrière-plan

Ces défis sont faciles pour les vrais utilisateurs mais impossibles pour les robots traditionnels.

Maintenant que nous comprenons comment fonctionnent les empreintes digitales PerimeterX et l'atténuation des robots, explorons les moyens éprouvés pour échapper à la détection.

Éviter les empreintes digitales des appareils

Pour éviter d'être détecté par le profilage étendu des appareils de PerimeterX, nous devons nous assurer que notre scraper imite parfaitement un vrai navigateur :

Utilisez un vrai navigateur via Selenium ou Puppeteer

Le moyen le plus fiable consiste à contrôler un navigateur réel à l’aide de frameworks comme Selenium ou Puppeteer au lieu de faire des requêtes directement.

Sélénium lance un vrai navigateur comme Chrome ou Firefox. Nous pouvons écrire des scripts pour automatiser les actions de navigation tandis que Selenium hérite de l'empreinte native du navigateur sous-jacent.

Marionnettiste est une bibliothèque Node qui fournit une API de haut niveau pour contrôler un navigateur Chrome sans tête. Bien qu'il soit techniquement possible d'empreintes digitales car sans tête, la combinaison de Puppeteer avec des chaînes d'agent utilisateur aléatoires et d'autres astuces le rend très furtif.

Les deux approches permettent à notre scraper de prendre l'empreinte digitale d'un véritable navigateur de bureau, évitant ainsi le profilage des appareils.

Masquage des environnements de navigateur avec des outils

Une alternative à l'exécution de vrais navigateurs consiste à utiliser des outils tels que Browsergap qui émulent les environnements de navigateur.

Par exemple, pour imiter un iPhone :

const browsergap = new Browsergap({
  browser: ‘iphone‘
});

await browsergap.init();

Browsergap usurpera tous les détails de bas niveau tels que l'agent utilisateur, le canevas WebGL, la géolocalisation, etc. pour correspondre à un vrai navigateur iPhone.

Cette approche nécessite moins de surcharge que Selenium ou Puppeteer tout en masquant l'environnement de scraping.

Rotation fréquente des agents utilisateurs

Même lors de l'exécution d'un vrai navigateur, nous pouvons ajouter une couche de protection supplémentaire en faisant fréquemment pivoter la chaîne de l'agent utilisateur :

const userAgents = [‘UA1‘, ‘UA2‘, ‘UA3‘]; 

// Randomly select a user agent
const userAgent = userAgents[Math.floor(Math.random() * userAgents.length)];

await page.setUserAgent(userAgent);

Cela fera apparaître votre scraper comme étant des utilisateurs différents à chaque fois, empêchant ainsi le profilage de l'environnement du navigateur.

Modèles de comportement semblables à ceux des humains

En plus des empreintes techniques, nous devons également modéliser les modèles de comportement humain :

Mouvements de souris réalistes

Utilisez Puppeteer ou Selenium pour simuler les mouvements naturels de la souris :

// Set mouse speed
await page.setMouse({ moveTime: 100 });

// Human-like random movements  
await page.mouse.move(xOffset, yOffset);
await page.mouse.down();
await page.mouse.move(xOffset2, yOffset2);
await page.mouse.up();

Cela produira des traces de souris d’apparence naturelle au lieu de mouvements robotiques répétitifs.

Faites défiler, survolez et cliquez sur les éléments

Utilisez de vraies actions de navigateur pour interagir avec les éléments de la page :

// Scroll like a user
await page.evaluate(_ => {
  window.scrollBy(0, 300); 
});

// Hover over elements
await page.hover(‘button‘);

// Variable click timing
await sleep((Math.random() * 200) + 50); // random delay
await page.click(‘button‘);

Cela modélise mieux le comportement de navigation humaine.

Modèles de frappe réalistes

Lors de la saisie des données, utilisez des délais aléatoires pour imiter la cadence de frappe humaine :

function typeText(page, text) {

  let i = 0;

  const typeInterval = setInterval(() => {

    if(i < text.length) { 

      // Random human-like delay
      const delay = (Math.random() * 100) + 30;
      await page.waitForTimeout(delay);

      await page.keyboard.type(text[i++]);

    } else {
      clearInterval(typeInterval); 
    }

  }, 30);

}

Cette astuce est particulièrement utile pour éviter la détection lors de la connexion à des sites lors du scraping.

Défilement et navigation

Utilisez des délais aléatoires entre les actions telles que faire défiler vers le bas, cliquer sur des liens, naviguer dans les pages, etc. pour mieux imiter les modèles de navigation humaine.

Séquence d'interaction réaliste

Planifiez une séquence d'événements de type humain que le scraper devra exécuter - par exemple :

  1. Faites défiler lentement la page
  2. Survolez quelques éléments
  3. Faire défiler vers le haut
  4. Cliquez sur un lien vers la page suivante
  5. Répéter

Avoir ce flux d'actions réaliste à travers les clics sur les liens, les survols, les défilements et la saisie donnera à notre grattoir une apparence extrêmement semblable à celle d'un utilisateur.

Éviter les blocages IP

Pour empêcher PerimeterX de reconnaître mes scrapers en fonction d'adresses IP suspectes, je suis ces bonnes pratiques :

Utilisez de grands réseaux proxy résidentiels

J'utilise des fournisseurs comme Luminati et Smartproxy qui proposent des dizaines de millions d'adresses IP résidentielles. Cela évite d’abuser des mêmes adresses IP.

Quelques facteurs clés que je prends en compte lors de la sélection des proxys résidentiels :

  • Taille du pool de proxy – plus il y a d’IP, mieux c’est pour permettre une rotation constante sans répétition. Je préfère les réseaux avec plus de 10 millions d’IP.

  • Diversité géographique – les proxys couvrant différentes régions géographiques semblent plus humains.

  • Diversité de l'ASN – il est préférable de répartir les adresses IP sur de nombreux réseaux de FAI plutôt que de les regrouper sur quelques-uns.

  • Vérification de la réputation – Le fournisseur de proxy doit mettre sur liste noire les mauvaises adresses IP déjà marquées par PerimeterX.

  • Fréquence de rotation – les IP résidentielles doivent être modifiées aussi souvent que possible, même à chaque demande.

En nous approvisionnant auprès de pools vastes et diversifiés d’adresses IP résidentielles, nous cachons efficacement nos scrapers à grande échelle.

Évitez les adresses IP des centres de données

Je n'utilise jamais de proxys de centre de données ou d'adresses IP d'hébergement cloud pour le scraping, car celles-ci sont facilement reconnues par PerimeterX comme infrastructure d'automatisation. Il est crucial de s’en tenir uniquement aux proxys résidentiels.

Méfiez-vous des hébergeurs

De nombreux fournisseurs de VPS et d'hébergement Web ont vu leurs plages IP profilées par PerimeterX. J'évite de les utiliser comme origines de scraping, même avec des proxys.

Modèles de rotation des proxys

Lors de la rotation des proxys, il est important de ne pas effectuer une rotation selon un schéma reconnaissable. J'utilise des algorithmes de randomisation pour sélectionner les adresses IP proxy de manière réaliste et non déterministe.

Défis du navigateur

Le Captcha et d'autres défis interactifs utilisés par PerimeterX présentent un obstacle pour les scrapers. Voici des moyens éprouvés pour les surmonter :

Externaliser la résolution de CAPTCHA

Des services comme Anti-Captcha et 2Captcha permettent de résoudre instantanément des milliers de CAPTCHA en tirant parti de solveurs humains. J'utilise leurs API pour relayer et résoudre des défis :

// Detect CAPTCHA
if(page.url().includes(‘captcha‘)) {

  // Pass to 2Captcha API
  const solution = await solver.solveRecaptcha(page.url());

  // Enter CAPTCHA solution
  await page.type(‘#captcha‘, solution);

  // Continue scraping
  // ...

}

Cela permet une résolution automatisée sans que le scraper lui-même ait à reconnaître des images ou du texte.

Défis du navigateur sans tête

Pour les défis interactifs avancés comme cliquer sur un bouton spécifique, j'utilise Puppeteer pour terminer l'action par programme :

// Identify challenge button
const button = await page.$(‘#challengeButton‘);

// Click the button
await button.click();

Étant donné que Puppeteer contrôle un véritable navigateur, il peut effectuer des tâches interactives au lieu d'un scraping purement paramétrique avec des outils comme Axios.

Comportements réalistes

J'implémente également des mouvements naturels de la souris, un défilement et des délais lors de la réalisation des défis pour ressembler davantage à un humain :

// Move mouse towards button
await page.mouse.move(x, y); 

// Scroll to button  
await page.evaluate(_ => {
  window.scrollBy(0, 100);
});

// Brief delay
await page.waitFor(500);

// Click button
await page.click(‘#challengeButton‘);

Cela contribue à renforcer l’illusion de l’interaction humaine.

Quand tout le reste échoue…

Dans les rares cas où les défis sont tout simplement trop avancés, j'ai recours à des services de scraping commerciaux qui gèrent les CAPTCHA et autres mesures d'atténuation des robots en coulisses. Cela permet de se concentrer sur l’extraction de données sans se soucier de l’évasion de PerimeterX.

Réflexions finales

Grâce à une vaste expérience dans le contournement des protections PerimeterX pour les clients, j'ai développé des techniques éprouvées utilisant des proxys, des navigateurs, des modèles de comportement et d'autres outils pour que les scrapers ne soient pas détectés.

La clé est d'imiter le plus fidèlement possible les utilisateurs réels dans toutes les dimensions des analyses PerimeterX : empreintes digitales des appareils, modèles de comportement, caractéristiques de l'environnement et interactions avec les défis.

En combinant les méthodes décrites dans ce guide de plus de 3000 XNUMX mots, vous pouvez prendre le dessus sur PerimeterX et extraire des données de milliers de sites Web en vous appuyant sur leur atténuation des robots – un expert proxy et vétéran du web scraping comme moi le fait avec succès chaque jour.

J'espère que vous avez trouvé ces conseils utiles – bon scraping !

Prendre part à la conversation

Votre adresse email n'apparaitra pas. Les champs obligatoires sont marqués *