遍历参数值 - 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
主要问题是怎么出现在木偶师身上的。
dataGood
的 for-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
中执行此操作,我建议重构您当前的代码以处理被调用函数的异步性质。
我正在使用 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
主要问题是怎么出现在木偶师身上的。
dataGood
的 for-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
中执行此操作,我建议重构您当前的代码以处理被调用函数的异步性质。