2016-04-26 20 views
0

数日前にNodeJSでPhantomJSを使用し始めました。 私はこのライブラリを使ってそれを統合しています:https://github.com/amir20/phantomjs-node。 すべてが完璧に機能しましたが、ページロード後(コールバックから)にアプリケーションの流れを継続しようとしたときに何か問題が発生しました。PhantomJS onLoadFinishedコールバック関数を呼び出す

function doStuff() 
{ 
    page.open("http://stackoverflow.com/") 
     .then(function (status) { 
       function responseHandler(status) { 
        console.log("loaded"); 
        iAmHere(); 
        console.log("Here Again"); 
       } 

       function loginAction() { 
        var btn = document.querySelector("#button"); 
        btn.click(); 
       } 

       page.property('onLoadFinished', responseHandler); 
       page.evaluate(loginAction) 
      } 
    ); 
} 


function iAmHere(){ 
    console.log("iAmHere"); 
} 

#button要素はいくつかのページのロードをトリガーする、するResponseHandler関数が呼び出され、出力は次のとおりです。

情報:

をロードしiAmHereが呼び出されません機能コールに続くログをすべて削除します。 どうしたのですか?

ありがとうございます!

答えて

3

iAmHere()がNode.js.をあなたが提供する機能、responseHandlerが、実際にはJavaScriptエンジンPhantomJSによって実行されているので、onLoadFinishedイベントが発生しているときに呼び出され、いないされていないことを理由

したがって、Node.jsスクリプト内で定義したiAmHere()関数にはアクセスできません。ページは次のように読み込みが完了したとき

あなたは、代わりに、通知を受けることができます

var phantom = require('phantom'); 

var sitepage = null; 
var phInstance = null; 
phantom.create() 
    .then(instance => { 
     phInstance = instance; 
     return instance.createPage(); 
    }) 
    .then(page => { 
     sitepage = page; 
     return page.open('https://stackoverflow.com/'); 
    }) 
    .then(status => { 
     console.log(status); 

     // Page loaded, do something with it 

     return sitepage.property('content'); 
    }) 
    .then(content => { 
     console.log(content); 
     sitepage.close(); 
     phInstance.exit(); 
    }) 
    .catch(error => { 
     console.log(error); 
     phInstance.exit(); 
    }); 
+0

感謝!私のために働いた – maryum375

関連する問題