web-dev-qa-db-fra.com

WebDriverException: Message: argument non valide: impossible de tuer un processus abandonné avec GeckoDriver, Selenium et Python sur RaspberryPi3.

Serveur: Raspberry Pi 3
OS: Dietpi - version 159
Version Geckodriver: 0.22 pour le bras
Version de Firefox: 52.9.0
Version Python: 3.5
Sélénium version: 3.14.1 

Gecko est exécutable et se trouve dans/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')
...
...

Sortie:

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

Une idée de ce qui ne va pas? J'ai essayé google sans chance.

6
Chokoladekiks

Ce message d'erreur ...

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

... implique que GeckoDriver n’a pas pu lancer/créer une nouvelle session WebBrowsing, c’est-à-dire Navigateur Firefox.

Votre problème principal est le incompatibility entre la version des fichiers binaires que vous utilisez comme suit:

  • Votre version GeckoDriver est 0.22.0.
  • Les notes de publication de GeckoDriver v0.21.0 (2018-06-15) mentionnent clairement les éléments suivants:

    • Firefox 57 (et supérieur)

    • Sélénium 3.11 (et plus)

  • Votre version Firefox est 52.9.0.

Il y a donc un décalage évident entre GeckoDriver v0.22.0 et le navigateur Firefox v57

Solution

  • Mettez à niveau GeckoDriver vers GeckoDriver v0.22.0 level.
  • GeckoDriver est présent à l'emplacement spécifié.
  • GeckoDriver dispose d'une autorisation d'exécution pour les utilisateurs non root.
  • Mettez à niveau la version de Firefox vers les niveaux Firefox v62.0.2.
  • Nettoyer votre Espace de travail de projet par votre IDE et Reconstruire votre projet avec les dépendances requises uniquement.
  • Si votre version Web Client de base est trop ancienne, désinstallez-la via Revo Uninstaller et installez une version récente GA et publiée de Web Client.
  • Exécutez votre Test en tant qu’utilisateur non root.
9
DebanjanB

Si vous utilisez Firefox sur un système sans affichage, assurez-vous d'utiliser le mode sans tête.

from Selenium import webdriver
from Selenium.webdriver.firefox.options import Options

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

Vérifiez également que vous disposez de versions compatibles de Firefox, Selenium et Geckodriver: https://firefox-source-docs.mozilla.org/testing/geckodriver/geckodriver/Support.html

3
NFern

Oui cocher Démarrer Xvfb avant la compilation peut résoudre le problème, mais si vous avez un travail comme un pipeline ou un pipeline multibranche, cette option n'est pas visible. Dans le nœud de votre grille de sélénium que vous allez exécuter le test dont vous avez besoin:

1- Installez Xvfb: apt install xvfb

2- Exécuter Xvfb: /usr/bin/Xvfb :99 -ac -screen 0 1024x768x8 & export DISPLAY=":99"

3- Relancez votre noeud, par exemple: Java -jar Selenium.jar -role node -hub http://#.#.#.#:4444/grid/register -capabilities browserName=firefox,plataform=linux -Host #.#.#.# -port 1991

3
conde

J'ai pu résoudre ce problème en exécutant mes tests avec Xvfb. Je les exécutais sur un serveur distant.

J'utilisais Jenkins alors j'ai coché la case qui ressemblait à ceci:

 Credit to https://www.obeythetestinggoat.com/book/chapter_CI.html

Crédit à https://www.obeythetestinggoat.com/book/chapter_CI.html

0
Daniel Butler