web-dev-qa-db-ja.com

変数が見つかりません-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();     

    }  

})

ありがとう=)

12
Antoine

クイックスタート チュートリアル(コード評価セクション)に重要な情報があります:

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

したがって、コードの問題は2つあります。

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

これは、主に実際の「投獄された」実行モデルに合うようにコードを適切に設計することによって、簡単に解決できる問題です。関連するすべてのドキュメントを注意深く読み、たくさんの 含まれている例 を調べてください。

19
Ariya Hidayat