在Heroku部署带Selenium的Flask应用时Chrome驱动路径报错如何解决
Heroku部署Selenium+Flask抓取应用崩溃解决方案
你当前的代码存在两个核心错误,是导致应用无法启动的直接原因:
- 配置项设置顺序错误:
options.binary_location必须在初始化webdriver之前设置,你现在是先初始化driver再指定Chrome二进制路径,配置完全不生效 - 驱动路径没有读取环境变量:
executable_path=("CHROMEDRIVER_PATH")这里你直接传了固定字符串,没有从环境变量中读取配置好的驱动路径
你可以按照以下步骤逐一修正配置:
1. 修正Selenium配置代码
调整配置顺序,同时补充Heroku无图形环境运行Chrome必须的启动参数:
from selenium import webdriver import os options = webdriver.ChromeOptions() # 先设置Chrome二进制路径 options.binary_location = os.environ.get("GOOGLE_CHROME_BIN") # 补充必备启动参数 options.add_argument("--headless=new") options.add_argument("--no-sandbox") options.add_argument("--disable-dev-shm-usage") options.add_argument("--disable-gpu") # 从环境变量读取chromedriver路径 driver = webdriver.Chrome(executable_path=os.environ.get("CHROMEDRIVER_PATH"), options=options)
2. 验证Buildpack配置
确认你已经添加了以下两个官方Buildpack,且顺序正确:
- heroku/chromedriver
- heroku/google-chrome
如果使用第三方Buildpack,请确保Chrome驱动版本和Chrome浏览器版本匹配,避免版本兼容导致的启动失败
3. 检查依赖和启动配置
确认你的requirements.txt中已经添加了正确的依赖:
flask selenium>=4.0.0 gunicorn
同时根目录需要存在Procfile文件,内容为:web: gunicorn 你的Flask入口文件名:app
比如你的Flask启动文件是app.py,就写web: gunicorn app:app
4. 端口绑定配置
Heroku会随机分配应用运行端口,你需要在启动Flask时读取对应环境变量:
if __name__ == '__main__': port = int(os.environ.get("PORT", 5000)) app.run(host='0.0.0.0', port=port)
内容的提问来源于stack exchange,提问作者Wasey Siddique
相关产品推荐
相关产品推荐

