Я пишу парсер страниц для динамической веб-страницы. Страница имеет первоначальную загрузку, а затем загружает оставшуюся часть контента после короткого времени загрузки.
Я учел нагрузку и успешно очистил HTML-код со страницы, но страница не загружает ВЕСЬ контент сразу. Вместо этого он загружает указанное количество контента через URL-адрес запроса GET, а затем имеет кнопку «Получить больше» на странице. Моя цель — нажимать эту кнопку «Получить больше», пока весь контент не будет загружен на страницу. Для тех, кто интересуется, я не хочу загружать весь контент сразу через URL-адрес GET из-за воздействия на их сервер.
Я застрял в цикле или итерации, которая позволила бы мне несколько раз щелкнуть страницу.
const NIGHTMARE = require("nightmare");
const BETHESDA = NIGHTMARE({ show: true });
BETHESDA
// Open the bethesda web page. Web page will contain 20 mods to start.
.goto("https://bethesda.net/en/mods/skyrim?number_results=40&order=desc&page=1&platform=XB1&product=skyrim&sort=published&text=")
// Bethesda website serves all requested mods at once. Each mod has the class "tile". Wait for any tile class to appear, then proceed.
.wait(".tile");
let additionalModsPresent = true;
while(additionalModsPresent) {
setTimeout(function() {
BETHESDA
.wait('div[data-is="main-mods-pager"] > button')
.click('div[data-is="main-mods-pager"] > button')
}, 10000)
additionalModsPresent = false;
}
// let moreModsBtn = document.querySelector('div[data-is="main-mods-pager"] > button');
// .end()
BETHESDA.catch(function (error) {
console.error('Search failed:', error);
});
До сих пор я думал об использовании цикла while, который пытается нажать кнопку через некоторый интервал времени. Если возникает ошибка, скорее всего, кнопка не существует. Проблема, с которой я столкнулся, заключается в том, что я не могу заставить щелчок работать внутри setTimeout или setInterval. Я считаю, что есть какая-то проблема с областью видимости, но я не знаю, что именно происходит.
Если я смогу заставить метод щелчка работать в setInterval или чем-то подобном, проблема будет решена.
Мысли?