【发布时间】:2020-04-24 10:35:15
【问题描述】:
我正在尝试从具有 puppeteer 的动态内容(电子邮件和公司名称)的许多站点(来自数组的链接)获取信息。我使用“for”循环来迭代带有链接的数组,对每个站点执行page.goto...,等到站点加载完毕,等待几秒钟以获取动态内容,然后开始执行请求。但我已经完成了第一个和最后一个请求(承诺解决)。其他承诺不会返回给我动态内容。我应该怎么做才能解决这个问题?谢谢
let puppeteer = require('puppeteer');
(async() => {
const browser = await puppeteer.launch();
let page = await browser.newPage();
const url = 'https://abcdsite.com/';
let arrayNames = ['first','second','third','abcd'];
for(let i=0;i<await arrayNames.length;){
let nameUrl = await arrayNames[i];
if (i<4){
let temp1;
console.log(`begin for ${nameUrl}`);
await page.goto(`${url}${nameUrl}`, { waitUntil: 'load' })
.then(()=>{
return new Promise(res=>{
//wait content dynamic load
setTimeout(()=>{
temp1 = page.evaluate(() => {
return new Promise(resolve => { // <-- return the data to node.js from browser
let name = document.querySelector('h1').innerHTML;
let email = document.getElementsByClassName('sidebar-views-contacts h-card vcard')[0]
.children[2].children[0].children[0].innerHTML;
resolve(email);
});
});
res(temp1);
},7000);
})
})
.then((res)=>{
i++;
console.log(`https://abcdsite.com/${nameUrl}`,temp1);
});
}
else{
break
}
}
})();
【问题讨论】:
-
你想并行还是串行??
-
@Saeeed 首先我尝试了并行方式,但我得到了所有结果,例如pending-promises((