Хобрук: Ваш путь к мастерству в программировании

Как работать с несколькими вкладками в кластере кукловодов [CONCURRENCY_BROWSER]?

Я пытаюсь выполнить парсинг для 3 URL-адресов с указанными ниже условиями

  1. Каждый URL-адрес должен запускаться в отдельном браузере.

  2. URL-адрес может состоять из 2 или более ссылок, по которым нужно щелкнуть

  3. Откройте ссылки на новой вкладке соответствующих браузеров (параллельно), переключитесь на нее и очистите содержимое.

Другими словами, я пытаюсь открыть URL-адрес в браузере, получить ссылки на странице, открыть новые вкладки в зависимости от количества ссылок, полученных в том же браузере, переключить вкладки, нажать на них кнопку и получить сообщение с подтверждением.

Также мне нужно запустить 3 URL-адреса параллельно.

Я пробовал опцию CONCURRENCY_BROWSER для параллельного запуска URL-адресов, но я не могу открыть ссылку на новой вкладке. Любые предложения, как я могу управлять вкладками в кукольном кластере

мне нужно:

async function test(){
    const cluster = await Cluster.launch({
        puppeteerOptions: {
            headless: false,
            defaultViewport: null, 
        },
      
        concurrency: Cluster.CONCURRENCY_BROWSER,
        maxConcurrency: 5,
        skipDuplicateUrls : true,
        timeout : 240000,
    });

    // initiate the cluster task for a set of urls from the cluster queue;
    
    await page.goto(url);
    
    // on visiting the page i retrieve 2 or more links and store it in a array
    
    let linksArray = [...subUrl];
    
    //load suburl in a new tab respectively of the same browser

    await cluster.newPage()

    //screenshot suburl
    
    await page.screenshot(suburl)
        
}

TypeError: cluster.newPage не является функцией

в кукловоде я открывал новую вкладку с помощью команды await browser.newPage ()


Ответы:


1

вам нужно более конкретно рассказать о своей проблеме и предоставить несколько кодов ... продолжайте шаг за шагом и спросите, когда вы дойдете до проблемы

вот пример открытия нескольких вкладок в одном экземпляре браузера

async function init(){

    var  browser = await puppeteer.launch({headless: false        ,  args: [ '--no-sandbox', '--disable-setuid-sandbox' , ]});
    open_tab('http://example1.com' , browser);
    open_tab('http://example2.com' , browser);
    open_tab('http://example3.com' , browser);

}


async function open_tab( url , browser ){


    let  page  = await browser.newPage();
    await page.setViewport({width: 1200, height: 1000});
    await page.goto( url );

}
28.07.2019
  • Я обновил вопрос с помощью фрагмента кода, пожалуйста, проверьте его 30.07.2019

  • 2

    Автор puppeteer-cluster здесь. Нелегко повторно использовать один и тот же браузер. Но вы можете определить одну задачу с несколькими page.goto вызовами внутри следующим образом:

    const cluster = await Cluster.launch(/* ... */);
    
    // define the task and reuse the window 
    await cluster.task(async ({ page, data: url }) => {
        await page.goto(url);
        const secondUrl = /* ... */; // extract another URL somehow
        await page.goto(secondUrl);
        await page.screenshot(/* ... */);
    });
    
    // queue your initial links
    cluster.queue('http://...');
    cluster.queue('http://...');
    // ...
    
    31.07.2019
    Новые материалы

    Почему я, журналист, в отчаянии создал сетевое приложение B2B
    Почему я, журналист, в отчаянии создал сетевое приложение B2B Итак, вот верхняя линия. Я построил OnGreentech, сеть для индустрии возобновляемых источников энергии. Если вам интересно,..

    Ограниченные машины Больцмана (RBM)
    Практическое руководство по обучению RBM.pdf Задний план RBM использовались в качестве генеративных моделей для многих различных типов данных, включая помеченные и немеченые. В их условной..

    Обнаружение маски или без маски с YOLO😷
    Это руководство по созданию пользовательской модели обнаружения объектов для обнаружения людей, носящих или не носящих маски в общественных местах, созданной с использованием YOLO v3. Модель..

    Управление приборами в чистом PHP
    Этот пост дополняет эти: E2e тестирование Работа с несколькими средами . Мы разработали это решение для базы данных MariaDB, оно может отличаться, если вы используете другую базу..

    Неделя 1 — Кентерберийские рельсы.
    Неделя 1 — Кентерберийские рельсы. So. Мы все еще живы, все еще усердно работаем и еще не пассивно-агрессивно рассылаем друг другу сообщения «за мое последнее сообщение в Slack…», поэтому, на..

    Цена завтрашнего дня  — Джефф Бут
    Технологический прогресс в наши дни происходит с молниеносной скоростью, и мы не в состоянии это понять. Джефф в основном говорит о влиянии технологий на экономику по всему миру. Он твердо верит..

    Данные: суперсила современного бизнеса
    В цифровой среде данные превратились из простого побочного продукта бизнес-операций в центральный актив, стимулирующий рост и инновации. Крейг Манди, бывший главный директор по стратегии..