2016-04-26 10 views
0

なぜ「clickOldShares」でこの待機が機能していないのですか?私が評価を入れても、待つことはできません。私はそれが参考文献の細部であると信じていますが、私は今考えていません。 (casper.evaluate()の内部)ページコンテキストの内部CasperJSではどのように待って仕事をしますか?

function clickOldShares(){ 
    console.log("Waiting for Old Shares"); 
    element = document.querySelector("#pagelet_scrolling_pager > div > div > a"); 
    console.log("ELEMENT: " + element); 
    if(element){ 
    console.log('click and waiting...'); 
    element.click(); 
    console.log('clicked!'+ element); 

    //THIS WAIT IS NOT WORKING!!!! I DON'T KNOW WHY!!!! 
    this.wait(2000,clickOldShares); 

    } 
    else { 
    console.log("done!"); 
    } 
    return element; 
}; 

//Initializing Casper 
casper.start('https://www.facebook.com/', function() { 
    console.log("Entering on Facebook"); 
}); 

//Remote Message Handler - now I can see what happen inside evaluates 
casper.on('remote.message', function(msg) { 
    this.echo(msg); 
}) 


//Facebook login 
casper.then(function(){ 
    console.log("Login using username and password"); 
    this.evaluate(function(){ 
     document.getElementById("email").value = '[email protected]'; 
     document.getElementById("pass").value = 'somepass'; 
     document.getElementById("login_form").submit(); 
     }) 
    if(this.exists('#u_0_2 > div:nth-child(1) > div:nth-child(1) > div > a > span')){ 
     console.log("Login ok!"); 
    } 
    else { 
     console.log("Login not ok!"); 
     casper.exit(); 
    } 
}); 


    casper.thenOpen("https://www.facebook.com/shares/view?id=1063249230414580" ,function(){ 
    console.log("Open post with object-id"); 
    }); 


casper.thenClick("#pagelet_scrolling_pager > div > div > a",function(){ 
     this.wait(2000,function(){ this.evaluate(clickOldShares)}); 
}); 

答えて

0

thiswindowなくcasperを指します。ページコンテキスト内でcasperを使用することはできません。

function clickOldShares(){ 
    var elementAvailable = this.evaluate(function(){ 
     console.log("Waiting for Old Shares"); 
     element = document.querySelector("#pagelet_scrolling_pager > div > div > a"); 
     console.log("ELEMENT: " + element); 
     if(element){ 
     console.log('click and waiting...'); 
     element.click(); 
     console.log('clicked!'+ element); 
     } 
     return !!element; 
    }); 
    if (elementAvailable) { 
     this.wait(2000, clickOldShares); 
    } 
}; 

とこのようにそれを使用します:DOMノードが出て渡すことはできませんので、あなたはDOM要素が存在したことを表現のいくつかの種類が必要

casper.thenClick("#pagelet_scrolling_pager > div > div > a",function(){ 
    this.wait(2000, clickOldShares); 
}); 

をあなたの周りのものを移動する必要が

ページのコンテキストでこれはDOMノードを!elementでブール値に強制し、即座にそれを無効にして!!elementとし、elementが "真実"であるかどうかをチェックすることで簡単に達成できます。

+0

私はとても近かった!しかし、あなたのおかげで、私はもう少しJavaのスコープのゲームについて理解しています。どうもありがとうございます! 大量のデータがあるため、画像が正しく表示されません。しかし、私はgetHTMLを参照する必要があり、すべてがそこにあります! 私はあなたにビールを借りています! もう一度おねがいします! :D –

+0

「!!要素」はどうですか?私はjavascriptでこれを知らなかった。それについてのドキュメントはありますか?それについて言えば、私はあなたにJavascriptの記事の推薦を頼むことができますか? –

+0

[この記号はJavaScriptで何を意味していますか?](http://stackoverflow.com/q/9549780/1816580)参照のリンク[What is the !! (not not)JavaScriptのオペレータ?](http://stackoverflow.com/q/784929/1816580)。これは、DOMノードをページコンテキストから渡すことができないため、ここで必要です。この制限はPhantomJSの特異性であり、JavaScriptによるものではありません。 –

関連する問題