Selenium与selenium.common.exceptions.WebDriverException一起崩溃:消息:newSession

时间:2018-10-25 20:38:27

标签: python selenium ubuntu selenium-webdriver geckodriver

操作系统:Ubuntu 16.04.3 LTS(GNU / Linux 4.4.0-1066-aws x86_64)

硒版本:selenium == 3.6.0

浏览器:Mozilla Firefox 63.0

Geckodriver版本:geckodriver-v0.19.0-linux64

预期行为-

创建一个新的firefox浏览器并执行一些步骤-解析网站。

实际行为-

使用日志崩溃:-

    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

3 个答案:

答案 0 :(得分:11)

我通过更新硒python软件包并使用最新的geckodriver解决了该问题。

感谢@fzbd的所有帮助。

答案 1 :(得分:7)

感谢@skyfail。 你的回答帮助了我。 执行以下顺序并解决了该问题。

  1. 要升级硒,请运行:sudo pip3 install selenium --upgrade

  2. 要升级geckodriver,请按照this

  3. 的步骤1-3进行操作。
  4. sudo mv geckodriver /usr/local/bin/geckodriver,/ usr / local / bin通常在您的PATH中,因此无需对其进行编辑。

答案 2 :(得分:0)

您的日志中的以下行:

  

1540501901605 geckodriver错误正在使用地址(操作系统错误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

根据issue about geckodriver port logging,您可以让操作系统分配一个空闲端口:

geckodriver --port 0

如果所有方法都无法解决,则您的geckodriver版本与硒版本可能不兼容,因为日志中的此错误似乎表明:

  

geckodriver :: marionette跟踪<-[1,1,{“ error”:“未知命令”,“消息”:“ newSession”,“ stacktrace”:“ WebDriverError @ chrome:// marionette / content / error。 js:178:5

我正在使用以下版本:

  • firefox 62.0.3
  • geckodriver 0.23.0
  • 硒3.14.1