Страница, которую я пытаюсь очистить, загружается с исходным телом содержимого, за которым следует кнопка «Загрузить еще» внизу страницы. Когда нажимается кнопка «Загрузить еще», кнопка удаляется со страницы, страница загружает дополнительный контент дальше вниз по странице (с сохранением содержимого из начальной загрузки), а новая кнопка «Загрузить еще» помещается внизу страница. URL-адрес страницы НЕ изменяется при нажатии кнопки «Загрузить еще». Т.е. он ведет себя как одностраничное приложение (SPA).
Используя Puppeteer, я могу перейти на страницу:
let page = await browser.newPage();
await page.goto('https://www.someURL.com/home', {
waitUntil: 'domcontentloaded',
});
Затем я использую page.$$eval()
, чтобы найти "Загрузить еще "и щелкните по ней. Страница загружает дополнительный контент вместе с новой кнопкой «Загрузить еще» внизу. Однако я не могу найти способ с помощью Puppeteer 'refre sh' моей page
переменной, чтобы я мог вызвать page.eval$$()
второй раз, чтобы найти новую кнопку «Загрузить еще». Вызов page.reload()
возвращает страницу обратно в состояние, в котором она была, когда я позвонил page.goto()
.
Я просмотрел документы Puppeteer, просмотрел десятки примеров и не могу найти способ сделать это . Учитывая распространенность SPA, я должен упустить из виду кое-что очевидное.
Возможно ли это?
РЕДАКТИРОВАТЬ: Дополнительный код с использованием предложения @vsemozhetbyt:
let theButton = await page.$('button.sc-fzoiQi');
do {
await page.evaluate(theButton => {
theButton.click();
}, theButton);
} while ((await buttonExists(page)) !== null);
};
async function buttonExists(page) {
return await page.$('button.sc-fzoiQi');
}
Используя вышеизложенное, кнопка нажимается в первый раз, однако выражение while
никогда не вычисляется. Т.е. выражение внутри него - return await page.$('button.sc-fzoiQi')
никогда не возвращается.