Да, я согласен с Фабрицио. DigitalOcean должен быть использован. Для ChromeDriver требуется браузер Chrome, который создает менее гибкую программу и более сложное кодирование

ыполняется локально (без указанияdriver_path), но не на Героку.

Код:

Selenium::WebDriver::Chrome.driver_path = ENV['GOOGLE_CHROME_SHIM']
browser = Watir::Browser.new :chrome

Я подтвердил ниже значения в консоли героя рельсов

ENV['GOOGLE_CHROME_BIN'] => "/app/.apt/opt/google/chrome/chrome"
ENV['GOOGLE_CHROME_SHIM'] => "/app/.apt/usr/bin/google-chrome-stable"

Установленные Buildpacks:

https://github.com/heroku/heroku-buildpack-chromedriver
https://github.com/heroku/heroku-buildpack-google-chrome

Текущая ошибка:

Selenium :: WebDriver :: Error :: WebDriverError: невозможно подключиться к chromedriver 127.0.0.1:9515

поискunable to connect to chromedriver 127.0.0.1:9515 на ТА возвращает кучу результатов но никто не упоминает героку.


Также:

Я считал фантомов. Кто-то еще работает здесь,Использование безголового браузера со стеком Heroku Rails Unicorn

Но его не рекомендуется. Ниже ошибка при запуске его локально.

Поддержка Selenium для PhantomJS устарела. Вместо этого используйте безголовый Chrome / Firefox или HTMLUnit.


Также пробовал:

Для прозрачности я также попробовал следующее.

измененияbrowser = Watir::Browser.new :chrome

кbrowser = Watir::Browser.new :chrome, headless: true

Хотя я не ожидал, что это сработает.


Также пробовал:

Удаление:https://github.com/heroku/heroku-buildpack-chromedriver

Добавление:https://github.com/heroku/heroku-buildpack-xvfb-google-chrome.

Добавлениеheadless драгоценный камень.

И запуск приведенного ниже сценария, приведенного вwatir страница драгоценного камня,http://watir.com/guides/headless/.

require 'watir'
require 'headless'
headless = Headless.new
headless.start
b = Watir::Browser.start 'www.google.com'
puts b.title
b.close
headless.destroy

Ошибка:

Selenium :: WebDriver :: Error :: UnknownError: неизвестная ошибка: не удается найти двоичный файл Chrome

Я предполагаю, что это не удалось, потому что я не указал местоположение двоичного файла / shim chrome Не могу найти, как указать это при использованииheadless в документах.


Пробовал за предложение:
heroku run /usr/bin/chromedriver --app app-name

Запуск / usr / bin / chromedriver для ⬢ app-name ... up, run.2151

(Хобби) bash: / usr / bin / chromedriver: Нет такого файла или каталога

Также смотрите ниже журналы, которые упоминаютchrome при развертывании на героку:

remote: -----> chromedriver app detected
remote: -----> Looking up latest chromedriver version...
remote: -----> Downloading chromedriver v2.33...
remote: Archive:  /tmp/chromedriver.zip
remote:   inflating: /tmp/build_cd35072c5b766edaa2b565cbff57e5d6/.chromedriver/bin/chromedriver  
remote: -----> Creating chromedriver export scripts...
remote: -----> Google Chrome app detected
...
remote: -----> Fetching https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
remote: -----> Installing google-chrome-stable_current_amd64.deb
...
remote: -----> Creating google-chrome shims


Некоторый прогресс:

Если я ssh в сервер heroku,

heroku run bash --app app-name

И искать файлы с именемchrome,

find /app/ -name "*chrome*"

