当前位置: 首页 > 面试题库 >

如何使用headless使用puppeteer下载文件:true?

融烨华
2023-03-14
问题内容

我一直在运行以下代码,以便csv从网站下载文件http://niftyindices.com/resources/holiday-calendar

const puppeteer = require('puppeteer');

(async () => {
const browser = await puppeteer.launch({headless: true});
const page = await browser.newPage();

await page.goto('http://niftyindices.com/resources/holiday-calendar');
await page._client.send('Page.setDownloadBehavior', {behavior: 'allow', 
downloadPath: '/tmp'})
await page.click('#exportholidaycalender');
await page.waitFor(5000);
await browser.close();
})();

有了headless: false它,它将文件下载到中/Users/user/Downloads。与headless: true它不起作用。

我正在使用puppeteer版本在macOS Sierra(MacBook
Pro)上运行此程序,该版本1.1.1将Chromium版本拉66.0.3347.0.local-chromium/目录并使用npm initnpm i --save puppeteer进行设置。

知道怎么了吗?

预先感谢您的时间和帮助,


问题答案:

此页面通过创建逗号分隔的字符串并通过设置数据类型来强制浏览器下载csv,从而下载csv

let uri = "data:text/csv;charset=utf-8," + encodeURIComponent(content);
window.open(uri, "Some CSV");

chrome上的此按钮会打开一个新标签。

您可以点击此事件,然后将内容实际下载到文件中。不知道这是否是最好的方法,但是效果很好。

const browser = await puppeteer.launch({
  headless: true
});
browser.on('targetcreated', async (target) => {
    let s = target.url();
    //the test opens an about:blank to start - ignore this
    if (s == 'about:blank') {
        return;
    }
    //unencode the characters after removing the content type
    s = s.replace("data:text/csv;charset=utf-8,", "");
    //clean up string by unencoding the %xx
    ...
    fs.writeFile("/tmp/download.csv", s, function(err) {
        if(err) {
            console.log(err);
            return;
        }
        console.log("The file was saved!");
    }); 
});

const page = await browser.newPage();
.. open link ...
.. click on download link ..


 类似资料:
  • 由于我仍然不清楚如何在ChromeDriver-Selenium[Java]中使用--headless模式下载文件,请在这里添加如何这样做的示例,我尝试这样做(文件下载工作正常,没有--headless选项): 据我所知,自Chrome V60+以来,通过设置应该可以在无头模式下下载文件,但我找不到ChromeDriver是否已经支持它,或者只是我使用了错误的Chrome首选项作为参数 Chrom

  • 问题内容: 我正在尝试获取下载链接并下载文件。 我有一个包含以下链接的日志文件: 我有这样的代码: 到目前为止,我不知道如何获取下载链接并下载它。可以使用selenium下载文件吗? 问题答案: 根据文档,您应该配置为自动下载具有指定内容类型的文件。这是在txt文件中使用第一个URL的示例,该文件将文件保存在当前目录中: 注意,我也简化了xpath。

  • 我想用php从我的服务器下载文件。我搜索了谷歌,在这里找到了答案。这个答案表明我必须为此编写这些代码。 但我能做到这一点,只需这两行: 那么,我为什么还要像上面的代码那样多写几行呢?

  • 问题内容: 我试图使用Python从Internet下载某些内容,但我使用的是urllib模块,但无法正常工作。我希望能够将下载的文件保存到我选择的位置。如果有人可以用清晰的例子向我解释如何做到这一点,将不胜感激。 问题答案: 我建议像这样使用urllib2: 您甚至可以将其缩短为(尽管,如果您打算将每个单独的调用括在-中,则不想将其缩短):

  • 我正在使用axios处理基本的http请求,如GET和POST,并且运行良好。现在我需要能够下载Excel文件了。axios是否可以实现这一点?如果有,有人有一些示例代码吗?如果没有,我还可以在React应用程序中使用什么来执行相同的操作?