Неожиданно const изменяется на null до eval $ - PullRequest
0 голосов
/ 28 декабря 2018

shelfCategoryLinks - это массив ссылок на определенные категории, несмотря на использование await page.waitForSelector('.itemCount'); itemCounter, иногда возвращающее значение null, которое нарушает работу приложения

 for (let shelf of shelfCategoryLinks) {
                logger.info('Processing shelf: ' + shelf.shelfName);

                //Wait some time before next operation
                await page.waitFor(400);

                //wait for submenu to appear
                await page.waitForSelector('#shelf-holder li.noChild');                    
                //Click into that submenu
                await page.click(`li[id='${shelf.shelfId}']`);
                //After click paroducts should load with also item counter which look like "Loaded 1-19 of 25 item"    
                //Wait for Item counter to appear
                await page.waitForSelector('.itemCount');
                //there we taking that item counter from DOM
                const itemCounter = await page.$('.itemCount');                    

                // Taking out total amount of items in shelf and parse to number from string
                const totalItem = await itemCounter.$eval(
                    'strong:last-child',
                    strong => parseInt(strong.innerHTML, 10)
                );
                console.log(totalItem);
            }

этот код перемещается по меню категорий и должен возвращатьсякакое-то число из HTML, но неожиданно после нескольких витков цикла const itemCounter вместо этого возвращают, что HTML-элемент возвращает ноль, потому что page.$eval вызывает сбой приложения.Почему возвращается NULL?

1 Ответ

0 голосов
/ 29 декабря 2018

я добавляю await page.reload(); после каждого щелчка, это решает проблему. Я думаю, проблема заключалась в том, что DOM не переставлял должным образом (я имею в виду, что некоторые узлы просто переключались на новые). Это привело к тому, что waitForSelector didint пришлось ждать, поэтому Pupeeteerнажимали на старую ссылку или пытались щелкнуть до того, как что-то надёжное стало

...