在 Firebase Cloud Functions 中运行 Puppeteer 时遇到问题

问题描述 投票:0回答:2

部署到 Firebase Cloud Functions 时,我似乎无法让 Puppeteer 正常工作。

Puppeteer:使用 Puppeteer 时无法上传我的项目,因为我在“functions”文件夹中上传 Chrome 的 Puppeteer 版本,然后它超出了允许的大小限制。这是一条合适的路吗?我可以绕过尺寸限制吗?

Puppeteer-core:我找不到合适的 Chrome 浏览器来使用它。 “Chrome-aws-lambda”似乎不适用于最新版本的 Puppeteer-core。也许这里有人知道更新的替代方案?

或者也许有我不知道的解决方案?

我尝试为我的函数分配更多内存(从 256 mb 增加到 1 GB),但没有帮助。我还尝试向 Puppeteer 添加“无沙箱”标志,但这没有帮助。 我已确保 Puppeteer 下载的 Chrome 版本位于我的“functions”目录中。不过,此版本的 Chrome 似乎太大,无法上传到 Firebase Cloud Functions。 我还尝试将 Chrome 的新无头模式添加到代码中,但没有成功。

这是我当前的 Puppeteer 浏览器代码:

browser = await puppeteer.launch({ 
            headless: "new",
            args: ['--no-sandbox', '--disable-setuid-sandbox']
        });

这是我将内存增加到 1 GB 的代码:

exports.scheduledFunction = functions
    .runWith({ memory: '1GB' })

谢谢!

firebase google-cloud-functions puppeteer
2个回答
4
投票

我建议降级你的 puppeteer 版本。一些较新的版本在与 Cloud Functions 一起使用时存在问题。您不需要将 Chrome 包含在您的函数文件夹中。

我在具有 4GB 内存的 Cloud Function 中使用 Puppeteer 16.2.0,它对我来说工作得很好。这是我的代码:

async function get_browser() {
  const browser = await puppeteer.launch({
      args: ["--no-sandbox", "--disable-setuid-sandbox"]
  });

  return browser;
}

调用 get_browser 的父函数初始化为:

exports.functionName = functions.runWith({memory: "4GB", timeoutSeconds: 540}).https.onRequest(async (request, response) => {

(超时时间长是因为该函数执行了多个操作,我很谨慎)


0
投票

根据最新的 Puppeteer 文档 v23.11.1-在 Google Cloud Functions 上运行 Puppeteer,我们需要做的就是正确设置缓存。

Google Cloud Functions 的 Node.js 运行时附带运行 Headless Chrome 所需的所有系统包。

我已经使用 Puppeteer v23.11.1 和 Google Cloud Run Functions Node.js 20 运行时对此进行了测试,它可以工作。

© www.soinside.com 2019 - 2024. All rights reserved.