遍历参数值 - NodeJS (Puppeteer)

Loop through parameter values - NodeJS (Puppeteer)

我正在使用 for-Each 循环将从 MongoDb 获得的值传递给我在 NodeJS Puppeteer 中的参数。

这是 for-Each 循环


dataGood = [{title: "username1", password: "password2"},{title: "username1", password: "password2"}]


 await dataGood.forEach(async element => {
        let title = element.title;
        let pass = element.password;
        let tags = element.tags;
        let actions = element.actions;
        
        await ig.initialize();

        await ig.login(title, pass);
  
        await ig.liketagsprocess(tags, actions);

如果 dataGood.

中只有一个数据,则此代码可以正常工作

但如果有 2 个或更多值,则它不起作用。

这是数据传递的地方

initialize: async() => {
        instagram.browser = await puppeteer.launch({
            headless: false,
        });

        instagram.page = await instagram.browser.newPage();
    },

    login: async(username , password) => {

        console.log(username, password)


        await instagram.page.goto(BASE_URL, {waitUntil: 'load', timeout: 0});

        await instagram.page.waitForSelector('input[name="username"]');

        await instagram.page.type('input[name="username"]', username, {delay: 100});

        await instagram.page.type('input[name="password"]', password, {delay: 100});


Console Log : // Suppose usernames are username 1 and Username 2

username1 password1
username2 password2

主要问题是怎么出现在木偶师身上的。

dataGoodfor-each 循环打开 2 puppeteer windows

两个独立的铬 windows 打开。并且发生了这种错误。

请参考这些图片。

这些不是同一个 chromium window 的标签,而是完全不同的 windows

如何遍历参数,以便它们在各自的 puppeteer 中单独工作 windows。

如果你想在同一个 chromium 实例中打开所有迭代器,那么你应该调用

await ig.initialize();

循环外。

除此之外 Array.forEach 的执行方式可能与您预期的不同,迭代异步函数很棘手。查看更多关于它的背景 here

使用常规 for 循环或 for...of 您的迭代器将按严格顺序执行,没有任何副作用:

await ig.initialize();
for (const element of dataGood) {
  let title = element.title
  let pass = element.password
  await ig.login(title, pass)
}

如果您仍想在 forEach 中执行此操作,我建议重构您当前的代码以处理被调用函数的异步性质。