繁体   English   中英

如何使用 Puppeteer 检查 async/await 中是否存在元素

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM