Достаточно ли скрытен Кластер Кукловода, чтобы пройти тесты ботов? - PullRequest
2 голосов
/ 10 января 2020

Я хотел бы знать, может ли кто-либо, использующий Puppeteer-Cluster, рассказать, как Cluster.Launch ({settings}) защищает от совместного использования файлов cookie и веб-данных между страницами в другом контексте.

Имеет ли браузер контексты здесь , фактически блокирует файлы cookie, а пользовательские данные не передаются и не отслеживаются? Похоже, что теперь небезызвестная печально известная страница думает, что нет, здесь и что .launch ({}) должен вызываться для задачи, а не впереди очереди.

Так что мой вопрос: как мы знаем, разделяет ли кукловод-кластер файлы cookie / данные между задачами в очереди? И какие варианты есть в библиотеке, чтобы снизить шансы на то, чтобы их назвали ботом?

Установка: я использую page.authenticate с прокси-сервисом, случайным пользовательским агентом и по-прежнему время от времени блокируюсь (403) по сайту, на котором я выполняю тест.

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();

}

1 Ответ

4 голосов
/ 16 января 2020

Прямой ответ

Автор puppeteer-cluster здесь. Библиотека не блокирует куки активно, но использует browser.createIncognitoBrowserContext():

Создает новый контекст браузера в режиме инкогнито. При этом файлы cookie / кэш не будут использоваться совместно с другими контекстами браузера.

Кроме того, в документе указано, что «контексты браузера Incognito не записывают данные о просмотре на диск» ( source ), поэтому перезапуск браузера не может повторно использовать файлы cookie с диска, поскольку не было записано никаких данных.

В отношении библиотеки это означает, что при выполнении задания создается новый контекст инкогнито создал, который не делится никакими данными (куки, и т. д. c.) с другими контекстами. Таким образом, до тех пор, пока Chromium правильно реализует контексты браузера в режиме инкогнито, между заданиями нет общего обмена данными.

На странице, на которую вы ссылаетесь, говорится только о browser.newPage() (который использует файлы cookie между страницами), а не контексты инкогнито.

Почему веб-сайты могут идентифицировать вас как бота

Некоторые веб-сайты по-прежнему блокируют вас, потому что они используют различные меры для обнаружения ботов. Существуют тесты обнаружения безголового браузера , а также библиотеки снятия отпечатков пальцев, которые могут сообщать о вас как о боте, если пользовательский агент не совпадает с отпечатком браузера. Возможно, вас заинтересует этот ответ , который дает мне более подробное объяснение того, как работают эти отпечатки пальцев.

Вы можете попробовать использовать такую ​​библиотеку, как puppeteer-extra, которая поставляется с плагином stealth, который поможет вам решить проблему. Тем не менее, это в основном игра в кошки-мышки. Тесты снятия отпечатков пальцев могут быть изменены, или другие сайты могут использовать другой механизм «обнаружения». В общем, нет никакого способа гарантировать, что веб-сайт не обнаружит вас.

Если вы хотите использовать puppeteer-extra, имейте в виду, что вы можете использовать его вместе с puppeteer-cluster ( пример кода ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...