javascript - puppeteer 如何返回 page.on 响应值

标签 javascript puppeteer

我知道这应该很简单。但是如何返回值以供函数外部使用,我无法让它工作。这可以下载文件并在控制台中返回

值:附件;文件名=“文件名”

await page._client.send('Page.setDownloadBehavior', {behavior: 'allow', downloadPath: './tmp'})
await page.click('download');

await page.on('response', resp => {
    var header = resp.headers();
    console.log("value: " + header['content-disposition']); 
});

但是这个和我尝试过的一切都没有返回任何内容

await page.on('response', resp => {
     var header = resp.headers();
     return header['content-disposition'];  
 });

我希望能够返回下载文件的文件名、文件大小等,以便在脚本中进一步使用。

如何返回并访问响应值?

最佳答案

您不应在 page.on() 之前使用 await 运算符。

puppeteer 师 page类扩展了 Node.js 的原生 EventEmitter ,这意味着每当您调用 page.on() 时,您都在使用 Node.js 的 emitter.on() 设置事件监听器.

这意味着您在 page.on('response') 中包含的功能将在 response 事件触发时执行。

您不会从事件处理程序返回值。相反,事件处理程序中的功能会在事件发生时执行。

如果你想在函数中使用page.on()的结果,可以使用以下方法:

const example_function = value => {
  console.log(value);
};

page.on('response', resp => {
  var header = resp.headers();
  example_function(header['content-disposition']);
});

关于javascript - puppeteer 如何返回 page.on 响应值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51461890/

相关文章:

javascript - 调试 puppeteer

javascript - 单击下拉菜单

scope - 在 Promise 中丢失范围

javascript - 使用 2 种情况查找某些变量的正确方法

javascript - 项目 JS 文件

javascript - 如何获取元素的文本但不包括该元素的子元素?

javascript - JavaScript 编码在任何特定的服务器语言上工作得更好吗?

javascript - 强制一个函数等待另一个函数完成

javascript - 如何使用Puppeteer获取指定元素

javascript - 对来自特定启动器/源的 iframe 的加载和执行时间进行基准测试