Как вызвать функцию после того, как она уже определена в Puppeteer - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть функция, которая берет текстовые данные с этого сайта и сохраняет их в файле JSON. Эта функция сканирует только первую страницу этого веб-сайта, но я хотел бы щелкнуть по или перейти к каждой ссылке (всего 10 страниц) и получить текстовые данные с каждой страницы:

    await page.goto('http://quotes.toscrape.com/page/1/')

    //grab quote data
    const quotes = await page.evaluate(() => {
        const grabFromDiv = (div, selector) => Array.from(div 
        .querySelectorAll(selector), (el => el.innerText.trim()))

В настоящее время , он просто переходит на страницу 1, захватывает данные, сохраняет их и затем завершает работу. Есть ли способ вызывать функцию кавычек снова и снова, пока я не переберу все 10 страниц и не соберу все данные?

1 Ответ

0 голосов
/ 29 апреля 2020

Я бы просто сделал то же самое для каждой страницы.

Если вы знаете количество страниц, просто сделайте:

var quotes = '' 
for each page
    await page.goto(page)
    quotes+ = await page.evaluate(myPageFunction)

Если вы не знаете количество страниц вам нужно получить эту информацию с фактической страницы.

затем в функции оценки просто найдите следующую страницу:

myPageFunction = function(){
    // get your data
    const nextPage = document.querySelector('.next a')?.href
    return {data: yourData, nextPage: nextPage}
}

Тогда вы получите что-то вроде:

nextPage = 'http://quotes.toscrape.com/page/1/'
while (nextPage= {
    await page.goto(nextPage)
    const result = await page.evaluate(myPageFunction)
    quotes += result.data
    nextPage = resut.nextPage
}

Код является лишь примером и не будет работать как есть.

Best!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...