2016-06-22 4 views
0

저는 CasperJS를 사용하여 2 서브 프레임의 프레임 세트를 레이어하는 웹 페이지를 스크립팅합니다 (어떤 경우에는 3 개의 레이어로 이동). 이 웹 사이트는 온라인 이메일 클라이언트의 구버전입니다. 새 메시지가 있는지 확인하고, 첨부 파일이있는 경우 첨부 파일을 다운로드하려고합니다.Casperjs는 프레임 내의 프레임에 액세스합니다.

각 페이지의 형식은 항상 : 첫 번째 프레임은 로그인 자격 증명을 저장하고 두 번째 프레임은 실제 내용을 포함합니다.

두 가지 요구 사항이 있습니다. 페이지가 완전히로드 된 시간을 알아 내기 위해 waitForSelector 호출을 사용합니다. 항상 여러 계층으로 이루어져 있으며, 가장 깊은 노드에서 클릭하여 전자 메일 메시지를 찾습니다.

여러 프레임 깊이의 셀렉터에 어떻게 액세스합니까? CasperJS를 사용하면 쉽게 할 수 있지만 스크립트를 여러 레이어에 적용 할 수는 없습니다.

Window 개체를 사용해 보았지만 CasperJS 선택기에서 오류가 발생했습니다.

casper.waitForSelector(window.frames[1].document.getElementById('frame[name = Frame_A ]'), { 
    // when loaded do this 
}); 
+0

주어진 대답은 문제를 해결하는 경우는 [동의] 수 (http://meta.stackexchange.com/q/5234/266187) 그것. 그렇지 않다면, 무엇이 잘못되었는지 확장하십시오. –

답변

1

document 개체는 CasperJS 스크립트에서 직접 사용할 수 없습니다. 먼저 탑재되는 프레임을 기다려야한다, 그 프레임으로 전환 :

casper.start("...", function() { 
    casper.waitForSelector(frameSelector, function() { 
     casper.withFrame('Frame_A', function() { 
      //do something 
     }); 
    }) 
});