在firebase云功能中运行puppeteer代码

问题描述 投票:1回答:3

我正在开发一个个人项目,这是一个应用程序,用户可以输入他们的地址和信用卡信息,然后单击按钮为我经常访问的大学之一购买停车许可证。

我想在firebase的云存储中托管我的前端,我想创建一个云函数,其中puppeteer代码可以运行我保存到firebase的实时数据库的信息。

firebase云功能是否可以运行购买停车许可证的木偶操纵码?

由于puppeteer不支持云功能,我可以使用heruoku来托管木偶操作码吗?

firebase heroku web-scraping google-cloud-functions puppeteer
3个回答
4
投票

目前无法将Puppeteer与Cloud Functions节点6运行时一起使用,因为运行已部署代码的服务器实例缺少Puppeteer所需的共享库。你可以在this GitHub issue读到这个。另见this issue

从节点8运行时版本开始,可以使用所需的puppeteer库。


5
投票

现在可以在Cloud Functions中运行Puppeteer(从August 13, 2018开始)。

注意:其中一些命令位于“beta”SDK中,因此将来无疑会发生变化。 quick start guide包含最新文档。

1)在撰写本文时,您需要使用Node 8和beta组件:

gcloud components update
gcloud components install beta

2)在Node示例中有一个“无头Chrome”示例,其中显示了如何将屏幕截图创建为PNG(尽管有other options可用)。

git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
cd nodejs-docs-samples/functions/headless-chrome

3)部署组件

gcloud beta functions deploy screenshot --runtime nodejs8 --trigger-http

4)最后,您需要增加内存分配。默认情况下,云功能只能获得256Mb的内存,因此如果您在没有先更改内存设置的情况下尝试运行Puppeteer,则会出现错误。在Cloud Console中打开您的项目,选择Cloud Functions,选择您的功能并单击编辑。 512Mb对我来说还不够,所以我上升到了2Gb。

Cloud Functions memory settings


1
投票

我有类似的问题,我使用https://www.browserless.io/来帮助解决这个问题。他们还有一个私人使用的码头图像,这可能是一种与木偶操作者一起运行无头镀铬的方法。

您可以使用本地浏览器启动puppeteer,而不是使用其服务上的端点连接到其实例上的puppeteer,如下所示:

const puppeteer = require('puppeteer');

puppeteer.connect({
  browserWSEndpoint: 'wss://chrome.browserless.io'
}).then(async browser => {
  const page = await browser.newPage();
  await page.goto('https://example.com');
  await page.screenshot({path: 'screenshot.png'});
  page.close();
});

如果要对云功能使用await和async,则需要在上传之前将其转换为ES5。有关使用typescript作为编译器的解决方案,请参阅:https://github.com/ultrasaurus/firebase-functions-typescript

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