Как проверить, существует ли элемент внутри asyn c / await с Puppeteer - PullRequest
0 голосов
/ 19 января 2020

У меня проблемы с записью элемента на странице после проверки, существует ли он. Блок кода, на который я ссылаюсь, находится под комментарием "// phone" .

Этот код просматривает каждый раздел (раздел разделов) на странице и записывает "company" и "телефон". «Телефон» может отсутствовать в некоторых разделах, поэтому я решил передать его через оператор if, чтобы проверить, существует ли он. Это создает ошибку = "Ошибка: не удалось найти селектор соответствия элементов" .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}`);
    }
})();

1 Ответ

0 голосов
/ 20 января 2020

С Документы кукловода :

Метод запускает document.querySelector на странице. Если ни один элемент не соответствует селектору, возвращаемое значение разрешается в null.

1) null не имеет длины.

2) ElementHandle.$ возвращает обещание ,

изменить условие на:

if (await section.$(".mn-contact-phone"))

или, если имеется несколько элементов:

if (await section.$$(".mn-contact-phone").length > 0)
...