WebDriverException: сообщение: недопустимый аргумент: невозможно убить завершенный процесс с помощью GeckoDriver, Selenium и Python на RaspberryPi3

Сервер: Raspberry Pi 3
ОС: Dietpi - версия 159
Версия Geckodriver: 0.22 для arm
Версия Firefox: 52.9.0
Версия Python: 3.5
Версия Selenium: 3.14.1

Gecko является исполняемым файлом и находится в / usr / local / bin /

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.firefox.options import Options
import time



options = Options()
options.set_headless(headless=True)
driver = webdriver.Firefox(firefox_options=options)

print('Need your login credential')
username = input('What is your username?:\n')
password = input('What is your password?:\n')
...
...

Выход:

root@RPi3:~# python3.5 ITE-bot.py 
Traceback (most recent call last):
  File "ITE-bot.py", line 12, in <module>
    driver = webdriver.Firefox(firefox_options=options)
  File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/firefox/webdriver.py", line 174, in __init__
    keep_alive=True)
  File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
    self.start_session(capabilities, browser_profile)
  File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: invalid argument: can't kill an exited process

Есть идеи, что не так? Я безуспешно пробовал гугл.


person Chokoladekiks    schedule 27.09.2018    source источник


Ответы (11)


Правило большого пальца

Частая причина сбоя браузеров при запуске - запуск браузеров, инициированных WebDriver, от имени пользователя root (administrator) в Linux. Хотя эту проблему можно обойти, передав флаг --no-sandbox при создании сеанса WebDriver, такая конфигурация не поддерживается и настоятельно не рекомендуется. Вместо этого вам необходимо настроить среду для запуска браузера от имени обычного пользователя.


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

selenium.common.exceptions.WebDriverException: Message: invalid argument: can't kill an exited process

... означает, что GeckoDriver не смог инициировать / создать новый сеанс веб-просмотра, то есть сеанс браузера Firefox.

Основная проблема заключается в несовместимости между версиями используемых вами двоичных файлов:

  • У вас версия GeckoDriver 0.22.0.

  • Примечания к выпуску GeckoDriver v0.21.0 (2018-06-15) четко упоминают следующее:

  • # P7 #
  • # P8 #
  • У вас версия Firefox 52.9.0.

Таким образом, существует явное несоответствие между GeckoDriver v0.22.0 и Firefox Browser v57.


Решение

  • Обновите GeckoDriver до GeckoDriver v0.22.0 уровень.
  • GeckoDriver находится в указанном месте.
  • GeckoDriver имеет разрешение на выполнение для пользователей без полномочий root.
  • Обновите версию Firefox до уровня Firefox v62.0.2.
  • Очистите свою рабочую область проекта с помощью IDE и перестройте свой проект только с использованием необходимых зависимостей.
  • Если ваша базовая версия веб-клиента слишком старая, удалите ее с помощью Revo Деинсталлятор и установите последнюю версию GA и выпущенную версию веб-клиента.
  • Выполните Selenium Test как пользователь без полномочий root.

GeckoDriver, Selenium и браузер Firefox таблица совместимости

geckodriver_versions

