【问题标题】:Cannot download file while headless: true, works when headless: false [Puppeteer]无头时无法下载文件:true,无头时有效:false [Puppeteer]
【发布时间】:2020-11-24 17:15:19
【问题描述】:

我正在运行一个脚本,该脚本会登录到网站上经过身份验证的会话,然后单击一个按钮来下载一个 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)
  }
};

【问题讨论】:

  • 请问,为什么headless: false 对你不利?
  • 我理解 headless:false 是用于调试目的,我不想在生产系统中运行的脚本中使用它。这个脚本每天会被部署在 Heroku 上的 Rails 应用程序多次使用。不是这样吗?

标签: node.js puppeteer


【解决方案1】:

尝试添加额外的标题,它对我有用:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 2010-09-29
    • 2019-08-09
    相关资源
    最近更新 更多