在heroku上没有无头的情况下激活镀铬时出错

时间:2017-12-28 14:11:15

标签: javascript node.js google-chrome heroku puppeteer

我目前正在开发项目,我需要构建一个需要在浏览器中打开URL的应用程序,以便在其上使用某些功能。
因为我在nodejs脚本中使用了puppeteer来打开服务器端的浏览器所以我可以像api一样使用它。

这里是代码(nodejs):

app.get('/do', (req, res) => {
    console.log("ok");
    (async() => {
        var browser = await puppeteer.launch(
            { args: ['--no-sandbox','--disable-setuid-sandbox'], headless: false });
        var page = await browser.newPage();
        await page.goto('https://url.com');//i hid the url for personal reason
        await page.waitFor(1000); // to wait for 1000ms
        await page.waitFor('body div'); // to wait for the 'body div' selector in body
        await page.waitFor(() => Math.random() < 0.5); // to wait for the predicate
        await page.screenshot({
            path: 'public/photo.png'
        });

        await browser.close();
        await res.end('<html><head></title></head><body><h1><img src=photo.png ></img></h1></body></html>');
    })();

});

此代码在本地运行,但是当我在heroku上部署时,它会向我显示此错误:

  

app [web.1]:/ send
  app [web.1] :(节点:4)   UnhandledPromiseRejectionWarning:未处理的承诺拒绝   (拒绝ID:1):错误:无法启动chrome!
  应用[web.1]:   /app/node_modules/puppeteer/.local-chromium/linux-515411/chrome-linux/nacl_helper:   加载共享库时出错:libnss3.so:无法打开共享库   目标文件:没有这样的文件或目录
  应用[web.1]:   [21:21:1228 / 131735.202176:错误:nacl_fork_delegate_linux.cc(316)]不好   NaCl辅助启动ack(0字节)
  应用[web.1]:
        应用[web.1]:
  app [web.1]:疑难解答:   https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md
  应用[web.1]:
  app [web.1] :(节点:4)[DEP0018]   弃用警告:已弃用未处理的承诺拒绝。在   未来,未经处理的承诺拒绝将终止   Node.js使用非零退出代码进行处理。

但是,如果我删除headless: false它可以工作,但问题是该网址显示了一个变暖页面,我需要使用浏览器,如chrome或mozilla或safari。

如何解决此问题?

2 个答案:

答案 0 :(得分:4)

您需要将Puppeteer Heroku buildpack包含在应用程序的buildpack列表中。转到Heroku dashboard并打开您的应用。转到设置&gt; Buildpacks&gt;添加buildpack并使用此URL。

https://github.com/jontewks/puppeteer-heroku-buildpack

单击“添加buildpack”时,只需将该URL粘贴到输入中,然后单击“保存”。在下一次部署时,您的应用程序还将安装Puppeteer需要运行的依赖项。

Puppeteer on Heroku

请参阅troubleshooting guide以获取更多帮助。

答案 1 :(得分:0)

这对我有用。首先,我清除所有构建包,然后添加puppeteer-heroku-buildpack和heroku / nodejs一个:

$ heroku buildpacks:clear
$ heroku buildpacks:add --index 1 https://github.com/jontewks/puppeteer-heroku-buildpack
$ heroku buildpacks:add --index 1 heroku/nodejs