web-dev-qa-db-fra.com

Selenium plante avec Selenium.common.exceptions.WebDriverException: Message: newSession

Système d'exploitation: Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-1066-aws x86_64)

Version de sélénium: sélénium == 3.6.0

Navigateur: Mozilla Firefox 63.0

Version de geckodriver: geckodriver-v0.19.0-linux64

Comportement attendu -

Créez un nouveau navigateur Firefox et effectuez certaines étapes - analyser le site Web.

Comportement réel -

Plantage avec un journal: -

    self.driver = webdriver.Firefox()
  File "/home/ubuntu/env/local/lib/python2.7/site-packages/Selenium/webdriver/firefox/webdriver.py", line 154, in __init__
    keep_alive=True)
  File "/home/ubuntu/env/local/lib/python2.7/site-packages/Selenium/webdriver/remote/webdriver.py", line 151, in __init__
    self.start_session(desired_capabilities, browser_profile)
  File "/home/ubuntu/env/local/lib/python2.7/site-packages/Selenium/webdriver/remote/webdriver.py", line 240, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/home/ubuntu/env/local/lib/python2.7/site-packages/Selenium/webdriver/remote/webdriver.py", line 308, in execute
    self.error_handler.check_response(response)
  File "/home/ubuntu/env/local/lib/python2.7/site-packages/Selenium/webdriver/remote/errorhandler.py", line 194, in check_response
    raise exception_class(message, screen, stacktrace)
Selenium.common.exceptions.WebDriverException: Message: newSession

Quelqu'un a-t-il déjà rencontré ce problème et a-t-il une solution possible?

MISE À JOUR: Exécutez la commande suivante: geckodriver --log trace & curl -d '{}' 127.0.0.1:4444/session

Journal: - https://Pastebin.com/TirTNKrG

9
skyfail

J'ai résolu le problème en mettant à jour le paquet Selenium python et en utilisant le dernier geckodriver.

Merci @fzbd pour toute votre aide.

13
skyfail

Merci @skyfail. Votre réponse m'a aidé. La séquence suivante a été effectuée et a résolu le problème.

  1. Pour mettre à niveau Selenium run: Sudo pip3 install Selenium --upgrade

  2. Pour mettre à niveau geckodriver, suivez les étapes 1 à 3 de this

  3. Sudo mv geckodriver /usr/local/bin/geckodriver,/usr/local/bin est généralement dans votre PATH donc pas besoin de le modifier.
8
rok

Dans votre journal se trouve la ligne suivante:

1540501901605 Geckodriver ERROR Adresse en cours d'utilisation (erreur OS 98)

Ce qui indique que le pilote essaie d'utiliser un port déjà utilisé par un autre processus. Comme le journal n'affiche pas de quel port il s'agit, vous pouvez exécuter le pilote avec strace:

strace geckodriver 2>&1 | grep -iE 'bind|getsockname'

Dans mon cas, je reçois ces lignes:

bind (3, {sa_family = AF_INET, sin_port = htons (4444), sin_addr = inet_addr ("127.0.0.1")}, 16) = 0

getsockname (3, {sa_family = AF_INET, sin_port = htons (4444), sin_addr = inet_addr ("127.0.0.1")}, [128-> 16]) = 0

Vous pouvez ensuite vérifier quel processus utilise le port (par exemple):

netstat -tulpn | grep -i 4444 

Dans mon cas, retour:

tcp 0 0 127.0.0.1:4444 0.0.0.0:* LISTEN 31471/geckodriver

Selon un problème concernant la journalisation du port geckodriver , vous pouvez laisser le système d'exploitation allouer un port libre:

geckodriver --port 0

Si tout cela ne fonctionne pas, il peut y avoir une incompatibilité entre votre version de geckodriver et Selenium, comme cette erreur dans le journal semble suggérer:

geckodriver :: marionette TRACE <- [1,1, {"error": "unknown command", "message": "newSession", "stacktrace": "WebDriverError @ chrome: //marionette/content/error.js: 178 : 5

J'utilise les versions suivantes:

  • firefox 62.0.3
  • geckodriver 0.23.0
  • Sélénium 3.14.1
0
fzbd