python - selenium.common.exceptions.WebDriverException: Mensaje: ''No se puede conectar a GhostDriver''
selenium-webdriver port (5)
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 asegurarse de que el ejecutable del 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
Estoy intentando ejecutar PhantomJS
desde dentro de selenium.webdriver
en un servidor Centos. PhantomJS está en la ruta y se ejecuta correctamente desde la terminal. Sin embargo, en el script parece que se lanzó, pero luego no se puede alcanzar en el puerto especificado (probé 2 puertos abiertos diferentes de mi proveedor 29842 y 60099, ambos no están funcionando 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 webdriver de selenium.webdriver.phantomjs.service
. Comprobé y subprocess.Popen
Popen en realidad ejecuta phantomjs, el error ocurre en el ciclo 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 la última versión: python 2.7, selenium 2 y phantomjs 1.9 binary con ghostdriver integrado. Hice que el mismo script funcione correctamente en mi máquina local Ubuntu, haciendo exactamente las mismas cosas que hice en el servidor. ¿Qué es diferente en el servidor?
Instalando nodejs-legacy package 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á WebDriverException("Can not connect to GhostDriver")
.
Arreglar:
- Abra un puerto.
sudo iptables -A INPUT -s 127.0.0.1 -p tcp --dport 65000 -j ACCEPT
- Cree un controlador PhantomJS que use ese puerto
driver = webdriver.PhantomJS(executable_path=''/usr/local/bin/phantomjs'', port=65000)
Tuve este problema y descubrí qué lo estaba causando. En otro tutorial sobre desarrollo de aplicaciones de Facebook, me dijeron que ingresara a / etc / hosts y lo cambiara de este-
127.0.0.1 localhost
a esto-
127.0.0.1 test1.com
y guarda el archivo. A propósito, PhantomJS () ya no funcionaba después de eso. Acabo de regresar al archivo / etc / hosts y lo cambié a localhost
127.0.0.1 localhost
y funciona de nuevo
Estoy probando una aplicación python / django usando selenio con phantomjs. Todo funcionó bien durante la primera (y, a veces, la segunda prueba), pero una vez que se ejecutó la siguiente prueba, el selenio imprimió exactamente el mismo mensaje de error.
Además, si ejecuté phantomjs desde la consola después, 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.<anonymous> (/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 (localmente y globalmente) varias veces, pero el comportamiento persistió.
Finalmente, desinstalé phantomjs a través de npm y descargué el contenedor phantomjs de phantomjs.org . Ponlo dentro de / usr / local / bin (estoy en MacOS) y me deshice del error ya que!