`selenium-webdriver` ruby ​​gem не может соединиться с chromedriver в Ubuntu 14.04 - PullRequest
0 голосов
/ 18 января 2019

Я использую Ubuntu 16.04 и пытаюсь запустить безголовый браузер Chrome в ruby ​​с chromedriver.

Я установил chromedriver в Ubuntu, используя эти инструкции , а затем запускаю это через консоль ruby ​​irb:

require 'selenium-webdriver'

options = Selenium::WebDriver::Chrome::Options.new
options.add_argument('--headless')

@driver = Selenium::WebDriver.for(:chrome, options: options)

Traceback (most recent call last):
   10: from /home/weefee/.rvm/rubies/ruby-2.5.1/bin/irb:11:in `<main>'
    9: from (irb):5
    8: from /home/weefee/.rvm/gems/ruby-2.5.1/gems/selenium-webdriver-3.141.0/lib/selenium/webdriver.rb:86:in `for'
    7: from /home/weefee/.rvm/gems/ruby-2.5.1/gems/selenium-webdriver-3.141.0/lib/selenium/webdriver/common/driver.rb:44:in `for'
    6: from /home/weefee/.rvm/gems/ruby-2.5.1/gems/selenium-webdriver-3.141.0/lib/selenium/webdriver/common/driver.rb:44:in `new'
    5: from /home/weefee/.rvm/gems/ruby-2.5.1/gems/selenium-webdriver-3.141.0/lib/selenium/webdriver/chrome/driver.rb:44:in `initialize'
    4: from /home/weefee/.rvm/gems/ruby-2.5.1/gems/selenium-webdriver-3.141.0/lib/selenium/webdriver/common/service.rb:69:in `start'
    3: from /home/weefee/.rvm/gems/ruby-2.5.1/gems/selenium-webdriver-3.141.0/lib/selenium/webdriver/common/socket_lock.rb:39:in `locked'
    2: from /home/weefee/.rvm/gems/ruby-2.5.1/gems/selenium-webdriver-3.141.0/lib/selenium/webdriver/common/service.rb:72:in `block in start'
    1: from /home/weefee/.rvm/gems/ruby-2.5.1/gems/selenium-webdriver-3.141.0/lib/selenium/webdriver/common/service.rb:142:in `connect_until_stable'
Selenium::WebDriver::Error::WebDriverError (unable to connect to chromedriver 127.0.1.1:9515)

Есть идеи, как это исправить? Несколько заметок:

  1. Некоторые люди, кажется, сталкиваются с проблемами с rbenv и прокладкой, которую он устанавливает. Я вообще не использую rbenv, так что это не имеет значения.

  2. Вышеописанное работает, когда я пробую его на своем ноутбуке с OSx. Конечно, я могу легко установить chromedriver с brew install chromedriver, и он, кажется, работает

  3. Кроме того, я удалил chromedriver и переустановил его, используя chromedriver-helper gem. Все тот же результат.

Я уже некоторое время рвал на себе волосы - любая помощь была бы признательна. Спасибо!

ОБНОВЛЕНИЕ

Я углубился в источник драгоценного камня selenium-webdriver, чтобы точно узнать, что он делал, когда пытался подключиться к процессу chromedriver.

Мне удалось воспроизвести следующее на моей консоли ruby ​​на сервере, используя те же команды, которые использует гем selenium-webdriver:

#
# Start the Chromedriver Process
#

require 'childprocess'
process = ChildProcess.build(*["/usr/local/bin/chromedriver", "--port=9515"])
process.leader = true
process.alive? #=> false
process.start
process.alive? #=> true

#
# Create a Socket connection to 127.0.0.1:9515
#

require 'socket'
require 'selenium-webdriver'

host = Selenium::WebDriver::Platform.localhost                       #=> "127.0.1.1"
port = Integer(Selenium::WebDriver::Chrome::Service::DEFAULT_PORT)   #=> 9515
timeout = 5

# Create and connect to socket

addr     = Socket.getaddrinfo(host, port, Socket::AF_INET, Socket::SOCK_STREAM)
sock     = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)
sockaddr = Socket.pack_sockaddr_in(port, addr[0][3])

# First need to rescue the writable error and then connect again
# to get the actual error. No idea why but even the official
# rubydocs use this pattern: https://apidock.com/ruby/Socket/connect_nonblock

begin
  sock.connect_nonblock(sockaddr)
rescue IO::WaitWritable
  IO.select(nil, [sock], nil, 5)
  sock.connect_nonblock(sockaddr)
end

#=> Errno::ECONNREFUSED (Connection refused - connect(2) for 127.0.1.1:9515)

Похоже, основная ошибка в том, что сокет отказывается подключаться к этому (локальному) адресу и порту, даже если chromedriver очень сильно работает на этом порту.

Я не очень разбираюсь в сокетах - это обычная ошибка?

Спасибо!

Ответы [ 4 ]

0 голосов
/ 30 января 2019

Все предоставленные решения были отличными рекомендациями, но в конечном итоге ответ Тукана привел меня на путь тщательной проверки версий.

Установка, которая у меня не работала в Ubuntu 14.04, которой на момент написания статьи было около 5 лет. Я перестроил все это на машине с Ubuntu 16.04, и она отлично работала.

Я не знаю , что вызывает ошибку, но, похоже, что-то на уровне операционной системы.

0 голосов
/ 28 января 2019
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb stable main" >> /etc/apt/sources.list.d/google.list'
sudo apt-get update
sudo apt-get --only-upgrade install google-chrome-stable

Это будет держать вашу версию актуальной и доступной.Я имел это решить аналогичные проблемы, которые возникли во время тестирования CI.После этого вы сможете настроить @driver.

0 голосов
/ 30 января 2019

из этой строки:

Selenium::WebDriver::Error::WebDriverError (unable to connect to chromedriver 127.0.1.1:9515)

предполагает, что вы пытаетесь подключиться к 127.0.1.1, в то время как ваш localhost должен быть 127.0.0.1, не могли бы вы проверить свою конфигурацию?

0 голосов
/ 25 января 2019

Я пробовал это на Ubuntu 16.04 (обновлено) и ruby, который поставляется с системой ruby 2.3.1p112 (2016-04-26) [x86_64-linux-gnu].

Из того, что я предполагаю, вы используете неправильный, старый (в руководстве есть версия 2.26 , которая не будет работать с текущим хромом), chromedriver, который не совместим с текущим стабильным хромом .

Текущий стабильный Chrome - Unpacking google-chrome-stable (71.0.3578.98-1) ..., поэтому вам нужно максимально приблизить chromedriver к версии Chrome.

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

В моем случае это будет 71.0.3578.80 версия:

wget -N http://chromedriver.storage.googleapis.com/71.0.3578.80/chromedriver_linux64.zip

Затем можно продолжить, как показано в инструкциях.

Тогда ты будешь работать selenium-webdriver:

irb
irb(main):001:0> require 'selenium-webdriver'
=> true
irb(main):003:0> options = Selenium::WebDriver::Chrome::Options.new
=> #<Selenium::WebDriver::Chrome::Options:0x00000002ee6db0 @args=#<Set: {}>, @binary=nil, @prefs={}, @extensions=[], @options={}, @emulation={}, @encoded_extensions=[]>
irb(main):004:0> options.add_argument('--headless')
=> #<Set: {"--headless"}>
irb(main):005:0> @driver = Selenium::WebDriver.for(:chrome, options: options)
=> #<Selenium::WebDriver::Chrome::Driver:0x..f95c429ee62a3a152 browser=:chrome>

Примечание. При возникновении проблем с установкой ffi установите libffi-dev через apt-get.

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