无头时无法下载文件:true,无头时有效[Ppuppeteer]



我正在运行一个脚本,该脚本登录到网站上经过身份验证的会话,然后单击按钮下载excel文件。当headless: false时,我可以毫无问题地运行它,但当headless:true时,文件不会下载。

我的研究表明,浏览器可能在下载完成之前就关闭了?我增加了大约15秒的等待时间,这比下载文件所需的时间要长得多,但仍然一无所获。我尝试的另一个解决方案是手动从userAgent中删除HeadlessChrome子字符串,以防站点阻止它,但这也不起作用。在部署在Heroku上的生产web应用程序中使用的脚本中使用headless:false可以吗?

async function getData () {
try {
const wait = (ms) => new Promise(resolve => setTimeout(resolve, ms))
const browser = await puppeteer.launch();
const page = await browser.newPage();

await page.goto('<url>');
//login
await page.type('#username',username);
await page.click('#signIn');
await wait(4000)
await page.type('#password',password);
await page.click('#signIn');

await page.waitForNavigation();
await page.keyboard.press('Enter'); //click out of any pop up
// //go to merchandising page
await page.click('#m_69-link');
await page.waitForSelector('#ExcelReportButton', {visible: true})
//click on export as excel icon
await wait(4000)
await page.click('#ExcelReportButton');
await wait(15000)
await browser.close();
} catch (error) {
console.log(error)
}
};

尝试添加额外的标头,对我来说很有效:

await page.setExtraHTTPHeaders({
'Accept-Language': 'en-US,en;q=0.9'
});
await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36');

最新更新