2016-05-06 9 views
0

私は、評価機能の中にあるループの中で「クリック」した後に物事を扱うのに問題があります。私はそれを治療する別の方法を知らない。CasperJS - ループ内の「クリック」をどう扱うか?

'ル' のコード...

links = this.evaluate(function(){ 
     story_boxes = __utils__.getElementsByXPath('//div[@id="contentCol"]//div[@id="stream_pagelet"]/div[contains(@id,"topnews_main_stream")]/div/div//div[contains(@data-ft,"{")]'); 

     for(x=0;x<=story_boxes.length;x++){ 
     story_box = story_boxes[x]; 
     boxID = story_box.getAttribute('id'); 

     //Is this feed a sponsored? 
     sponsored = story_box.querySelector('a.uiStreamSponsoredLink'); 
     if(sponsored){ 
      console.log("SPONSORED? " + sponsored ); 
      try{ 
      elink = story_box.querySelector('div > div > div > div > div > div > a'); 
      } 
      catch(e){ 
      console.log("Ooops! An error occured, sorry! " + e); 
      } 

      if(elink){ 
      console.log("FOUND IT!"); 
      crap = setTimeout(function(){ 
       elink.click(); //where can I treat this? 
      }, 1000); 

      break; 
      } 
      else { 
      console.log("NO DONUT FOR YOU!"); 
      } 
      console.log("\n\n#########"); 
     } 
     } 
     console.log("#####"); 

    }); 
    //... more irrelevant things 

質問は、私はクリックごとに扱うことができる方法ですか?クリックの結果のサブツリーだけが必要です。私がここにいるかどうかわかりません。おそらく...:

答えて

0

クリックの結果をどのように処理するかを尋ねていると思われます。

クリックで新しいページのロードにつながる場合は、単にあなたのコードの後に​​待ってステップを追加し、CasperJSは、ページのロードを処理させることができます。

casper.then(function(){ 
    var success = this.evaluate(function(){ 
     ... 
     if(elink){ 
      console.log("FOUND IT!"); 
      crap = setTimeout(function(){ 
       elink.click(); //where can I treat this? 
      }, 1000); 

      return true; 
     } 
     ... 
     return false; 
    }); 

    if (success) { 
     this.wait(1100, function(){ 
      // TODO: do something with the loaded page 
     }) 
    } else { 
     // TODO: do something on fail 
    } 
}) 

クリックは既存のページを変更した場合、そのような変更を待つ必要があります。このような場合にCasperJSが提供する多くの機能があります。それらのすべてはwaitで始まります。例:

casper.then(function(){ 
    this.evaluate(...); 
}).wait(1100).waitForSelector('some new element selector', function _then(){ 
    // TODO: do something with the loaded page 
}, function _onTimeout(){ 
    // TODO: do something on fail 
}) 
関連する問題