木偶中止文件下载到磁盘-如何实现它?



大家好。我有一个非常简单的代码可以下载一个文件到硬盘上。它完美地工作着。转到该站点,单击文件链接到的链接,然后baruser将该文件保存到默认路径。但有时我需要取消文件上传后,它已经开始了。我该怎么做呢?

const puppeteer = require('puppeteer-extra')
async function main() {
let browser = await puppeteer.launch({
headless: false,
args: [
'--window-size=1200,1400',
'--window-position=000,000',
'--no-sandbox',
'--disable-dev-shm-usage',
'--disable-web-security',
'--disable-features=IsolateOrigins',
'--disable-site-isolation-trials'
]
})
let page = await browser.newPage();
await page.goto('http://example.com/');
await page.waitForSelector('#download');
await page.hover('#download');
await page.click('#download'); // After clicking on the link, the file download begins
}
main().catch((e) => {
throw e
})
<a href="/files.zip" id="download">download files</a>

  • nodejs v12.22.9
  • Chromium Version 101.0.4950.0 (Developer Build)(64位)
  • 操纵木偶的人^ 13.7.0
  • puppeteer-extra ^ 3.2.3

无需点击链接,您可以获取文件路径并使用stream获取文件。

const https = require('https');
let stream
function abortStream() {
if (stream) {
stream.abort();
}
}
// ... your code

const filePath = await page.$eval('#download', file => file.href);
const url = 'https://somesite.com'
https.get(`${url}${filePath}`, res => {
stream = fs.createWriteStream('file.zip');
res.pipe(stream);
stream.on('error', ()=>{
stream = undefined;
})
stream.on('finish', () => {
stream.close();
stream = undefined;
})
})

呼叫abortStream()终止文件下载