问题
OS: Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-1066-aws x86_64)
Selenium Version: selenium==3.6.0
Browser: Mozilla Firefox 63.0
Geckodriver version : geckodriver-v0.19.0-linux64
Expected Behavior -
Create a new firefox browser and do some steps - parsing the website.
Actual Behavior -
Crashing with a log :-
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
Has anyone faced this issue before and has a possible solution ?
UPDATE :
Ran the following command : geckodriver --log trace & curl -d '{}' 127.0.0.1:4444/session
Log :- https://pastebin.com/TirTNKrG
回答1:
I fixed the issue by updating the selenium python package and using the latest geckodriver.
Thanks @fzbd for all your help.
回答2:
Thanks @skyfail. Your answer helped me. The following sequence was performed and resolved the issue.
To upgrade selenium run:
sudo pip3 install selenium --upgrade
To upgrade geckodriver follow steps 1-3 from this
sudo mv geckodriver /usr/local/bin/geckodriver
, /usr/local/bin is usually in your PATH so no need to edit it.
回答3:
In your log is the following line:
1540501901605 geckodriver ERROR Address in use (os error 98)
Which indicates that the driver is trying to use a port which is already used by some other process. Since the log doesn't show which port it is, you can run the driver with strace
:
strace geckodriver 2>&1 | grep -iE 'bind|getsockname'
In my case I get these lines:
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
You can then check which process is using the port (for example):
netstat -tulpn | grep -i 4444
In my case returning:
tcp 0 0 127.0.0.1:4444 0.0.0.0:* LISTEN 31471/geckodriver
According to a issue about geckodriver port logging, you can let the os allocate a free port:
geckodriver --port 0
If all this doesn't work out, there may an incompatibility between your version of geckodriver and selenium, as this error in the log seems to suggest:
geckodriver::marionette TRACE <- [1,1,{"error":"unknown command","message":"newSession","stacktrace":"WebDriverError@chrome://marionette/content/error.js:178:5
I am using the following versions:
- firefox 62.0.3
- geckodriver 0.23.0
- selenium 3.14.1
来源:https://stackoverflow.com/questions/52997746/selenium-crashing-with-selenium-common-exceptions-webdriverexception-message-n