【发布时间】:2020-01-23 12:22:34
【问题描述】:
我正在尝试在使用 puppeteer 时获取下载文件的名称,并且我进行了以下设置,但我想知道如何最好地将 removeListener 用于 page.on('response', ...,因为我希望能够设置并在每次下载文件时取消设置此事件:
async (page) => {
const form = await page.$('#selector');
const [filename] = await Promise.all([
getFileNamePromise(page),
form.evaluate(form => form.submit())
])
return filename;
};
function getFileNamePromise(page) {
return new Promise (resolve => {
page.on('response', response => {
const disposition = response.headers()['content-disposition'];
if (disposition && disposition.indexOf('attachment') !== -1) {
var filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
var matches = filenameRegex.exec(disposition);
if (matches != null && matches[1]) {
resolve(matches[1].replace(/['"]/g, '')) ;
}
}
})
});
}
我也很好奇这是否会受到在加载事件侦听器之前下载文件的竞争条件的影响?
【问题讨论】:
-
你是指删除
page.on('response'...的监听器吗? -
@LonnieBest 是的 - 我更新了问题。
标签: javascript promise dom-events puppeteer