我一直在运行以下代码,以便从网站 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/Downloads
。 headless: true
不起作用。
我在 macOS Sierra (MacBook Pro) 上使用 puppeteer 版本 1.1.1
运行它,它将 Chromium 版本 66.0.3347.0
拉入 .local- chromium/
目录并使用 npm init
和 npm 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/