Pyppeteer 浏览器在 heroku 中意外关闭

Pyppeteer Browser closed unexpectedly in heroku

我最近在 heroku 中部署了一个应用程序。它使用 python pyppeteer 包。我在 repl.it 上测试时没有遇到任何问题。但不幸的是,在 heroku 中,浏览器不断崩溃。

我使用 requirement.txt 安装 pyppeteer 包。 我还尝试使用 apt heroku buildpack 安装 pupeteer 所需的要求,以便按照 here

工作

我的程序:

async def mainer(link, path, is_image):
    browser = await launch(args=['--no-sandbox'])
    page = await browser.newPage()
    await page.goto(link)
    if is_image:
        await page.screenshot({'path': f'{path}', 'fullPage': True, 'type': 'png'})
    else:
        await page.pdf({'path': f'{path}'})
    await browser.close()

这是来自 heroku 的完整回溯错误:

2020-05-14T19:39:50.115643+00:00 app[worker.1]:     await handler.callback(self.client, *args)
2020-05-14T19:39:50.115644+00:00 app[worker.1]:   File "/app/plugins/downloader.py", line 61, in cb_
2020-05-14T19:39:50.115645+00:00 app[worker.1]:     await mainer(url,file,mode)
2020-05-14T19:39:50.115645+00:00 app[worker.1]:   File "/app/plugins/downloader.py", line 13, in mainer
2020-05-14T19:39:50.115646+00:00 app[worker.1]:     browser = await launch(args=['--no-sandbox'])
2020-05-14T19:39:50.115646+00:00 app[worker.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/pyppeteer/launcher.py", line 305, in launch
2020-05-14T19:39:50.115647+00:00 app[worker.1]:     return await Launcher(options, **kwargs).launch()
2020-05-14T19:39:50.115648+00:00 app[worker.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/pyppeteer/launcher.py", line 166, in launch
2020-05-14T19:39:50.115648+00:00 app[worker.1]:     self.browserWSEndpoint = get_ws_endpoint(self.url)
2020-05-14T19:39:50.115648+00:00 app[worker.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/pyppeteer/launcher.py", line 225, in get_ws_endpoint
2020-05-14T19:39:50.115649+00:00 app[worker.1]:     raise BrowserError('Browser closed unexpectedly:\n')
2020-05-14T19:39:50.115649+00:00 app[worker.1]: pyppeteer.errors.BrowserError: Browser closed unexpectedly:
2020-05-14T19:39:50.115650+00:00 app[worker.1]: 

如果我们关心使用 buildpack provided by Heroku, there will be an environmental variable called GOOGLE_CHROME_SHIM. We can use this variable as an argument to pyppeteer.launch()webdriver.Chrome()

对于 Heroku 部署,我遇到了这个问题

pyppeteer.errors.BrowserError: Browser closed unexpectedly:

this 之后,我刚刚在启动 Puppeteer 时添加了“--no-sandbox”模式,并且 'headless' 设置为 True。

from pyppeteer import launch
    BROWSER = await launch({'headless': True, 'args': ['--no-sandbox']})

我在我的 dyno 设置中添加了 2 个构建包:

这对我有用

使用 Django,当我在我的应用程序开始时调用 requests_html HTMLSession 时,我需要添加 puppeteer-heroku-buildpack , heroku-buildpack-google-chrome 作为第一个 buildspacks 和 heroku/python 作为最后一个。在代码中必须添加如下内容:session = HTMLSession(browser_args=["--no-sandbox"])