OSError: [Errno 8] Ошибка формата Exec: 'chromedriver', использующий chromedriver на сервере Ubuntu - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь использовать chromedriver с Ubuntu (экземпляр AWS). Я заставил chromedriver работать без проблем в локальном экземпляре, но у меня было много проблем в удаленном экземпляре.

Я использую следующий код:

options = Options()
options.add_argument('--no-sandbox')
options.add_argument('--headless')
options.add_argument('--disable-dev-shm-usage')
options.add_argument("--remote-debugging-port=9222")

driver = webdriver.Chrome(executable_path='/usr/bin/chromedriver', chrome_options=options)

Тем не менее, я получаю эту ошибку:

    Traceback (most recent call last):
  File "test.py", line 39, in <module>
    driver = webdriver.Chrome()
  File "/home/ubuntu/.local/lib/python3.6/site-packages/selenium/webdriver/chrome/webdriver.py", line 73, in __init__
    self.service.start()
  File "/home/ubuntu/.local/lib/python3.6/site-packages/selenium/webdriver/common/service.py", line 76, in start
    stdin=PIPE)
  File "/usr/lib/python3.6/subprocess.py", line 729, in __init__
    restore_signals, start_new_session)
  File "/usr/lib/python3.6/subprocess.py", line 1364, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
OSError: [Errno 8] Exec format error: 'chromedriver'

Я полагаю, что я использую самую последнюю версию Selenium, Chrome и chromedriver.

Версия Chrome: Version 78.0.3904.70 (Official Build) (64-bit)

Селен:

ubuntu@ip-172-31-31-200:/usr/bin$ pip3 show selenium
Name: selenium
Version: 3.141.0
Summary: Python bindings for Selenium
Home-page: https://github.com/SeleniumHQ/selenium/
Author: UNKNOWN
Author-email: UNKNOWN
License: Apache 2.0
Location: /home/ubuntu/.local/lib/python3.6/site-packages
Requires: urllib3

И, наконец, для chromedriver я почти уверен, что скачал самую последнюю версию здесь:https://chromedriver.storage.googleapis.com/index.html?path=78.0.3904.70/. Это версия mac_64 (я использую Ubuntu на Mac). Затем я поместил chromedriver в /usr/bin, так как я читал, что это обычная практика.

Понятия не имею, почему это не работает. Несколько вариантов, которые я могу придумать:
1) какая-то проблема с доступом? Я новичок с командной строкой и Ubuntu - я должен запускать это как "пользователь root"?

2) несоответствие между версиями chromedriver и chrome? Есть ли способ сказать, какая версия chromedriver у меня есть наверняка?

3) Я вижу, что хромедрайвер и селен находятся в разных местах. Селен в: Location: /home/ubuntu/.local/lib/python3.6/site-packages, и я переместил хромедрайвер в: /usr/bin. Может ли это вызывать проблемы?

Любая помощь оценена, когда я в тупике.

Ответы [ 2 ]

1 голос
/ 31 октября 2019

Я запускаю следующее на ec2-ubuntu:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.headless = True

driver = webdriver.Chrome("/usr/lib/chromium-browser/chromedriver", chrome_options=options) #Give the full path to chromedriver

Попробуйте. Если это не работает, я найду больше настроек.

1 голос
/ 31 октября 2019

Ubuntu Server 18.04 LTS (64-bit Arm):

  1. Загрузить Chrome: wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
  2. Установить Chrome: sudo dpkg -i google-chrome-stable_current_amd64.deb
  3. Если выВы получите сообщение об ошибке: sudo apt-get -f install
  4. Проверьте Chrome: google-chrome --version
  5. Загрузите chromedriver для Linux : wget https://chromedriver.storage.googleapis.com/78.0.3904.70/chromedriver_linux64.zip
  6. Распакуйте chromedriver, установитераспакуйте sudo apt install unzip при необходимости: unzip chromedriver_linux64.zip
  7. Переместите хромированный драйвер в / usr / bin: sudo mv chromedriver /usr/bin/chromedriver
  8. Проверьте хромированный драйвер, выполните команду: chromedriver
  9. Установите Java: sudo apt install default-jre
  10. Установить Selenium: sudo pip3 install selenium

Создать тестовый файл, nano test.py с содержанием ниже. Нажмите CTRL + X для выхода и Y для сохранения. Выполните ваш скрипт - python3 test.py

#!/usr/bin/python3

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument('--no-sandbox')
options.add_argument('--headless')
options.add_argument('--disable-dev-shm-usage')
options.add_argument("--remote-debugging-port=9222")

try:
  driver = webdriver.Chrome(chrome_options=options)
  driver.get("https://www.google.com")
  s = driver.find_element_by_name("q")
  assert s.is_displayed() is True
  print("ok")
except Exception as ex:
  print(ex)

driver.quit()

Пример использования Docker и selenium / standalone-chrome-debug:

  1. Установите Docker, шаги установки: здесь
  2. Запустите контейнер, используя команду sudo docker run -d -p 4444:4444 -v /dev/shm:/dev/shm selenium/standalone-chrome:3.141.59-xenon, различные опции: здесь
  3. Откройте группу безопасности своего экземпляра в AWS и добавьте правило TCP, чтобы иметь возможностьподключиться. Вы можете добавить только свой собственный IP-адрес и порт 4444 для Selenium
  4. Выполнить тест с локального
    options = webdriver.ChromeOptions()
    options.add_argument('--no-sandbox')
    options.add_argument('--headless')
    options.add_argument('--disable-dev-shm-usage')
    options.add_argument("--remote-debugging-port=9222")
    driver = webdriver.Remote(command_executor="http://your_instance_ip:4444/wd/hub",
                              desired_capabilities=options.to_capabilities())

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