何時間も無駄な検索をした後、ここに投稿します。 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();
}
})
ありがとう=)
クイックスタート チュートリアル(コード評価セクション)に重要な情報があります:
WebページのコンテキストでJavaScriptまたはCoffeeScriptコードを評価するには、evaluate()関数を使用します。実行は「サンドボックス化」されており、コードが独自のページコンテキスト外のJavaScriptオブジェクトや変数にアクセスする方法はありません。オブジェクトはevaluate()から返すことができますが、単純なオブジェクトに限定されており、関数やクロージャを含めることはできません。
したがって、コードの問題は2つあります。
elem
はWebページのコンテキスト外で初期化され、2番目のevaluate
からは到達できません。これは、主に実際の「投獄された」実行モデルに合うようにコードを適切に設計することによって、簡単に解決できる問題です。関連するすべてのドキュメントを注意深く読み、たくさんの 含まれている例 を調べてください。