Selenium 因 selenium.common.exceptions.WebDriverException 而崩溃:消息:newSession
Selenium crashing with selenium.common.exceptions.WebDriverException: Message: newSession
OS: Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-1066-aws x86_64)
硒版本:硒==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
在您的日志中有以下行:
1540501901605 geckodriver ERROR Address in use (os error 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,可以让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
我正在使用以下版本:
- 火狐 62.0.3
- 壁虎驱动程序 0.23.0
- 硒 3.14.1
我通过更新 selenium python 包并使用最新的 geckodriver 解决了这个问题。
感谢@fzbd 的帮助。
附加上下文 -
请参阅此处的兼容性图表 - https://firefox-source-docs.mozilla.org/testing/geckodriver/Support.html#supported-platforms
更新硒:
pip install -U selenium
update geckodriver(根据以上兼容性图表选择适合您需要的正确版本)
检查所有组件的版本 -
firefox -v
geckodriver -V
pip freeze | grep selenium
谢谢@skyfail。
你的回答对我有帮助。
执行了以下序列并解决了问题。
升级硒运行:sudo pip3 install selenium --upgrade
要升级 geckodriver,请按照 this
中的步骤 1-3 进行操作
sudo mv geckodriver /usr/local/bin/geckodriver
, /usr/local/bin 通常在您的 PATH 中,因此无需编辑它。
OS: Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-1066-aws x86_64)
硒版本:硒==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
在您的日志中有以下行:
1540501901605 geckodriver ERROR Address in use (os error 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,可以让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
我正在使用以下版本:
- 火狐 62.0.3
- 壁虎驱动程序 0.23.0
- 硒 3.14.1
我通过更新 selenium python 包并使用最新的 geckodriver 解决了这个问题。
感谢@fzbd 的帮助。
附加上下文 -
请参阅此处的兼容性图表 - https://firefox-source-docs.mozilla.org/testing/geckodriver/Support.html#supported-platforms
更新硒:
pip install -U selenium
update geckodriver(根据以上兼容性图表选择适合您需要的正确版本)
检查所有组件的版本 -
firefox -v
geckodriver -V
pip freeze | grep selenium
谢谢@skyfail。 你的回答对我有帮助。 执行了以下序列并解决了问题。
升级硒运行:
sudo pip3 install selenium --upgrade
要升级 geckodriver,请按照 this
中的步骤 1-3 进行操作
sudo mv geckodriver /usr/local/bin/geckodriver
, /usr/local/bin 通常在您的 PATH 中,因此无需编辑它。