Chrome 使用 Puppeteer 下载文件时出现下载错误
Chrome download error when downloading file with Puppeteer
我有一个显示页面的应用程序,用户单击一个按钮,然后下载一个 CSV 文件。我想 运行 使用 Puppeteer。
问题是下载的 CSV 为空且有错误。 headless
true 和 false 都会发生这种情况。页面加载完成,我增加了超时时间,但仍然失败。可能是什么问题?
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
headless: false
});
const page = await browser.newPage();
await page.goto('http://localhost:4400/login', { waitUntil: 'networkidle2' });
await page._client.send('Page.setDownloadBehavior', {
behavior: 'allow',
downloadPath: './',
});
await page.waitForSelector('#run-and-export');
await page.click('#run-and-export');
// file-downloaded is turned on when the file finished downloading (not to close the window)
await page.waitForSelector('#file-downloaded', { timeout: 120000 });
await browser.close();
})();
应用程序中生成要下载的文件的代码是一个 Angular 服务:
@Injectable({
providedIn: 'root'
})
export class DownloadService {
downloadFile(content:any, fileName: string, mimeType: string){
var blob = new Blob([(content)], {type: mimeType});
var a = document.createElement('a');
a.href = window.URL.createObjectURL(blob);
a.download = fileName;
a.click();
}
}
这就是使这项工作成功的原因:
const downloadPath = path.resolve('/my/path');
await page._client.send('Page.setDownloadBehavior', {
behavior: 'allow',
downloadPath: downloadPath
});
我遇到了同样的问题,下载失败,在下载目录中我得到了 filename.pdf.crdownload
而没有其他文件。
下载目录比应用程序目录高两级../../download_dir
解决方案是(如 ps0604 所建议):
const path = require('path');
const download_path = path.resolve('../../download_dir/');
await page._client.send('Page.setDownloadBehavior', {
behavior: 'allow',
userDataDir: './',
downloadPath: download_path,
});
如果有人正在搜索 .crdownload
文件并下载错误。
我有一个显示页面的应用程序,用户单击一个按钮,然后下载一个 CSV 文件。我想 运行 使用 Puppeteer。
问题是下载的 CSV 为空且有错误。 headless
true 和 false 都会发生这种情况。页面加载完成,我增加了超时时间,但仍然失败。可能是什么问题?
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
headless: false
});
const page = await browser.newPage();
await page.goto('http://localhost:4400/login', { waitUntil: 'networkidle2' });
await page._client.send('Page.setDownloadBehavior', {
behavior: 'allow',
downloadPath: './',
});
await page.waitForSelector('#run-and-export');
await page.click('#run-and-export');
// file-downloaded is turned on when the file finished downloading (not to close the window)
await page.waitForSelector('#file-downloaded', { timeout: 120000 });
await browser.close();
})();
应用程序中生成要下载的文件的代码是一个 Angular 服务:
@Injectable({
providedIn: 'root'
})
export class DownloadService {
downloadFile(content:any, fileName: string, mimeType: string){
var blob = new Blob([(content)], {type: mimeType});
var a = document.createElement('a');
a.href = window.URL.createObjectURL(blob);
a.download = fileName;
a.click();
}
}
这就是使这项工作成功的原因:
const downloadPath = path.resolve('/my/path');
await page._client.send('Page.setDownloadBehavior', {
behavior: 'allow',
downloadPath: downloadPath
});
我遇到了同样的问题,下载失败,在下载目录中我得到了 filename.pdf.crdownload
而没有其他文件。
下载目录比应用程序目录高两级../../download_dir
解决方案是(如 ps0604 所建议):
const path = require('path');
const download_path = path.resolve('../../download_dir/');
await page._client.send('Page.setDownloadBehavior', {
behavior: 'allow',
userDataDir: './',
downloadPath: download_path,
});
如果有人正在搜索 .crdownload
文件并下载错误。