【问题标题】:Puppeteer - assign data to outside variable await page.on('response')Puppeteer - 将数据分配给外部变量 await page.on('response')
【发布时间】:2021-08-17 17:39:11
【问题描述】:
let data;
await page.on('response', async (response) => {

    if (response.url().includes("https://www.ubereats.com/api/getFeedV1")) {
        const j = await response.json();
        console.log(j);
    }
});

console.log(data);

这是一个带有 puppeteer 库的网络爬虫的代码段。 在这个await 中,我可以记录j 变量。但我需要将它分配给data 变量。我该怎么做?

【问题讨论】:

  • 你能说data = await response.json()吗?
  • page.on 是同步的,所以await 没有任何意义。它注册一个回调。如果您想等到回调触发,您必须承诺回调或使用waitForResponse。另一种选择是将您的 data 相关代码直接放入回调链中。
  • 谢谢大家。 @ggorlen 我已经按照你的方式取得了成功。谢谢。
  • 太棒了——随时分享self answer 以帮助其他有同样问题的人。

标签: node.js puppeteer


【解决方案1】:

正如@ggorlen所说,我使用了以下方法。

const responseData = (page, url) => {
               return new Promise(resolve => {
                   page.on("response", async (response) => {
                       if (response.url().includes(url)) {
                           const json = await response.json();
                           // console.log(json);
                           resolve(json);
                       }
                   });
               });
           }
   
let data = await responseData(page, "https://www.example.com/api/getFeedV1");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    • 2018-03-13
    • 1970-01-01
    • 2021-08-21
    • 2022-11-27
    • 2016-05-11
    相关资源
    最近更新 更多