如何处理puppeteer-cluster [CONCURRENCY_BROWSER]中的多个标签?

时间:2019-07-26 14:54:24

标签: javascript node.js puppeteer puppeteer-cluster

我正在尝试在以下条件下抓取3个网址

  1. 每个URL需要在单独的浏览器中运行。

  2. URL可能包含2个或更多点击链接

  3. 在相应浏览器的新选项卡中(平行)打开链接,然后切换到该页面并抓取内容。

换句话说,我试图在浏览器中打开一个URL,获取页面中的链接,根据在同一浏览器中获取的链接数打开新标签,切换标签,在其中单击按钮并获得确认消息。

我还需要并行运行3个网址。

我尝试使用CONCURRENCY_BROWSER选项来并行运行url,但无法在新标签页中打开链接。关于如何操作puppeteer-cluster中的选项卡的任何建议

2 个答案:

答案 0 :(得分:0)

您需要更详细地说明问题并提供一些代码...逐步进行操作并询问何时解决问题

下面是在同一浏览器实例上打开多个标签的示例

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

}

答案 1 :(得分:0)

此处为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://...');
// ...