所以我想用 Playwright 做一些非常简单的事情,我只需要从我用 csv 制作的数组访问网站
var csvsync = require('csvsync');
var fs = require('fs');
var csv = fs.readFileSync('sites.csv');
var data = csvsync.parse(csv);
const { chromium } = require('playwright');
(async () => {
const promises = [];
const browser = await chromium.launch({
headless: false
});
const context = await browser.newContext();
// Open new page
const page = await context.newPage();
for(let i = 0; i <= data.length; i++) {
// Go to https://www.google.com.br/?gws_rd=ssl
await page.goto(`${data[i]}`);
await Promise.all(promises);
}
await Promise.all(promises);
// ---------------------
await context.close();
await browser.close();
})();
那么,这有什么问题吗?
对 aysnc for 循环的更彻底的答案在这里:JavaScript for 循环中的异步进程
但简而言之:
//Helper function
async function asyncForEach (array, callback) {
for (let index = 0; index < array.length; index++) {
await callback(array[index], index, array);
}
};
//usage
await asyncForEach( data, async d => {
await page.goto(d);
});
简单但稍微冗长的解决方案,因为 for 循环看起来在 javascript 剧作家测试中没有太多支持......
let numberArray = [].constructor(10);
let currentIndex = 0;
for (let _ of numberArray) {
// Do programming logic here - use currentIndex as index
currentIndex++;
}