2013-03-08 10 views
11

何時間も無駄な検索をした後、ここに投稿します。 PhantomJSでは、以下のコードのように変数を使用することはできません。スクリプトで「変数を見つけることができません」というエラーメッセージが表示されます。変数が見つからない - PhantomJS

あなたの問題はどこにありますか?

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();  

    } 

}) 

感謝=)

+0

「myElem」はどこに定義されていますか? –

+0

myElemが定義している場所を表示するためのコードを更新しました:) – Antoine

答えて

19

そのコード評価セクションでQuick Startチュートリアル()内の情報の重要な部分があります:

はコンテキストでJavaScriptやCoffeeScriptのコードを評価するためにWebページのevaluate()関数を使用してください。実行は「サンドボックス化」されているため、JavaScriptが独自のページコンテキスト外のJavaScriptオブジェクトや変数にアクセスする方法はありません。オブジェクトはevaluate()から返すことができますが、単純なオブジェクトに限られており、関数やクロージャを含めることはできません。

あなたのコードの問題は、このように二つです:

  1. 変数elemは、Webページのコンテキスト外で初期化され、それが第二evaluateから到達可能ではありません。
  2. 単純ではないオブジェクト、つまりDOM要素を返します。

これは、主に実際の「jailed」実行モデルに適合するようにコードを適切に設計することで解決するのは簡単な問題です。すべての関連文書をよく読んで、included examplesのトンを調べてください。

+2

nice job!あなたが唯一の答えを持っておかしく、あなたの姓が "ガイダンス"を意味するのは面白いです – pythonian29033

+1

私はそれを達成する方法がまだ分かりません。私はpage.evaluate()の変数にアクセスするケースがあります。 evaluate()に渡されたStringに基づいてDOM要素を探したいと思います。あなたは私を見せてください/私にコードを教えてもらえますか? – rohit12sh

+1

"すべての関連ドキュメント(...)をよく読んでください" - そうですか?例えば。 "私はあなたに言うつもりはない..." –

関連する問題