OSError: [Errno 8] Ошибка формата Exec при использовании ChromeDriver с Selenium и Linux на Raspberry Pi - PullRequest
0 голосов
/ 26 декабря 2018

Я пытаюсь получить доступ к веб-сайту и взаимодействовать с ним, используя селен и драйвер chrome.Я скачал драйвер chrome с здесь , в частности я скачал версию 2.45 и версию linux64, потому что я на Raspberry Pi.Я также установил geckodriver версию arm для linux.Я распаковал оба этих файла и переместил их в мою папку / usr / bin, потому что там мой путь к Python 3.Вот мой код:

from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://www.google.com")

Я запускаю этот код и получаю сообщение об ошибке:

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

Я проверил, чтобы убедиться, что chromedriver является исполняемым файлом, и это, я знаю,это от просмотра свойств и разрешений, и он говорит, что любой может выполнить файл.Я попытался установить homebrew (я не уверен, правильно ли я это сделал) и запустить brew install chromedriver, все равно не получилось.Другое решение, которое я прочитал в Интернете, показало, что у меня неправильный файл chromedriver для моей операционной системы, но я уверен, что это так.Я впервые использую селен, поэтому, надеюсь, я не делаю это совершенно неправильно.Любая помощь приветствуется!

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Мне наконец-то удалось заставить хромедрайвер работать на Raspberry Pi!Первое, что я делал неправильно, это использовал последнюю версию chromedriver (версия 2.45), которая работает только для версий Chrome 70-72.В настоящее время (декабрь 2018 года) самая высокая версия Chromium (Chrome с открытым исходным кодом), доступная на Raspberry Pi, составляет 65 ( source ).Это означало, что версии chromedriver 2.36 - 2.38 ДОЛЖНЫ работать, но не работают.Почему они все еще дали мне эту ошибку ОС, я до сих пор не понимаю.Однако я нашел полезный пост reddit (да, reddit), на который я буду ссылаться здесь .По сути, вместо того, чтобы загружать chromedriver с их официального сайта, мне нужно было загрузить его с здесь .На этом сайте есть хром-драйвер для рук, а не просто Linux 64-битный.Поэтому я нажал на chromedriver 65 в armhf (обновлений) и загрузил файл .deb, показанный в правой части страницы.Затем я открыл его двойным щелчком, и мой raspberry pi распаковал файл .deb и дал мне файл с именем chromedriver, расположенный в / usr / lib / chromium-browser.Я запустил sudo mv /usr/lib/chromium-browser/chromedriver /usr/bin в терминале, чтобы переместить файл chromedriver в каталог python.Теперь этот кусок кода селена отлично работал в python и на Raspberry Pi:

from selenium import webdriver driver = webdriver.Chrome()

Опять же, я бы не решил это без полезного поста Reddit. Я сошлюсь снова здесь .Все шаги, которые я описал выше, описаны в сообщении Reddit, я просто пытаюсь вывести слово!

0 голосов
/ 26 декабря 2018

Это сообщение об ошибке ...

OSError: [Errno 8] Exec format error

... означает, что вызванный двоичный файл ChromeDriver был неверного формата.

Ваша основная проблемаявляется несовместимостью двоичного формата ChromeDriver относительно базовой операционной системы .

Поскольку вы находитесь на linux64 битовая версия на Raspberry Pi вам необходимо скачать chromedriver_linux64.tar.gz с chromedriver.storage.googleapis.com , распаковать его и предоставить абсолютный путь GeckoDriver через аргумент executable_path следующим образом:

from selenium import webdriver

browser= webdriver.Chrome(executable_path='/path/to/chromedriver')

Дополнительные соображения

Выполнитьдополнительные задачи очистки :

  • ChromeDriver присутствует в указанном месте.
  • ChromeDriver имеет разрешение на выполнение для пользователей без полномочий root.
  • Очистить ваше Рабочее пространство проекта через вашу IDE и Перестройте ваш проект только с необходимыми зависимостями.
  • ( только для WindowsOS ) Используйте инструмент CCleaner , чтобы стеретьотключение всех операций ОС до и после выполнения Test Suite .
  • ( только для LinuxOS ) Освободить и освободить неиспользуемую / кэшированную память вUbuntu / Linux Mint до и после выполнения Test Suite .
  • Выполните перезагрузку системы .
  • Выполните Test как пользователь без полномочий root.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...