/app/.profile.d/chromedriver.sh
/app/.profile.d/010_google-chrome.sh
/app/.apt/etc/cron.daily/google-chrome
/app/.apt/opt/google/chrome
/app/.apt/opt/google/chrome/chrome
/app/.apt/opt/google/chrome/chrome_100_percent.pak
/app/.apt/opt/google/chrome/chrome-sandbox
/app/.apt/opt/google/chrome/chrome_200_percent.pak
/app/.apt/opt/google/chrome/google-chrome
/app/.apt/opt/google/chrome/cron/google-chrome
/app/.apt/usr/bin/google-chrome-stable
/app/.apt/usr/bin/google-chrome
/app/.apt/usr/share/menu/google-chrome.menu
/app/.apt/usr/share/doc/google-chrome-stable
/app/.apt/usr/share/applications/google-chrome.desktop
/app/.apt/usr/share/gnome-control-center/default-apps/google-chrome.xml
/app/.apt/usr/share/man/man1/google-chrome.1
/app/.apt/usr/share/appdata/google-chrome.appdata.xml
/app/vendor/bundle/ruby/2.4.0/gems/selenium-webdriver-3.7.0/lib/selenium/webdriver/chrome
/app/vendor/bundle/ruby/2.4.0/gems/selenium-webdriver-3.7.0/lib/selenium/webdriver/chrome.rb
/app/vendor/bundle/ruby/2.4.0/gems/browser-2.4.0/test/unit/chrome_test.rb
/app/vendor/bundle/ruby/2.4.0/gems/browser-2.4.0/lib/browser/platform/chrome_os.rb
/app/vendor/bundle/ruby/2.4.0/gems/browser-2.4.0/lib/browser/chrome.rb
/app/.chromedriver
/app/.chromedriver/bin/chromedriver

Я могу увидеть двоичный хром-драйвер в/app/.chromedriver/bin/chromedriver.

Так я попробовал

heroku run /app/.chromedriver/bin/chromedriver --app app-name

Результат:

Running /app/.chromedriver/bin/chromedriver on ⬢ app-name... up, run.2067 (Hobby)
Starting ChromeDriver 2.33.506092 (733a02544d189eeb751fe0d7ddca79a0ee28cce4) on port 9515
Only local connections are allowed.

Но потом работаетheroku run rake selenium_namespace:task_one --app app-name дает тот же результат.