person DebanjanB    schedule 27.09.2018
comment
Запуск от имени root, я не думал, что это может быть проблемой. Это было, спасибо. Когда я настраивал пользовательские возможности, ошибка была другой, хотя и с той же основной причиной. Вставить сюда для всех, кто ищет: Unable to find a matching set of capabilities (Selenium::WebDriver::Error::SessionNotCreatedError) - person akostadinov; 29.06.2019
comment
Я обновил все до последней версии, geckodriver находится в правильном месте на моем компьютере (работает ubuntu 19.04), и я все еще получаю то же сообщение об ошибке, что и в исходном вопросе. Не уверен, что делать сейчас - person Ryan Farrell; 07.01.2020
comment
@DebanjanB В среде роботов. Установлены python 3.6.9, Firefox 77.0.1 и geckodriver 0.26.0 в ubuntu 18.04, появляется ошибка WebDriverException: Message: invalid argument: can't kill an exited process. Не могли бы вы помочь? - person Manish Kumar; 05.06.2020
comment
Я случайно сталкиваюсь с этой ошибкой при запуске Firefox на автономном сервере Selenium. Похоже, что перезапуск сервера селена разрешается (MacOS) - person Conrad B; 28.10.2020
comment
Смена владельца процесса у меня сработала: я перешел из кода Visual Studio во встроенный терминал ОС. Хотя я не могу определить владельца процесса в своей системе Linux, я решил проблему, используя вызов метода WebDriver driver = webdriver.Firefox(firefox_binary='/path/to/firefox'). У меня было несколько исключений изнутри VSC (в зависимости от того, какие уловки я пробовал, запуск скрипта либо с терминала $ python mytest.py, либо в режиме отладки из редактора. - person Morten Engelsmann; 30.10.2020
comment
Одна из моих проблем заключалась в том, что ESR-версия Firefox была включен в мой дистрибутив, и это дало мне проблемы. Таким образом, я загрузил и разархивировал версию, отличную от ESR, и мне пришлось использовать двойную установку Firefox. - person Morten Engelsmann; 30.10.2020

Если вы используете Firefox в системе без дисплея, убедитесь, что вы используете безголовый режим.

from selenium import webdriver
from selenium.webdriver.firefox.options import Options

options = Options()
options.headless = True
driver = webdriver.Firefox(options=options)

Также убедитесь, что у вас есть совместимые версии Firefox, Selenium и Geckodriver: https://firefox-source-docs.mozilla.org/testing/geckodriver/Support.html

person NFern    schedule 07.02.2019
comment
спасибо, это сработало для меня, когда возникла аналогичная проблема, на сервере под управлением ubuntu 16.04 - person tyrex; 25.02.2019
comment
У меня это тоже сработало. Важно отметить, что в системе должен быть установлен сам firefox. По крайней мере, для меня этот код выше работал только после установки firefox. - person Nicolás Ozimica; 07.03.2019
comment
Я использую сетку docker selenium с изображением: selenium / node-firefox-debug: 3.141.59. Это показывает, что у него есть совместимые версии. Но все же я сталкиваюсь с вышеуказанными ошибками. - person gaurav kumar; 29.01.2020

Я был в безголовом режиме, использовал правильные версии всего, и единственный способ выйти из этого сообщения об ошибке - это не выполнять тест на селен от имени пользователя root.

person Rogelio Triviño    schedule 11.04.2019
comment
Просто чтобы дать людям больше информации на случай, если это поможет: я я запускаю процесс как root, и он работает. Моя проблема заключалась в том, что мне нужно было работать с безголовой опцией. - person Eric Ihli; 17.12.2019
comment
сэр, вы только что спасли мне жизнь! - person toing_toing; 06.03.2020

«Да» установлен флажок «Начать Xvfb» до того, как сборка сможет решить проблему, но если у вас есть работа, такая как конвейер или многоотраслевой конвейер, этот параметр не отображается. В узле вашей сетки Selenium, в которую вы отправляетесь, чтобы выполнить нужный вам тест:

1- Установите Xvfb: apt install xvfb

2- Выполнить Xvfb: /usr/bin/Xvfb :99 -ac -screen 0 1024x768x8 & export DISPLAY=":99"

3- Перезапустите свой узел, например: java -jar selenium.jar -role node -hub http://#.#.#.#:4444/grid/register -capabilities browserName=firefox,plataform=linux -host #.#.#.# -port 1991

person Miguel Conde    schedule 07.11.2018
comment
xvfb не требуется, так как браузер работает в автономном режиме. - person carlin.scott; 17.11.2018
comment
как перезапустить (убить фактическое) и запустить / usr / bin / Xvfb? - person Matrix; 15.08.2019
comment
Это должен быть главный ответ - Firefox не будет работать за пределами сеанса X, поэтому, если кто-то работает через докер или ssh, обязательно запустите Xvfb для его эмуляции. - person the.Legend; 15.03.2020

Это решение сработало для меня

from selenium import webdriver
from selenium.webdriver.firefox.options import Options

options = Options()
options.headless = True
driver = webdriver.Firefox(options=options)
person Anar Salimkhanov    schedule 11.03.2020
comment
Если вы получаете ошибку WebDriverException, и у вас самые последние версии firefox и geckdriver, и вы используете безголовый компьютер, вам нужно установить headless = True, как упоминал здесь Анар. - person iarp; 03.04.2020

Поскольку у этой ошибки может быть много различных основных причин, лучше всего найти основную причину, установив селен для использования ведения журнала уровня отладки. В моем случае для Ruby с капибарой мне нужно было установить: Selenium::WebDriver.logger.level = :debug. И вуаля, работая с той же спецификацией, я мог видеть в журналах, что зависимость отсутствовала, в моем случае:

libdbus-glib-1.so.2: cannot open shared object file: No such file or directory
Couldn't load XPCOM.

После установки все заработало.

person Nico    schedule 01.06.2020

Я использовал:

  • Код VS
  • Linunx / Ubuntu: 18.10
  • Nightwatch.js

Моя проблема заключалась в том, что я пытался запустить Nightwatch (который автоматически запускает GeckoDriver) из терминала VS Code.

person flow3r    schedule 19.06.2019
comment
Запуск его с терминала (вне VSCode) также решил эту проблему для меня, запустив Firefox 68.0.1., Selenium 3.141.0 и geckodriver v0.24.0. Эта настройка совместима, а затем фактически работает после вызова это со штатного терминала (даже без headless). - person Alex Povel; 31.07.2019

У меня была такая же проблема, и я понял, что настоящая проблема заключалась в том, что некоторые зависимости firefox не были установлены внутри контейнера докеров, в котором я тестировал.

Попробуйте запустить firefox и проверьте, не возвращает ли он ошибку.

person Carmon    schedule 19.02.2020

Как заявили Нико и Джей, вам необходимо проверить журналы, чтобы увидеть подробную информацию об ошибке. Поскольку вы можете использовать разные системы, вы можете указать путь, по которому хранится журнал (например, /tmp/geckodriver.log).

from selenium import webdriver
firefox_options = webdriver.firefox.webdriver.Options()
driver = webdriver.Firefox(log_path="/tmp/geckodriver.log", 
                           options=firefox_options)

В моем конкретном случае в журнале было сказано:

Error: no DISPLAY environment variable specified

Это было решено добавлением в опциях безголового режима перед запуском драйвера. Со строкой:

firefox_options.set_headless()
person MarcosBernal    schedule 18.10.2020
comment
Это точный шаг по устранению неполадок, который я предпринял для решения проблемы. Error: cannot open display: :0.0 - это сообщение, которое я видел в журналах. Переменная среды DISPLAY в моем процессе Python пыталась использовать отображение :0.0, которого не существовало. Исправлением было изменение этой переменной env на правильное отображение. - person Eric Ihli; 07.01.2021

Я смог исправить это, запустив тесты с Xvfb. Я запускал их на удаленном сервере.

Я использовал Jenkins, поэтому я установил флажок, который выглядел так:

Кредит на https://www.obeythetestinggoat.com/book/chapter_CI.html

Кредит для https://www.obeythetestinggoat.com/book/chapter_CI.html

person Daniel Butler    schedule 04.10.2018

в моем случае я запускал тестовые примеры как root

geckodriver.log

1576076416677   mozrunner::runner       INFO    Running command: "/usr/bin/firefox" "-marionette" "-foreground" "-no-remote" "-profile" "/tmp/rust_mozprofilenCbl2e"
Running Firefox as root in a regular user's session is not supported.  ($HOME is /home/seluser which is owned by seluser.)
1576077143004   mozrunner::runner       INFO    Running command: "/usr/bin/firefox" "-marionette" "-foreground" "-no-remote" "-profile" "/tmp/rust_mozprofile7wpSQ7"
1576077143689   [email protected]     WARN    Loading extension '[email protected]': Reading manifest: Invalid extension permission: mozillaAddons
1576077143689   [email protected]     WARN    Loading extension '[email protected]': Reading manifest: Invalid extension permission: telemetry
1576077143689   [email protected]     WARN    Loading extension '[email protected]': Reading manifest: Invalid extension permission: resource://pdf.js/
1576077143689   [email protected]     WARN    Loading extension '[email protected]': Reading manifest: Invalid extension permission: about:reader*
1576077145372   Marionette      INFO    Listening on port 35571
1576077145423   Marionette      WARN    TLS certificate errors will be ignored for this session
1576077200207   mozrunner::runner       INFO    Running command: "/usr/bin/firefox" "-marionette" "-foreground" "-no-remote" "-profile" "/tmp/rust_mozprofilenhoHlr"
Running Firefox as root in a regular user's session is not supported.  ($HOME is /home/seluser which is owned by seluser.)

я мог бы обойтись

cd /home
chown -R  root seluser

Я не сказал, что это правильно, но моя работа была сделана

person jay fegade    schedule 11.12.2019