因此,我正在抓取某些东西,我需要打开浏览器来获取特定信息(其余信息不需要打开浏览器)。因此,现在我需要等待浏览器打开,提供信息并关闭,然后再执行其他操作。
我正在使用Promise并等待它,但是我当前的实现方式不是在等待浏览器,而是在进行下一次迭代。代码看起来像
//loops over every product
for (let j = 0; j < holder.length; j++) {
await this.getDetails(this.productLink);
}
getDetails(url) {
return new Promise(resolve => {
request(url, async (error, response, html) => {
if (!error && response.statusCode == 200) {
const $ = cheerio.load(html);
//gets some details
//wait for browser
await this.getSize(url).then(response => {
console.log(response)
})
resolve("done")
}
});
});
}
getSize(url) {
return new Promise(async resolve => {
const browser = await puppeteer.launch({
headless: false,
args: ['--no-sandbox']
});
const page = await browser.newPage();
await page.setViewport({
width: 1200,
height: 1080
});
await page.goto(url, {
"waitUntil": "networkidle0"
})
let cl = await page.$(".input-box select");
await cl.click();
cl = await page.$(".input-box select");
let html = await page.evaluate(e => e.innerHTML, cl)
await browser.close();
resolve(html);
})
}
await this.getSize不等待getSize方法完成。我究竟做错了什么?或者在这里可以做什么?