Что я пытаюсь сделать
Используйте селен и его рубиновые привязки, чтобы открыть хром и прочитать значение из DOM. Эта часть отлично работает, однако мне нужно запустить ее на сервере Linux без головы. Казалось достаточно простым, поэтому я запустил его с помощью xvfb-run с помощью этой команды:
export PATH=$PATH:./bin
xvfb-run --server-arg="-screen 0, 1024x768x16" ruby script.rb
Первая строка добавляет двоичный файл chromedriver
к PATH
, а вторая строка запускает скрипт через xvfb
. Я получил это, работая над коробкой EC2 ubuntu, которая по сути является коробкой разработчика. Все прекрасно.
Теперь пришло время запустить его на другой машине EC2 с Ubuntu, используя тот же скрипт bash. Выдает ошибку, что не удалось найти двоичный файл chromedriver
. Странно, так как на другой коробке все работало нормально. Проверил, бинарник есть. Я вручную добавляю его в путь и снова запускаю скрипт bash, та же ошибка. После некоторого устранения неполадок и гугления я нашел это:
https://code.google.com/p/selenium/wiki/ChromeDriver
Это говорит о том, что chromedriver должен быть символически связан с /usr/bin/google-chrome
. Опять же странно, так как он отлично работает на другом компьютере и на моей локальной машине без этой символической ссылки. Я сделал символическую ссылку на это место, и теперь я получаю эту ошибку:
/usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.41.0/lib/selenium/webdriver/remote/response.rb:51:in `assert_ok': unknown error: Chrome failed to start: exited abnormally (Selenium::WebDriver::Error::UnknownError)
Я никогда не получал этого на моем локальном или dev-боксе. Есть идеи? Это проблема с chromedriver
, xvfb
или средой, в которой он работает? Какая-то разница в поле развертывания, которое будет отличаться от окна разработчика, которое мне не хватает?