[英]Return from async/await function inside async/await function (Puppeteer)
[英]How to check if element exists inside async / await with Puppeteer
在检查元素是否存在后,我无法在页面上记录元素。 我所指的代码块位于“// phone”注释下。
此代码循环遍历页面上的每个部分(部分的部分)并记录“公司”和“电话”。 “电话”可能不会出现在某些部分,所以我想我会通过 if 语句来检查它是否存在。 这会产生一个错误 = "Error: failed to find element matching selector ".mn-contact-phone"" 我该如何解决这个问题?
(async () => {
try {
const browser = await puppeteer.launch({ headless: true });
const page = await browser.newPage();
// loop through pages
for (let pg = 1; pg < 5; pg++) {
await page.goto("webpage");
// record number of sections
const sections = await page.$$("#mn-members-listings > div");
// loop through each section
for (const section of sections) {
// company
let company = await section.$eval(
"div.mn-searchlisting-title",
comp => comp.innerText
);
// phone --> THIS IF/ELSE THROWS AN ERROR
if (section.$(".mn-contact-phone").length > 0) {
let phone = await section.$eval(".mn-contact-phone", phn => phn.innerText);
} else {
let phone = "";
}
console.log(`Company = ${company} | Phone = ${phone}`);
}
}
await browser.close();
} catch (error) {
console.log(`Our error is = ${error}`);
}
})();
来自puppeteer 文档:
该方法在页面内运行
document.querySelector
。 如果没有元素与选择器匹配,则返回值解析为null
。
1) null
没有长度。
2) ElementHandle.$
返回一个承诺。
将条件更改为:
if (await section.$(".mn-contact-phone"))
或者如果有多个元素:
if (await section.$$(".mn-contact-phone").length > 0)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.