2016-11-27 7 views
0

私は、Phantomjsを使ってページのBase64スクリーンショットを作成しています。私は何かを持っている、私は本当に理解していない。ここに私のコードは次のとおりです。PhantomjsでwebPage.create()の結果を直接使用できないのはなぜですか?

var webPage = require('webpage'); 

var page = webPage.create(); 

page.open('http://example.com', function (status) { 
    var base64 = page.renderBase64('PNG'); 
    console.log(base64); 
    phantom.exit(); 
}); 

私は疑問に思う私はすぐに)(webPage.createの結果を使用することはできませんなぜですか?

instanseについてこのコードは終了しません:デフォルトでは

var webPage = require('webpage'); 

webPage.create().open('http://example.com', function (status) { 
    var base64 = page.renderBase64('PNG'); 
    console.log(base64); 
    phantom.exit(); 
}); 
+2

'page'変数が定義されていないため、コードは終了しません。 ** Igor **の答えは、コードを再び動作させる方法を説明しています。 – Annarfych

+0

@Annarfych私はそれが自己参照であることに気付かなかった – naneri

答えて

1

を、pageという名前のオブジェクトが存在しないので、あなたはそれを作成する必要があります。その後

var page = require('webpage').create({viewportSize:{width: 1600,height: 900}, 
settings:{userAgent:'Mozilla/5.0 (X11; Linux x86_64; rv:49.0) Gecko/20100101 Firefox/49.0', 
javascriptEnabled:'true', 
loadImages:'true' 
}}); 

を、たとえば、次のように使用できます。page.renderBase64('PNG');

require('webpage').create().open('http://example.com',function(status){ 
    var base64 = this.renderBase64('PNG');// You can use "this", instead of the object name. 
    console.log(base64); 
    phantom.exit(); 
}); 

、または同じ、しかしcreate()機能の追加設定と::ER this(現在のオブジェクトへの参照)という名前

var obj={viewportSize:{width: 1600,height: 900}, 
settings:{userAgent:'Mozilla/5.0 (X11; Linux x86_64; rv:49.0) Gecko/20100101 Firefox/49.0', 
javascriptEnabled:'true', 
loadImages:'true' 
}}// The additional settings for the create() function. 

require('webpage').create(obj).open('http://example.com',function(status){ 
    var base64 = this.renderBase64('PNG');// You can use "this", instead of the object name. 
    console.log(base64); 
    phantom.exit(); 
}); 
+0

なぜwebPage.create()はすぐにページを返さないのですか? – naneri

1

あなたはopen()ページに必要なだけであるためcreate()を呼び出すと、ページオブジェクトがインスタンス化されるので、ページが実際にロードされる前にいくつかのイベントハンドラを追加することができます。これらのコールバックを読み込んだ後に追加すると、コンテンツがあるため、その一部の目的が無効になります。例えばonLoadStartedのようなイベントです。

+0

しかし、私はそれを開きます、中間変数を作成しないでください。 – naneri

+0

JavaScriptエンジンは、 の 'webPage.create()'までのコードを実行すると、それ自身でJavaScriptエンジンが作成します。一般的に '.'で関数を連鎖させるときです。それは暗黙的です。 – Annarfych

関連する問題