Как установить chromedriver в определенном каталоге (/ app / assets / chromedriver) на Heroku? - PullRequest
0 голосов
/ 14 января 2019

Задача

Я играл с Python-скриптом, используя Selenium, который отлично работает локально (так как у меня установлен ChromeDriver в правильном каталоге, который assets/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 я установил следующие пакеты Buildpacks в свое приложение:

  1. https://github.com/heroku/heroku-buildpack-python
  2. https://github.com/heroku/heroku-buildpack-chromedriver
  3. https://github.com/heroku/heroku-buildpack-google-chrome

(Примечание: многие ответы на StackOverflow говорят о heroku-xvfb-google-chrome buildpack , но я не хочу его использовать, потому что он опирается на Cedar-14, который считается устаревшим в апреле этого года.)

Я пытался установить $GOOGLE_CHROME_BIN и $GOOGLE_CHROME_SHIM в качестве переменных конфигурации, указывающих на каталог app/assets/chromedriver, но это не сработало. У кого-нибудь есть идеи как установить chromedriver в определенную директорию (в данном случае app/assets/chromedriver) на Heroku?

Я боролся с этим уже несколько дней, и был бы очень признателен за любую помощь, которую я могу получить!

1 Ответ

0 голосов
/ 18 июня 2019

Установите следующий путь, используя команду 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)

Я использую прокси, но вы, вероятно, можете этого избежать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...