puppeteer 文件下载

Photo by Aswin on Unsplash

很多场景下,我们需要通过 Puppeteer 来点击事件来触发下载。

但是 Puppeteer 暂时没有提供此场景下的完整 API 。

因此即使用某些方法来 ISSUE#299 达到触发执行的目的,也会觉得很别扭。

如文件完成需要额外监听。

我的方法

对于这样的场景,我个人还是习惯与使用 node http 模块来进行下载。

首先利用 css selector/xpath 得到 HTMLElement 对象,

然后用 page.$eval 方法得到对象的下载 url,

最后通过 http.get 与 fs.createWriteStream 配合写入磁盘。

const http = require('http');
const fs = require('fs');
....
const downloadSelector = 'a.ke-insertfile';
const url = await page.$eval(downloadSelector, el => el.href);
const file = fs.createWriteStream("file.jpg");
const request = http.get(url, function(response) {
  response.pipe(file);
});

参考链接

How to download a file with Node.js (without using third-party libraries)?

发表评论

电子邮件地址不会被公开。 必填项已用*标注