Heroku部署Python Flask应用时Chromedriver路径及权限报错如何解决?
解决方案
步骤1:添加Heroku专属buildpack
你的路径错误、权限错误核心原因是没有在Heroku的Linux运行环境中正确安装匹配版本的Chrome浏览器和Chromedriver,本地的Windows版chromedriver.exe、通过pip安装的chromedriver包都无法在Heroku环境正常运行。
在项目根目录命令行执行以下两条命令添加官方buildpack:
heroku buildpacks:add --index 1 https://github.com/heroku/heroku-buildpack-google-chrome heroku buildpacks:add --index 2 https://github.com/heroku/heroku-buildpack-chromedriver
步骤2:修改app.py配置
buildpack安装完成后会自动注入对应环境变量,不需要硬编码任何固定路径,修改代码如下:
from selenium import webdriver import os chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('--headless') chrome_options.add_argument('--disable-gpu') chrome_options.add_argument('--no-sandbox') # 直接读取环境变量即可 chrome_options.binary_location = os.environ.get("GOOGLE_CHROME_BIN") driver = webdriver.Chrome(executable_path=os.environ.get("CHROMEDRIVER_PATH"), chrome_options=chrome_options)
如果使用selenium 4.x版本,可将最后一行初始化代码替换为兼容写法:
from selenium.webdriver.chrome.service import Service service = Service(executable_path=os.environ.get("CHROMEDRIVER_PATH")) driver = webdriver.Chrome(service=service, options=chrome_options)
步骤3:清理无效配置
- 删掉项目根目录下的本地chromedriver文件(尤其是.exe后缀的Windows版本)
- 移除requirements.txt里的
chromedriver相关依赖,可固定selenium版本避免兼容问题,添加selenium==3.141.0到requirements.txt即可 - 删掉之前手动设置的CHROMEDRIVER_PATH环境变量,执行命令:
heroku config:unset CHROMEDRIVER_PATH
- 你之前尝试的OSU服务器本地路径、相对路径在Heroku环境中都不存在,不要硬编码任何本地路径。
步骤4:重新部署
提交修改后的代码推送到Heroku即可:
git add . git commit -m "修复chromedriver配置" git push heroku main
内容的提问来源于stack exchange,提问作者Luci Relix
相关产品推荐
相关产品推荐

