8

Ho il seguente problemaErrore durante la registrazione del nodo PhantomJS in selenio Griglia

  • ho lanciato con successo hub Selenio Griglia con:

java -jar selenium-server-standalone-2.53.0.jar -role hub

  • Dopo di che ho cercato di lanciare nodo PhantomJS con:

phantomjs --webdriver=8090 --webdriver-selenium-grid-hub=http://localhost:4444


ma ottenuto l'errore:

[INFO - 2016-03-25T13:56:28.397Z] GhostDriver - Main - running on port 8090 [INFO - 2016-03-25T13:56:28.397Z] GhostDriver - Main - registering to Selenium HUB ' http://localhost:4444 ' version: using '127.0.0.1:8090' with org.openqa.grid.selenium.proxy.DefaultRemoteProxy as remote proxy. [ERROR - 2016-03-25T13:56:28.400Z] GhostDriver - main.fail - {"line":97,"sourceURL":"phantomjs://platform/hub_register.js","stack":"[email protected]://platform/hub_register.js:97:79\nglobal [email protected]://code/main.js:78:37"}

phantomjs://platform/console++.js:263 in error

nodo standard funziona bene, ma PhantomJS failes. Cosa sto facendo di sbagliato?

risposta

5

soluzione *** d/l fonte da phantomjs http://phantomjs.org/build.html e modificare hub_register.js in src/ghostdriver commento su linee come mostrato di seguito:

// var ghostdriver = ghostdriver || {};

return { 
    capabilities: [{ 
     browserName: "phantomjs", 
     version: version, 
     //platform: ghostdriver.system.os.name + '-' + ghostdriver.system.os.version + '-' + ghostdriver.system.os.architecture, 
     maxInstances: 1, 
     seleniumProtocol: "WebDriver" 

compilare e tutto funziona!

scorciatoia: https://github.com/darwin10/phantomjs

Fonte originale: https://github.com/detro/ghostdriver/issues/394

+0

La ringrazio molto) .zip scaricato da [qui]: https://github.com/darwin10/phantomjs Lanciato 'build.sh' nodo PhantomJS Lanciato Tutto funziona bene per me) Una cosa - non so se è abbastanza stabile (la versione fantasma è la versione 2.0.1), ma è un'altra domanda. – uCodista

0

Ho avuto lo stesso problema. Invece di scaricare il codice sorgente e la compilazione, come suggerito da Ojen G., ho utilizzato uno fix posted by neuro-sys per apportare la modifica all'eseguibile. Il mio sistema operativo è Ubuntu 16.04.

  1. Scarica il programma replacestrings.c.

    wget https://gist.githubusercontent.com/neuro-sys/3bf00b6cf28a93e07e44/raw/52f715fd49fbd271a9450b61d5cd3cf29907a5a0/replacestring.c 
    
  2. programma Compile

    gcc replacestring.c -o replacestring 
    
  3. Sostituire Java fonte stringa di codice in binario, creando binario fisso.

    ./replacestring "$(strings /usr/lib/phantomjs/phantomjs | grep "platform: ghostdriver")" " " </usr/lib/phantomjs/phantomjs> f_phantomjs 
    
  4. Rende eseguibile binario; e mettere in sostituzione

    chmod +x f_phantomjs 
    sudo chown root:root f_phantomjs 
    sudo mv f_phantomjs /usr/lib/phantomjs 
    cd /usr/lib/phantomjs 
    sudo echo "Fixed error in phantomjs; old file in e_phantomjs" > README.txt 
    sudo mv phantomjs e_phantomjs 
    sudo ln f_phantomjs phantomjs 
    

Dopo questi passaggi, funziona benissimo (hub selenio già in esecuzione):

phantomjs --webdriver=8080 --webdriver-selenium-grid-hub=http://localhost:4444 
[INFO - 2016-05-07T16:33:35.534Z] GhostDriver - Main - running on port 8080 
[INFO - 2016-05-07T16:33:35.534Z] GhostDriver - Main - registering to Selenium HUB 'http://localhost:4444' version: using '127.0.0.1:8080' with org.openqa.grid.selenium.proxy.DefaultRemoteProxy as remote proxy. 
[INFO - 2016-05-07T16:33:35.604Z] HUB Register - register - Registered with grid hub: http://localhost:4444/ (ok) 
+0

il replacestring non ha funzionato, ma la modifica del file binario ha fatto il trucco – MrE

0

provare a sostituire localhost con IP locale

phantomjs --webdriver=8090 --webdriver-selenium-grid-hub=http://localhost:4444

con

phantomjs --webdriver=8090 --webdriver-selenium-grid-hub=http://127.0.0.1:4444

0

A seguito di questa sostanza: https://gist.github.com/neuro-sys/41e368839a9b20dafb34

Modifica del binario di mettere un // davanti alla riga incriminata ha lavorato per me, ma non la stringa sostituire cosa.

-> Seguire la parte sull'utilizzo hdex

Cerca platform:

e sostituirlo con //atform:

sostituendo le lettere pl con // (2F2F in esadecimale)

4

Per chiunque ancora guardando, ci sono build linux e windows x64 disponibili qui con la soluzione alternativa di v2.1.1 (Windows Build è attivo una richiesta di pull - l'editor esadecimale soluzione non funzionerà per le finestre cos i .exe sono compressi)

https://github.com/mrorgues/PhantomJSCustomEdition

1

È possibile sostituire parte del file binario con il comando dd.
che sto andando a sostituire platform: con //atform::

$ cp /usr/local/bin/phantomjs . 

$ ./phantomjs --version 
2.1.1 

$ xxd -c 16 phantomjs | grep -C 2 'platform:' 
01c6aaa0: 7273 696f 6e3a 2076 6572 7369 6f6e 2c0a rsion: version,. 
01c6aab0: 2020 2020 2020 2020 2020 2020 2020 2020 
01c6aac0: 706c 6174 666f 726d 3a20 6768 6f73 7464 platform: ghostd 
01c6aad0: 7269 7665 722e 7379 7374 656d 2e6f 732e river.system.os. 
01c6aae0: 6e61 6d65 202b 2027 2d27 202b 2067 686f name + '-' + gho 

$ printf '//' | dd of=phantomjs conv=notrunc bs=1 seek=$((0x01c6aac0+0)) 
2+0 records in 
2+0 records out 
2 bytes transferred in 0.000117 secs (17085 bytes/sec) 

$ xxd phantomjs | grep 'atform:' 
01c6aac0: 2f2f 6174 666f 726d 3a20 6768 6f73 7464 //atform: ghostd 

$ ./phantomjs --version 
2.1.1 

$ mv phantomjs /usr/local/bin/ 

Se non è possibile individuare la stringa, cercare di aumentare ottetti per linea (xxd -c 256).

0

Ho passato 2 mesi a provare a risolvere questo problema, provando tutto il possibile, il mio problema principale era che molte soluzioni non si collegavano alla rete e quelle che si trovano nei contenitori docker cosa può solo connettersi a una rete locale ospitato sullo stesso host Docker.

Quindi ... alla fine ho costruito la mia propria soluzione che funziona: https://github.com/madhavajay/selenium-node-phantomjs

immagine Docker è madhavajay/selenio-node-phantomjs

utilizza PhantomJS 2.1.1 generazione personalizzata con fisso Ghostdriver e poi le mie modifiche all'ultima versione di Ghostdriver per consentire un parametro personalizzato --remoteHost tutto racchiuso in un contenitore Docker con variabili d'ambiente configurabili.

Spero che questo salvi qualcuno per le settimane perse che ho sofferto.

Problemi correlati