Selenium :: WebDriver :: Error :: WebDriverError: невозможно подключиться к chromedriver 127.0.0.1:9515 ... /app/vendor/ruby-2.4.1/lib/ruby/2.4.0/net/http.rb:906 : in `rescue in block in connect ': Не удалось открыть TCP-соединение с 127.0.0.1:9515 (соединение отклонено - connect (2) для порта« 127.0.0.1 »9515) (Errno :: ECONNREFUSED) ...

 anka10 июн. 2018 г., 10:41
Мы его запустили и, возможно, наш ответ поможет вам таким же образомstackoverflow.com/a/50781946/135160
 tim_xyz19 нояб. 2017 г., 17:08
@FabrizioBertoglio Я обновил вопрос в соответствии с вашим предложением. Звучит так, как будто отсутствуют зависимости?
 user578374509 янв. 2019 г., 06:35
Этот Решение сработало для меня
 pguardiario31 авг. 2018 г., 00:59
На Ubuntu вы бы сделалиsudo apt-get install chromium-browser но я не уверен, как это сделать с Heroku
 Fabrizio Bertoglio19 нояб. 2017 г., 12:08
какой вывод у хозяина героку при запускеheroku run /usr/bin/chromedriver, это должно запустить драйвер chrome вручную на вашем сервере heroku, возможно, некоторые зависимости не установлены.stackoverflow.com/questions/19978577/...

Ответы на вопрос(4)

Решение Вопроса

Это возможно на Heroku.

Смешениеchrome а такжеchromedriver

Ваша конфигурация смешиваетсяchromedriver а такжеХром. GOOGLE_CHROME_SHIM указывает наХром исполнимыйgoogle-chrome-stableнеchromedriver, Строка ниже приводит к тому, что Selenium выполняет неправильный двоичный файл, что приводит к ошибочному сообщению об ошибке.

Selenium::WebDriver::Chrome.driver_path = ENV['GOOGLE_CHROME_SHIM'] # WRONG!

На момент написания этой статьи (18 января)chromedriver Пакет сборки автоматически добавляет/app/.chromedriver/bin к$PATH переменная. если тыудалять вышеуказанная строка Selenium снова должна быть в состоянии найтиchromedriver автоматически.

А потом?

Вы, вероятно, добавили строку выше, чтобы исправить Selenium, который не может найти бинарный файл Chrome. Сообщение об ошибке для этого выглядело бы примерно так:

Selenium :: WebDriver :: Error :: UnknownError: неизвестная ошибка: не удается найти двоичный файл Chrome

Вы можете исправить это, сообщив Selenium, где находится бинарный файл Chrome, используяSelenium::WebDriver::Chrome::Options, Следующий код должен выполнить это.

options = Selenium::WebDriver::Chrome::Options.new
chrome_bin_path = ENV.fetch('GOOGLE_CHROME_SHIM', nil)
options.binary = chrome_bin_path if chrome_bin_path # only use custom path on heroku
options.add_argument('--headless') # this may be optional
driver = Selenium::WebDriver.for :chrome, options: options
driver.navigate.to "https://stackoverflow.com"
Buildpacks

Это должно быть все возможно со стандартомchrome а такжеchromedriver сборки пакетов:

https://github.com/heroku/heroku-buildpack-google-chrome.git https://github.com/heroku/heroku-buildpack-chromedriver.git

Вам может понадобитьсяheroku-buildpack-xvfb-google-chrome вместо ванилиchrome если вы автоматизируете клики в браузере, но это должноне необходимо просто запустить безголовый хром.

Было очень неприятно пытаться отлаживать на Heroku CI. Этот билет очень помог мне найти решение.

У меня был этот кусок кода в spec_helper.rb, который вызывал проблемы (потому что, если это кому-то помогает):

config.before(:each, type: :system, js: true) do
  driven_by :selenium_chrome_headless
end

Это было в обход всех настроек капибары ...

я согласен с Фабрицио. DigitalOcean должен быть использован. Для ChromeDriver требуется браузер Chrome, который создает менее гибкую программу и более сложное кодирование

Илья Васильевский из этогоПочта

ChromeDriver - это просто драйвер для Chrome. Для фактической работы требуется браузер Chrome, установленный на той же машине.

В Heroku по умолчанию на Chrome не установлен Chrome. Вам нужно использовать buildpack, который устанавливает Chrome. Например:

https://github.com/dwayhs/heroku-buildpack-chrome

Вы можете увидеть, как он получает Chrome:

https://github.com/dwayhs/heroku-buildpack-chrome/blob/master/bin/compile#L36-38

Тогда я читаю их обсуждение в комментариях:

Петр Газаров говорит

Я попробовал этот buildpack, и он не работал. Я подозреваю, что установка Google Chrome (или любого браузера) на heroku может быть более сложной.

Илья Васильевский ответы

Да, Heroku - очень самоуверенная и закрытая платформа. Настроить Chrome с ChromeDriver должно быть намного проще на собственной виртуальной машине на AWS, Linode или DigitalOcean.

Петр Газаров ответы

Спасибо за ответ Илья. Я переписал Watir с phantomjs, потому что не мог заставить Heroku установить Chrome.

Вы можете прочитать больше информации в этом вопросе. Если что-то придет мне в голову, я опубликую это.

 tim_xyz20 нояб. 2017 г., 16:26
Я надеялся, что для этого мне не понадобится мини-приложение на цифровом океане. Но я согласен, что это может быть единственным вариантом, учитывая устаревшее состояние фантомов.
 laverick17 янв. 2018 г., 16:44
Я столкнулся с той же проблемой, что и OP. Выложил исправление в виде отдельного ответа. Определенно возможно на Heroku.

Ваш ответ на вопрос