You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Heroku平台Flask应用使用pyppeteer时Chrome浏览器意外关闭如何解决

解决方案
  • 调整pyppeteer启动参数
    Heroku的容器环境属于无特权受限环境,Chrome默认的沙箱机制无法运行,且pyppeteer默认会调用自带的Chromium,和你安装的Chrome buildpack不匹配,需要显式指定启动参数和Chrome执行路径,示例代码如下:
from pyppeteer import launch

browser = await launch(
    headless=True,
    args=[
        '--no-sandbox',
        '--disable-setuid-sandbox',
        '--disable-dev-shm-usage',
        '--disable-gpu',
        '--no-zygote'
    ],
    # Heroku上google-chrome buildpack的固定安装路径
    executablePath='/opt/google/chrome/google-chrome',
    # 关闭自动下载Chromium的逻辑,避免使用自带的不兼容版本
    autoClose=False
)

注意:操作完页面逻辑后要主动调用browser.close()释放资源,避免内存占用过高被Heroku系统kill。

  • 调整buildpack的安装顺序与依赖
    添加buildpack时需要保证系统级依赖的优先级高于语言级依赖,正确的顺序应该是先安装Chrome、ChromeDriver相关buildpack,再安装Python buildpack。
    执行以下命令校验顺序:
    heroku buildpacks
    正常输出顺序应为:
  1. heroku/google-chrome
  2. heroku/chromedriver
  3. heroku/python
    如果缺少chromedriver依赖,执行heroku buildpacks:add heroku/chromedriver添加;如果顺序错误,执行heroku buildpacks:add --index 1 heroku/google-chrome调整优先级。
  • 排查版本兼容性问题
    部分高版本pyppeteer和Heroku预装的Chrome版本存在兼容性问题,可以在requirements.txt中锁定兼容性更好的版本:
    pyppeteer==0.2.5
    重新部署后验证问题是否解决。

  • 排查资源占用问题
    Heroku免费dyno的内存上限为512MB,Chrome启动后内存占用较高,如果超出上限会被系统强制杀死。可以在启动参数中添加--max-old-space-size=256限制Chrome的内存占用,或是升级到更高配置的dyno。

内容的提问来源于stack exchange,提问作者racheal_surprise

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 09:06:01