Как получить новый контент страницы в SPA с помощью Puppeteer? - PullRequest
2 голосов
/ 12 июля 2020

Страница, которую я пытаюсь очистить, загружается с исходным телом содержимого, за которым следует кнопка «Загрузить еще» внизу страницы. Когда нажимается кнопка «Загрузить еще», кнопка удаляется со страницы, страница загружает дополнительный контент дальше вниз по странице (с сохранением содержимого из начальной загрузки), а новая кнопка «Загрузить еще» помещается внизу страница. 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') никогда не возвращается.

1 Ответ

1 голос
/ 12 июля 2020

Можно попробовать что-то вроде этого

do {
  // Get the button, click, wait for the data, get the data.
} while (await page.$(buttonSelector) !== null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...