selenium.common.exceptions.WebDriverException: Message: 'Can not connect to GhostDriver'
Installing nodejs-legacy package on Linux Mint 14 solved this for me.
sudo apt-get install nodejs-legacy
I'm trying to run
PhantomJS from within
selenium.webdriver on a Centos server. PhantomJS is in the path and is running properly from terminal. However in the script it appears to be launched, but afterwards cannot be reached on the specified port (I tried 2 different opened ports from my provider 29842 and 60099, they both are not working and neither launching it without a specified port).
The error happens here in
try: socket_ = socket.socket(socket.AF_INET, socket.SOCK_STREAM) socket_.settimeout(1) socket_.connect(("localhost", port)) socket_.close() return True except socket.error: return False
This is from my script (I tried without any parameters as well as writing the complete path to the executable and neither worked):
And this the script that initialises the webdriver from
selenium.webdriver.phantomjs.service. I checked and
subprocess.Popen actually lauches phantomjs, the error happens in the while loop:
try: self.process = subprocess.Popen(self.service_args, stdout=self._log, stderr=self._log) except Exception as e: raise WebDriverException("Unable to start phantomjs with ghostdriver.", e) count = 0 while not utils.is_connectable(self.port): print utils.is_connectable(self.port) count += 1 time.sleep(1) if count == 30: raise WebDriverException("Can not connect to GhostDriver")
All the packages are the latest version: python 2.7, selenium 2 and phantomjs 1.9 binary with ghostdriver integrated. I made the same script work properly on my Ubuntu local machine, doing exactly the same things I did on the server. What is different on the server?
How to install PhantomJS for use with Python Selenium on the Raspberry Pi?
Ok I will start with the solution, there is a version compiled for arm here phantomjs-linux-armv6l, on the pi run the following commands:
$ cd /tmp $ wget https://github.com/aeberhardo/phantomjs-linux-armv6l/archive/master.zip $ unzip master.zip $ cd phantomjs-linux-armv6l-master $ bunzip2 *.bz2 && tar xf *.tar
sudo cp phantomjs-1.9.0-linux-armv6l/bin/phantomjs /usr/bin
So phantomjs will be on your path.
pi@raspberrypi ~ $ phantomjs --version 1.9.0 pi@raspberrypi ~ $ phantomjs phantomjs>
Now we have that done, time to test:
pi@raspberrypi ~ $ cat test.py #!/usr/bin/python from selenium import webdriver driver = webdriver.PhantomJS() driver.get('http://.com/questions/36314771/how-to-install-phantomjs-for-use-with-python-selenium-on-the-raspberry-pi/36388824#36388824') a = driver.find_element_by_xpath('//*[@id="question-header"]/h1/a') print(a.text) print(driver) pi@raspberrypi ~ $ python test.py How to install PhantomJS for use with Python Selenium on the Raspberry Pi? <selenium.webdriver.phantomjs.webdriver.WebDriver (session="b184e110-f9c4-11e5-aede-7f5c42f062d7")>
From the faq. Starting with PhantomJS 1.5, it is pure headless and there is no need to run X11/Xvfb anymore..
I tried using xvfb-run and exporting the display, using a shell script in init.d to start xvfb, I got a little further being able to run iceweasel from bash headless no problem but still no cigar when it came to phantomjs and selenium. I think it may just come down to an incompatibility between selenium and the version of phantomjs, regardless having 1.9.0 and real headless browsing is a lot more desirable.
I was in the middle of setting up a toolchain and was going to try to compile myself when I found the link above, for anyone interested in cross compiling, crosstools-ng makes life a lot easier.
I am running an arm6, there is also a compiled version for arm7 using 2.0.0, the dependencies are:
sudo apt-get install flex bison gperf ruby perl libsqlite3-dev libfontconfig1-dev libicu-dev libfreetype6 libssl-dev libpng-dev libjpeg-dev python libX11-dev libxext-dev
The install procedure, I have extracted the binary to dropbox:
wget https://www.dropbox.com/s/epj1rji9d239dco/phantomjs chmod +x phantomjs sudo cp phantomjs /usr/bin
The original github link is phantomjs-2.0.0-armv7