У меня проблема со сканером Puppeteer: на сайте, который я проверяю, есть страницы результатов, и мы можем перейти к следующей странице, щелкнув стрелку на нижней странице (нет легкой ссылки, прикрепленной кссылка, поэтому нам нужно смоделировать нажатие на кнопку). На каждой странице мне нужно собрать все детали товаров (карты недвижимости / 30 карт за страницей).
Вопрос в том, как перейти на все последующие страницы и удалить все карты на каждой странице?
Что я сделал: в начале URL я заполняю форму для отправки и получаю первые 30 результатов на свой запрос. Затем я зацикливаю селектор, соответствующий стрелке внизу страницы, и нажимаю на него, пока селектора не будет. Навигация работает, но скребок не получает все ссылки для карточек на каждой странице. Таким образом, отбрасывается только 30 первых карточек, а затем остановка скребка.
async function pageFunction(context) {
switch (context.request.userData.label) {
case 'START': return handleStart(context);
case 'DETAIL': return handleDetail(context);
}
async function handleStart({ log, page, customData }) {
// fill in form and submit to get the results page
await page.click(home.submitSearch);
// waiting for some selectors on first results page
await page.waitForSelector(searchResults.card);
await page.waitForSelector(searchResults.blockNavigation);
// navigate with pagination
while (await page.$(searchResults.nextPage) !== null) {
await page.waitForSelector(searchResults.card);
await page.waitForSelector(searchResults.blockNavigation);
await page.click(searchResults.nextPage)
}
}
async function handleDetail({ request, log, skipLinks, page }) {
const description = await page.$eval(descriptionSelector, (el => el.textContent));
return { description };
}
}
Метка «СТАРТ» соответствует стартовой ссылке с формой.
Метка «ДЕТАЛИ» соответствуетссылки, относящиеся к одной карточке на странице результатов.
Есть идеи, как справиться с этим делом?