2017-04-26 6 views
0

casperjs를 통해 아래 요소를 클릭하려고 시도하지만 저에게 효과적이지 않습니다.casperjs를 통해 <img role="button" ...>을 클릭하십시오.

<img alt="Pay Button" class="v-button" role="button" src="https://test/wallet-services-web/xo/button.png" tabindex="0" style="cursor: pointer; transition-property: filter; transition-duration: 0.25s; filter: brightness(1);"> 

내가 중첩 된 iframe을의 무리를 통해이 요소에 대해 검색하고, 내가 정확하게 찾을 수 있습니다 -하지만 정확하게 클릭 수없는 것.

if (casper.exists('img.v-button')) { 
     console.log("Found button"); // the exists works - this is logged 

     casper.click('img.v-button'); // Approach 1: nothing happens 

     // Approach 2: nothing happens 
//  var x = require('casper').selectXPath; 
//  casper.click(x('(//img[@class="v-button"])')); 

     return true; 
    } else { 
     var result = traverseTreeDown(); 
     if (result) { 
      return true; 
     } else { 
      casper.page.switchToParentFrame(); 
     } 
    }     

접근 방식 1과 2는 모두 "존재하는"블록 내부에 올바르게 들어가도 작동하지 않습니다. 당신은 접근을 시도해야

+0

더 나은이 아마 생각 way-- 대안이있다. 클릭을 처리하기 전에 함수에서 'true'를 반환한다고 생각합니다. 'setTimeout (() => casper.click (img), 0)'에 래핑 해보십시오. – Todd

+0

흥미로운 점 - 시도하고 다시 게시 할 것입니다. 따라서 하나의 "casper.then (function()"블록 내부에있을 때 명령 완료를 엄격하게 명령 할 수는 없습니다. 두 명령을 모두 완료하기 위해 엄격한 순서가 필요할 경우 명령을 완료해야합니다. 연속적이지만 별개의 "casper.then (function()"블록에서? 또는 제안한대로 타임 아웃을 통해 별도의 스레드를 생성하십시오 ... – Phoeniyx

답변

0

casperjs documentation에 제안 : 나는 API documentation을 확인하는 것이 좋습니다

casper.then(function() { 
    casper.click('img.v-button'); 
}); 

casper.then(function() { 
    // do next action 
}); 
+0

아, 내 코드 단편은 이미 "casper.then (function() {" 블록을 작성했습니다. 간결하게하기 위해 포함하지 않았습니다. 내가 게시 한 것은 "casper.then (function() {"블록. – Phoeniyx

0

.

예를 들어 다음을 확인하십시오. 특정 선택 도구가 나타날 때까지 기다릴 수 있습니다.

casper.start('https://yourmom.gov'); 

casper.waitForSelector('img.v-button', function() { 
    this.click('img.v-button'); 
}); 

casper.run(); 

이 아니면 내가 캐스퍼는 ** 비동기 ** 때문에

casper.start('http://yourmom.gov/').thenClick('img.v-button', function() { 
    this.echo("clicktastic."); 
}); 

casper.run(); 
+0

Thx .. 내부에있었습니다. 그러나 요소가 이미 언급되었으므로 코드는 "if (casper.exists ('img.v-button')) {".. 내 console.log가 올바르게 인쇄되기 때문에 존재하지만 블록에서 한 번 클릭하면 작동하지 않습니다. 존재하지 않는다면 나는 처음부터 블록에 들어 가지 않을 것이고 나의 콘솔은 로그되지 않을 것입니다. 그래서 "WaitFor"는 상상할 수 없습니다. – Phoeniyx