因此,我尝试使用puppeteer遍历某些URL,从HTML内容中获取数据,并打印出CSV。
我被卡在打印数据的那部分。现在,我只是在测试并尝试为每个数据创建一个console.log()。
我遇到的主要问题是循环运行非常迅速,打开了大量的浏览器窗口,并且使日志全部乱序。
这是我的代码:
const puppeteer = require('puppeteer');
let scrape = async (i) => {
const browser = await puppeteer.launch({
headless: false
});
const page = await browser.newPage();
await page.goto(`https://webPageURL.org/list/objects/${i}/`);
await page.waitFor(1000);
const result = await page.evaluate(() => {
let data = document.querySelector('.someClass')
if (data !== null) {
data = data.innerText;
}
return {
data
}
});
await browser.close();
return result;
};
for (var i = 0; i < 10; i++{
scrape(i).then((value) => {
console.log(i, ': ', value);
});
}
我想要的是让循环暂停直到打印出一些东西,但是当我运行此特定代码时会发生的情况是,同时打开并加载了十个浏览器窗口,并且它们以解决的随机顺序都打印到控制台。另外,理想情况下,我希望刮板暂停加载下一页,直到当前循环迭代完成为止。这是因为我将需要大约5000个页面来执行此过程,理想情况下,我不想打开5000个浏览器。
答案 0 :(得分:7)
像您这样的声音只需要在每次迭代中nls_Date_Format
,以确保await
循环在当前for
的调用完成之前不会继续。幸运的是,scrape
是一个scrape
函数,因此它已经返回了async
。清除代码中的所有语法错误(括号和括号不匹配,如果代码经过简化并以其原始形式工作,则与此无关),然后:
Promise