node.js - 如何使用 headless : true? 使用 puppeteer 下载文件

标签 node.js chromium puppeteer

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

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/Downloadsheadless: true 不起作用。

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

知道有什么问题吗?

提前感谢您的时间和帮助,

最佳答案

我花了几个小时研究 this thread和 Stack Overflow 昨天,试图弄清楚如何通过在经过身份验证的 session 中单击 headless 模式下的下载链接来让 Puppeteer 下载 csv 文件。此处接受的答案在我的情况下不起作用,因为下载不会触发 targetcreated,并且无论出于何种原因,下一个答案都没有保留经过身份验证的 session 。 This article挽救了这一天。简而言之,fetch。希望这对其他人有所帮助。

const res = await this.page.evaluate(() =>
{
    return fetch('https://example.com/path/to/file.csv', {
        method: 'GET',
        credentials: 'include'
    }).then(r => r.text());
});

关于node.js - 如何使用 headless : true? 使用 puppeteer 下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49245080/

相关文章:

node.js - NodeJS : Parsing csv and returning the list through a promise

testing - Puppeteer Chromium,禁用 "Anonymize local IPs exposed by WebRTC"

google-chrome - puppeteer/ headless Chrome 在阿尔卑斯字体问题

javascript - 在 puppeteer 中将屏幕截图转换为 pdf

javascript - 为什么这个 puppeteer 的异步函数语法?

javascript - 无法显示快讯

node.js - 仅使用我想要的功能构建node-webkit

javascript - 如何使用Puppeteer从iframe检索reCAPTCHA token ?

javascript - 如何在 JS 的 setInterval 中等待?

node.js - 如何在 Twilio Whatsapp API 中为 Azure Node.js 机器人配置端点 URL?