Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 木偶演员通过多页并行抓取_Node.js_Puppeteer - Fatal编程技术网

Node.js 木偶演员通过多页并行抓取

Node.js 木偶演员通过多页并行抓取,node.js,puppeteer,Node.js,Puppeteer,我想同时抓取多个URL,所以我使用p-queue来实现Promise-queue 例如,请参见下面的代码,使用一个浏览器和多个页面来完成此工作 const queue=新PQUE({ 并发:5 }); ( 异步()=>{ 让实例=等待pptr.launch({ 无头:错, }); //任务处理器功能 const createInstance=async(url)=>{ let page=wait instance.newPage(); 等待页面。转到(电子邮件); //(问题)这里有更多的操作

我想同时抓取多个URL,所以我使用
p-queue
来实现
Promise
-queue

例如,请参见下面的代码,使用一个浏览器和多个页面来完成此工作

const queue=新PQUE({
并发:5
});
(
异步()=>{
让实例=等待pptr.launch({
无头:错,
});
//任务处理器功能
const createInstance=async(url)=>{
let page=wait instance.newPage();
等待页面。转到(电子邮件);
//(问题)这里有更多的操作
...
返回等待页面。关闭();
}
//将任务添加到队列
for(让url的url){
添加(异步()=>createInstance(url))
} 
}
)()
问题是,确实可以通过多个页面同时打开多个URL,但看起来只有浏览器关注的一个(并且只有一个)页面将继续执行操作(请参见上面的代码
更多操作转到此处
部分),其他页面(或选项卡)只要停止工作,除非我点击那个页面去关注它


那么,有什么办法可以同时运行所有页面吗?

我找到了上述代码不起作用的原因,我不应该在worker函数之外等待实例,而应该在内部等待,见下文

(
    async () => {
        let instance = pptr.launch({  // don't await here
            headless: false,
        });

        // task processor function
        const createInstance = async (url) => {
            let real_instance = await instance;  // await here
            let page = await real_instance.newPage();
            await page.goto(email);

            // (PROBLEM) more operations go here
            ...

            return await page.close();
        }

        // add tasks to queue
        for (let url of urls) {
            queue.add(async () => createInstance(url))
        } 
    }
)()

也许这些问题中的一些提示会有所帮助:,。@vsemozhetbyt谢谢