如何在 Puppeteer 中下载文件之前更改文件名?

Posted

技术标签:

【中文标题】如何在 Puppeteer 中下载文件之前更改文件名?【英文标题】:How to change the name of a file before it downloads in Puppeteer? 【发布时间】:2022-01-06 06:54:37 【问题描述】:

我需要从一个网站下载几个 .csv 文件并用不同的名称保存它们。但是,它们都以相同的名称下载。因此,他们不断覆盖最后一个文件,最后只剩下一个文件。这是我的代码:

for(let i = 0; i <= 10; i++)
await page._client.send("Page.setDownloadBehavior", 
            behavior: "allow",
            downloadPath: `./csvFiles/`,
        );
await page.click("button_selector");

Puppeteer 点击下载按钮后开始下载,由于所有这些代码都在循环中,我无法重命名文件,因为它们仅在循环结束后创建,此时我只下载了一个文件.

【问题讨论】:

请问这是哪一页?如果无法运行代码来查看问题并尝试解决问题,就很难回答。谢谢。顺便说一句,您可能只需要在创建页面时设置一次Page.setDownloadBehavior,而不是为循环中的每次点击设置一次。 【参考方案1】:

如果可以获取CSV文件的URL,可以插入(或修改)&lt;a&gt;标签的download属性。

否则,您可能会拦截服务器的 HTTP 响应并修改 Content-Disposition 响应标头以设置文件名,以便浏览器接收具有显式文件名的更改后的 HTTP 响应。

【讨论】:

那行得通。谢谢你

以上是关于如何在 Puppeteer 中下载文件之前更改文件名?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 selenium 在点击事件中下载文件?

如何在 wkwebview 中下载文件

如何使用 webview 组件在 App 中下载文件?

如何使用 Retrofit 库在 Android 中下载文件?

如何在CMD命令中下载文件

如何通过在android中使用agora sdk在onFileMessageReceived中的给定路径中下载文件