【问题标题】:Using phantomjs in a firebase function在 firebase 函数中使用 phantomjs
【发布时间】:2018-04-19 02:12:08
【问题描述】:

我想在 firebase 函数中使用 phantomjs 的屏幕捕获功能来返回 URL 的 PDF 屏幕截图。寻找有人这样做的例子。

【问题讨论】:

  • 对于我从事的一个项目,我们想在 FF 中运行无头 Chrome。无法让它工作。最后使用 AWS Lambda 运行无头 Chrome,这要容易得多(存在几个项目来促进这一点)。这是我第一次知道有人在 Google 云功能中运行 HC:stackoverflow.com/a/49522268/7486612(并且需要自定义 Chrome 编译)
  • Headless Chrome 将无法工作(至少在没有重大工作的情况下不会),因为在执行 Cloud Functions 的环境中缺少它所需的一些驱动程序。但是我在我的一个云函数中使用了 Phantom.js 没有问题

标签: firebase phantomjs google-cloud-functions


【解决方案1】:

我在 Cloud Functions 中使用了 PhantomJS,没有出现重大问题。唯一需要担心的是我必须增加容器的内存,因为内存中的渲染结果会占用内存。

我最终使用了node-webshot,它是 PhantomJS 的包装器:

"node-webshot": "^1.0.2",

捕获实际屏幕截图非常简单:

const functions = require('firebase-functions');
const webshot = require('node-webshot');

exports.screenshotTweet = functions.https.onRequest((req, res) => {
  var stream = webshot(req.query.url);
  res.writeHead(200, {'Content-Type': 'image/jpeg'});
  stream.on('data', function(data) {
    res.write(data.toString('binary'), 'binary');
  });
  stream.on('end', function() {
    res.end();
  })
});

【讨论】:

  • 我尝试了您的解决方案,但它对我不起作用。唯一的区别是我使用了 onCall 而不是 onRequest。我没有错误我的 stream.on('data') 从未被调用
  • 我确实有一个错误 'PhantomJS 退出' 不确定我是否可以做点什么
  • 不幸的是,这并没有给我太多的继续。我只能说,在将其发布到此处之前,我肯定已经在生产中使用过此代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-11
  • 1970-01-01
  • 1970-01-01
  • 2012-09-15
  • 2021-01-25
  • 1970-01-01
相关资源
最近更新 更多