问题
我一直在使用Selenium处理Python脚本,该脚本在本地运行良好(因为我在正确的目录assets/chromedriver
中安装了ChromeDriver),但在Heroku上不起作用。我收到的错误消息的摘要是:
'chromedriver' executable needs to be in PATH.
No such file or directory: '/app/assets/chromedriver': '/app/assets/chromedriver'
ensure chromedriver is installed at /app/assets/chromedriver
已采取的步骤
在部署到Heroku时,我已经在我的应用程序上安装了以下Buildpack:
(注意:StackOverflow上的很多答案都改为谈论heroku-xvfb-google-chrome buildpack,但我不想使用它,因为它依赖于Cedar-14,它将在今年4月弃用。)
我尝试将$GOOGLE_CHROME_BIN
和$GOOGLE_CHROME_SHIM
设置为指向app/assets/chromedriver
目录的配置变量,但这没有用。是否有人知道如何在Heroku的特定目录(本例中为app/assets/chromedriver
)中安装chromedriver?
我已经为此苦苦挣扎好几天了,非常感谢我能提供的任何帮助!
答案 0 :(得分:0)
使用heroku congfig:set
命令设置以下路径
heroku config:set CHROMEDRIVER_PATH=/app/.chromedriver/bin/chromedriver
和
heroku config:set GOOGLE_CHROME_BIN=/app/.apt/usr/bin/google-chrome
使用heroku config
命令验证路径
您可以使用此代码段配置您的定义
import os
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
def load_chrome_driver(proxy):
options = Options()
options.binary_location = os.environ.get('GOOGLE_CHROME_BIN')
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')
options.add_argument('--remote-debugging-port=9222')
options.add_argument('--proxy-server='+proxy)
return webdriver.Chrome(executable_path=str(os.environ.get('CHROMEDRIVER_PATH')), chrome_options=options)
我正在使用代理,但是您可以避免这种情况。