2013-03-08 35 views
11

Inserisco qui dopo molte ore di ricerca infruttuosa. PhantomJS non mi permette di usare una variabile come nel codice qui sotto, con il messaggio di errore durante l'esecuzione del mio script "Can not find variable".Impossibile trovare la variabile - PhantomJS

Hai qualche idea di dove possa essere il mio problema?

page.open(myurl, function (status) { 

    if (status == 'success') { 

     page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js", function() { 

      elem = page.evaluate(function() { 

       /* Select one element with jQuery */ 
       myElem = $('body'); 
       return myElem; 

      }) 

      var elemHtml = page.evaluate(function() { return $(elem).html(); }); 
      console.log(elemHtml); 

     }) 

     phantom.exit();  

    } 

}) 

Grazie =)

+0

Dove è definito 'myElem'? –

+0

Ho aggiornato il mio codice per mostrarti dove si definisce myElem :) – Antoine

risposta

19

V'è un pezzo importante di informazioni nel Quick Start tutorial (nella sua sezione codice di valutazione):

Per valutare JavaScript o CoffeeScript codice nel contesto della pagina Web, utilizzare la funzione evaluate(). L'esecuzione è "sandboxed", non è possibile per il codice accedere a qualsiasi oggetto e variabile JavaScript al di fuori del proprio contesto di pagina. Un oggetto può essere restituito da evaluate(), tuttavia è limitato a oggetti semplici e non può contenere funzioni o chiusure.

Il problema con il vostro codice è quindi duplice:

  1. variabile elem viene inizializzata al di fuori del contesto della pagina web, non è raggiungibile dalla seconda evaluate.
  2. Si restituisce un oggetto non semplice, ovvero un elemento DOM.

Questo è un problema facile da risolvere, principalmente progettando correttamente il codice per adattarlo all'effettivo modello di esecuzione "incarcerato". Si prega di leggere attentamente tutta la documentazione pertinente ed esplorare tonnellate di included examples.

+2

bel lavoro! è buffo che tu avessi l'unica risposta e il tuo cognome capita "Guidance" – pythonian29033

+1

Non sono ancora sicuro di come ottenerlo. Ho un caso per accedere alla variabile nella pagina.valori(). Voglio trovare l'elemento DOM basato su String passato a evaluate(). Puoi per favore mostrarmi/indicarmi il codice? – rohit12sh

+1

"Leggere attentamente tutta la documentazione pertinente (...)" - eh? per esempio. "Non ho intenzione di dirti ..." –

Problemi correlati