кукловод гусеничный - нумерация страниц нажатием кнопки «Далее» - PullRequest
0 голосов
/ 08 ноября 2019

У меня проблема со сканером 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 };
    }
}

Метка «СТАРТ» соответствует стартовой ссылке с формой.

Метка «ДЕТАЛИ» соответствуетссылки, относящиеся к одной карточке на странице результатов.

Есть идеи, как справиться с этим делом?

1 Ответ

1 голос
/ 11 ноября 2019

Это типичная проблема с очисткой веб-страниц. Он выглядит как веб-сайт, использующий некоторые запросы XHR для получения дополнительных данных после нажатия следующей кнопки.

Трудно получить совет, не зная структуру и знания о том, как работает сайт. Но вы можете использовать эти два подхода:

1) Используйте запрос веб-сайта XHR для получения данных. Вы можете использовать консоль браузера, чтобы проверять запросы XHR и копировать их в своем сканере.

2) Подходы, которые вы пытались использовать. Просто подождите и нажмите на следующую кнопку в цикле. И получить все данные после того, как больше нет следующей кнопки. Я не видел никаких проблем в вашем текущем коде, но это зависит от псевдо-URL-адресов и переключателей, которые вы использовали в скребке кукловода. Если вы установите их правильно, это должно сработать.

Во всяком случае, есть отличный учебник о том, как вы можете сделать нумерацию страниц в скребке кукловода . Вы можете проверить это.

...