selenium.common.exceptions.WebDriverException: Mensaje: ‘No se puede conectar a GhostDriver’

Estoy intentando ejecutar PhantomJS desde selenium.webdriver en un servidor Centos. PhantomJS está en la ruta y se ejecuta correctamente desde el terminal. Sin embargo, en el script parece que se inició, pero luego no se puede acceder a él en el puerto especificado (probé 2 puertos abiertos diferentes de mi proveedor 29842 y 60099, ambos no funcionan y ninguno lo inicia sin un puerto específico).

El error ocurre aquí en selenium.webdriver.common.utils :

 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 

Esto es de mi script (lo intenté sin ningún parámetro, además de escribir la ruta completa al ejecutable y ninguno de los dos funcionó):

 self.browser = webdriver.PhantomJS( port=29842, desired_capabilities={ 'javascriptEnabled': True, 'platform': 'windows', 'browserName': 'Mozilla', 'version': '5.0', 'phantomjs.page.settings.userAgent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36" } ) 

Y este es el script que inicializa el controlador web desde selenium.webdriver.phantomjs.service . Lo verifiqué y subprocess.Popen realidad, laopla phantomjs, el error ocurre en el bucle while:

  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") 

Todos los paquetes son de la última versión: Python 2.7, Selenium 2 y phantomjs 1.9 binarios con Ghostdriver integrado. Hice que el mismo script funcionara correctamente en mi máquina local de Ubuntu, haciendo exactamente lo mismo que hice en el servidor. ¿Qué es diferente en el servidor?

Tuve este problema en Ubuntu después de actualizar a una nueva versión. Reinstalé todos los paquetes nodejs y python, pero lo que creo que resolvió el problema fue asegurarme de que el ejecutable nodejs estuviera simbólicamente vinculado al node .

Estos son los comandos que utilicé:

 apt-get remove node nodejs apt-get install build-essential python-dev phantomjs npm nodejs ln -s /usr/bin/nodejs /usr/bin/node npm install -g phantomjs pip install selenium bson BeautifulSoup pymongo 

Instalar el paquete nodejs-legacy en Linux Mint 14 solucionó esto por mí.

 sudo apt-get install nodejs-legacy 

Para mí, este fue un problema de firewall. Phantom requiere un puerto abierto para conectarse. Si el puerto está bloqueado por un firewall, obtendrá la WebDriverException("Can not connect to GhostDriver") .

Arreglar:

  1. Abra un puerto.

sudo iptables -A INPUT -s 127.0.0.1 -p tcp --dport 65000 -j ACCEPT

  1. Cree un controlador PhantomJS que use ese puerto

driver = webdriver.PhantomJS(executable_path='/usr/local/bin/phantomjs', port=65000)

Tuve este problema y descubrí lo que lo estaba causando. En otro tutorial sobre el desarrollo de aplicaciones de Facebook, me dijeron que ingresara en nano a / etc / hosts y lo cambiara desde

 127.0.0.1 localhost 

a esto-

 127.0.0.1 test1.com 

y guarde el archivo. Por cierto, PhantomJS () ya no funcionaba después de eso. Acabo de volver al archivo / etc / hosts y lo cambié de nuevo a localhost

 127.0.0.1 localhost 

y funciona de nuevo.

Estoy probando una aplicación python / django usando selenium con phantomjs. Todo funcionó bien durante la primera (ya veces la segunda prueba), pero una vez que se ejecutó la siguiente prueba, el selenium imprimió exactamente el mismo mensaje de error.

Además, si ejecutaba phantomjs desde la consola posteriormente, recibí el siguiente error de nodo:

 child_process.js:1136 var err = this._handle.spawn(options); ^ TypeError: Bad argument at TypeError (native) at ChildProcess.spawn (child_process.js:1136:26) at exports.spawn (child_process.js:995:9) at Object. (/usr/local/lib/node_modules/phantomjs/bin/phantomjs:22:10) at Module._compile (module.js:460:26) at Object.Module._extensions..js (module.js:478:10) at Module.load (module.js:355:320) at Function.Module._load (module.js:310:12) at Function.Module.runMain (module.js:501:10) at startup (node.js:129:16) 

Intenté reinstalar phantomjs a través de npm (tanto local como globalmente) varias veces, pero el comportamiento persistió.

Finalmente, desinstalé phantomjs mediante npm y descargué el phantomjs bin de phantomjs.org en su lugar. ¡Ponga eso dentro de mi / usr / local / bin (estoy en MacOS) y eliminó el error desde entonces!