For 循环运行 puppeteer 函数无序

问题描述 投票:0回答:1

我有一个包含 puppeteer 函数的循环。 问题是循环同时执行所有操作。

我试过这个:

import puppeteer from "puppeteer"

(async function(){
    for(let i = 0; i < 3; i++){
        await launchPup().then(() => {
        });
    }
})()

async function launchPup() {
    puppeteer.launch({headless: false}).then(async browser => {
        await browser.newPage()
        await browser.close()
    })
}

你能告诉我我做错了什么以及如何解决这个问题吗?

javascript loops async-await promise puppeteer
1个回答
0
投票

这是一个异步函数,你必须留意创建的浏览器。

这样的事情应该有帮助:

var totalOpenedbrowser = 0;
var minBrowser = 2;
const wait = () => new Promise((resolve) => setTimeout(resolve, 200))

(async function() {
  for (let i = 0; i < 3; i++) {

    await launchPup().then(() => {});
  }
})()



async function launchPup() {
  while (totalOpenedbrowser > = minBrowser)
    await wait(); // wait until there is a free slott
  totalOpenedbrowser++;
  puppeteer.launch({
    headless: false
  }).then(async browser => {
    await browser.newPage()
    await browser.close()
    totalOpenedbrowser--;
  })
}

看看我构建的库,它将解决您的问题: https://www.npmjs.com/package/puppeteer-express

© www.soinside.com 2019 - 2024. All rights reserved.