部署到 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' })
谢谢!
我建议降级你的 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) => {
(超时时间长是因为该函数执行了多个操作,我很谨慎)
根据最新的 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 运行时对此进行了测试,它可以工作。