3 votes

Puppeteer-Cluster est-il assez furtif pour passer les tests de robots ?

Je voulais savoir si quelqu'un qui utilise Puppeteer-Cluster pouvait m'expliquer comment la fonction Cluster.Launch({settings}) protège contre le partage des cookies et des données web entre des pages dans un contexte différent.

Faites les contextes de navigation ici En fait, les cookies sont bloqués et les données des utilisateurs ne sont pas partagées ou suivies ? La page désormais tristement célèbre de Browserless semble penser que non, ici et que .launch({}) doit être appelé sur la tâche, et non avant la file d'attente.

Ma question est donc la suivante : comment savoir si puppeteer-cluster partage les cookies / données entre les tâches en file d'attente ? Et quelles sont les options disponibles dans la bibliothèque pour réduire les risques d'être étiqueté comme un bot ?

C'est réglé : J'utilise page.authenticate avec un service proxy, un agent utilisateur aléatoire, et je suis toujours bloqué (403) de temps en temps par le site sur lequel j'effectue le test.

async function run() {
// Create a cluster with 2 workers
  const cluster = await Cluster.launch({
    concurrency: Cluster.CONCURRENCY_BROWSER, //Cluster.CONCURRENCY_PAGE,
    maxConcurrency: 2, //5, //25, //the number of chromes open
    monitor: false, //true,
    puppeteerOptions: {
      executablePath,
      args: [
        "--proxy-server=pro.proxy.net:2222",
        "--incognito",
        "--disable-gpu",
        "--disable-dev-shm-usage",
        "--disable-setuid-sandbox",
        "--no-first-run",
        "--no-sandbox",
        "--no-zygote"
      ],
      headless: false,
      sameDomainDelay: 1000,
      retryDelay: 3000,
      workerCreationDelay: 3000
    }
  });

   // Define a task 
      await cluster.task(async ({ page, data: url }) => {
         extract(url, page); //call the extract
      });

   //task
      const extract = async ({ page, data: dataJson }) => {
         page.setExtraHTTPHeaders({headers})

         await page.authenticate({
           username: proxy_user, 
           password: proxy_pass
         });

       //Randomized Delay
         await delay(2000 + (Math.floor(Math.random() * 998) + 1));

         const response = await page.goto(dataJson.Url);
 }

//loop over inputs, and queue them into cluster
  var dataJson = {
      url: url
      };

  cluster.queue(dataJson, extract);

 }

 // Shutdown after everything is done
 await cluster.idle();
 await cluster.close();

}

9voto

Thomas Dondorf Points 5563

Réponse directe

Auteur de puppeteer-cluster ici. La bibliothèque ne bloque pas activement les cookies, mais fait usage de browser.createIncognitoBrowserContext() :

Crée un nouveau contexte de navigateur incognito. Il ne partagera pas les cookies/cache avec les autres contextes de navigation.

De plus, les documents indiquent que "les contextes de navigation incognito n'écrivent pas de données de navigation sur le disque" ( fuente ), de sorte que le redémarrage du navigateur ne peut pas réutiliser les cookies du disque car il n'y a pas eu de données écrites.

En ce qui concerne la bibliothèque, cela signifie que lorsqu'un travail est exécuté, un nouveau contexte incognito est créé, qui ne partage aucune donnée (cookies, etc.) avec les autres contextes. Donc, tant que Chromium implémente correctement les contextes de navigateur incognito, il n'y a pas de données partagées entre les travaux.

La page que vous avez liée ne parle que de browser.newPage() (qui partage les cookies entre les pages) et non sur les contextes incognito.

Pourquoi les sites Web peuvent-ils vous identifier comme un robot ?

Certains sites web vous bloqueront quand même, car ils utilisent des mesures différentes pour détecter les bots. Il existe tests de détection des navigateurs sans tête ainsi que les bibliothèques d'empreintes digitales qui peuvent vous signaler comme un bot si l'agent utilisateur ne correspond pas à l'empreinte digitale du navigateur. Vous pourriez être intéressé par cette réponse par moi qui fournit des explications plus détaillées sur la façon dont ces empreintes digitales fonctionnent.

Vous pouvez essayer d'utiliser une bibliothèque comme puppeteer-extra qui s'accompagne d'un stealth plugin pour vous aider à résoudre le problème. Cependant, il s'agit essentiellement d'un jeu du chat et de la souris. Les tests d'empreintes digitales peuvent être modifiés

I puppeteer-extra , puppeteer-cluster ( e ).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X