已在Puppeteer中定义函数后如何调用该函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了已在Puppeteer中定义函数后如何调用该函数相关的知识,希望对你有一定的参考价值。

我具有一个从this site抓取文本数据并将其存储在JSON文件中的功能。此功能仅爬网该网站的首页,但我想单击或“转到”每个URL(有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页并收集了所有数据?

答案

我只是对每个页面都做同样的事情。

如果您知道页数,则只需执行:

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
}

该代码仅是示例,不能按原样工作。

最佳!

以上是关于已在Puppeteer中定义函数后如何调用该函数的主要内容,如果未能解决你的问题,请参考以下文章

如何将变量传递给评估函数?

Java中自定义方法,如果无返回值,该如何调用呢?

如何在 js puppeteer 中访问 map 函数之外的变量

如何在 Puppeteer 中设置最大视口?

python def定义完函数后怎么退出,以及如何调用函数

后端让前端执行某个函数怎么操作