首页 > 解决方案 > 没有来自窗口的“targetcreated”。在 _blank 中打开文件下载

问题描述

我对 puppeteer 越来越疯狂了。我在 MacOS 上运行最后一个版本(8),最后一个 Chromium 版本(90.0.4410.0)......我目前正在尝试处理由 javascript 启动的下载,并在新标签中打开一个window.open指令...

我设法找到了被调用的函数:

function(a){if(this.ExportUrlBase==null)return false;window.open(this.ExportUrlBase+encodeURIComponent(a),"_blank");return true}

为了处理下载,我使用“经典”方式:

await (page as any)._client.send('Page.setDownloadBehavior', {
    behavior: 'allow',
    downloadPath: tempFolderPath,
});

当我使用该headless:false选项时,我看到一个新选项卡正在打开并且文件正在按预期下载,当我禁用 时setDownloadBehavior,我可以在 devtools 中看到请求的 URL(带有响应标头和我可以使用的所有信息)。 ..

但是无论是否无头,我都没有targetcreated为新选项卡触发任何事件,因此我无法处理下载开始以便能够监视它...我尝试在browser实例中以及在context用于创建页面的实例,它们都保持沉默。我还尝试popup在活动页面中监听事件,也没有触发任何事件......

问题是,使用setDownloadBehavior,文件被下载,并且在预期的文件夹中,所以我无法确定下载是在同一页面还是不同页面中进行的。通过侦听活动页面中的responseorrequest事件,我没有收到对下载文档的 URL 的请求...

为了监控其他用例中的下载(当在同一页面中请求下载时),我使用response页面上的事件并测试标题或文件名......它就像一个魅力。

有人对此有解决方案吗?我差点把头撞在墙上……

感谢大家!:-)

标签: javascriptnode.jspuppeteer

解决方案


推荐阅读