web-dev-qa-db-ja.com

Selenium.common.exceptions.WebDriverExceptionでクラッシュするSelenium:メッセージ:newSession

OS:Ubuntu 16.04.3 LTS(GNU/Linux 4.4.0-1066-aws x86_64)

Seleniumバージョン:Selenium == 3.6.0

ブラウザー:Mozilla Firefox 63.0

Geckodriverバージョン:geckodriver-v0.19.0-linux64

予想される行動 -

新しいFirefoxブラウザーを作成し、いくつかの手順を実行します-Webサイトを解析します。

実際の動作-

ログでクラッシュ:-

    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

誰もが以前にこの問題に直面し、可能な解決策を持っていますか?

更新:次のコマンドを実行しました:geckodriver --log trace & curl -d '{}' 127.0.0.1:4444/session

ログ: https://Pastebin.com/TirTNKrG

9
skyfail

Selenium pythonパッケージを更新し、最新のgeckodriverを使用して問題を修正しました。

すべてのあなたの助けをありがとう@fzbd。

13
skyfail

ありがとう@skyfail。あなたの答えが助けになりました。次のシーケンスが実行され、問題が解決されました。

  1. Seleniumをアップグレードするには:Sudo pip3 install Selenium --upgrade

  2. Geckodriverをアップグレードするには、 this からステップ1-3を実行します

  3. Sudo mv geckodriver /usr/local/bin/geckodriver、/ usr/local/binは通常PATHにあるため、編集する必要はありません。
8
rok

ログには次の行があります。

1540501901605 geckodriverエラー使用中のアドレス(OSエラー98)

これは、ドライバーが他のプロセスで既に使用されているポートを使用しようとしていることを示します。ログにはポートが表示されないため、straceを使用してドライバーを実行できます。

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

私の場合、これらの行を取得します:

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

次に、ポートを使用しているプロセスを確認できます(たとえば)。

netstat -tulpn | grep -i 4444 

私の場合、戻る:

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

geckodriverポートロギングに関する問題 によると、OSに空きポートを割り当てることができます。

geckodriver --port 0

これがすべてうまくいかない場合、ログのこのエラーが示唆するように、geckodriverのバージョンとSeleniumの間に互換性がない可能性があります。

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

次のバージョンを使用しています。

  • firefox 62.0.3
  • geckodriver 0.23.0
  • セレン3.14.1
0
fzbd