使用Puppeteer下载文件时Chrome下载错误

时间:2020-07-16 14:18:48

标签: javascript node.js puppeteer google-chrome-headless

我有一个显示页面的应用程序,用户单击一个按钮,然后下载CSV文件。我想和Puppeteer一起运行。

问题是CSV下载为空且有错误。 headless是和否都会发生这种情况。该页面已完成加载,并且我增加了超时时间,但仍然失败。可能是什么问题?

enter image description here

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();

    }
}

2 个答案:

答案 0 :(得分:2)

这就是这项工作的原因:

test_loss, test_acc = model.evaluate(stacked_padded_nparrayof_encoded_sentence_test_tensors,stacked_nparray_sentiment_test_tensors)
print('Test Loss: {}'.format(test_loss))
print('Test Accuracy: {}'.format(test_acc))

答案 1 :(得分:0)

我遇到了同样的问题,下载失败,在下载目录中我得到了 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 文件并下载错误。