2012-10-04 2 views
2

SWT 브라우저 클래스로 작업하고 있는데 문제가 있습니다. ASP의 사용으로 대부분의 데이터가 동적으로로드되는 페이지에서 페이지 소스를 복사하려고합니다. 문제는 브라우저 이벤트 리스너에 대해 완료된 이벤트는 물론 전체 페이지 컨텐츠가 표시되기 전에 시작된다는 것입니다.Java SWT 브라우저 : 동적 페이지가 완전히로드 될 때까지 기다림

class GermaniaProgressListener implements ProgressListener { 

    final Browser browser; 
    Calendar calen; 
    SimpleDateFormat dateFormat; 
    static Integer counter; 
    static Integer changeCounter; 
    static Integer completeCounter; 


    public GermaniaProgressListener(Browser browser, Calendar calen, SimpleDateFormat dateForm) { 
    super(); 
    this.browser = browser; 
    this.calen = calen; 
    this.dateFormat = dateForm; 
    counter = 1; 
    } 

    public void changed(ProgressEvent event) { 

    } 

    @Override 
    public void completed(ProgressEvent arg0) { 
    String pageContent = ""; 
    if(counter > 1) { 
     try { 
     pageContent = (String)browser.evaluate("return document.body.innerHTML"); 
     FileUtilities.writeFile(
      FilePaths.GERMANIA_HTML.getFilePath().replace(".", ((Integer)(counter-1)).toString() + "."), 
      pageContent); 
     } catch (IOException e) { 
     e.printStackTrace(); 
     LoggingUtilities.logException(e); 
     BrowserUtilities.closeBrowser(browser); 
     } 
    } 
    if(counter < 8) { 
     String strDate = dateFormat.format(calen.getTime()); 
     Boolean ret = browser.execute("this.controler.loadPage(0, '', 'd=" + strDate + "')"); 
     if(!ret) { 
     LoggingUtilities.logString("Error getting germania pages"); 
     BrowserUtilities.closeBrowser(browser); 
     return; 
     } 
     calen.add(Calendar.DATE, 1); 
     counter++; 
    } else { 
     BrowserUtilities.closeBrowser(browser); 
    } 
    } 
}; 

public class PageDowGermania { 
    static public void getPageContent() { 
    final Browser browser = BrowserUtilities.createBrowser(); 
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); 
    Calendar calen = Calendar.getInstance(); 
    calen.setTime(new Date()); 
    GermaniaProgressListener fpl = new GermaniaProgressListener(browser, calen, dateFormat); 
    browser.addProgressListener(fpl); 
    BrowserUtilities.startBrowser(browser, "http://www.germaniasport.hr");  
    } 
} 

내가 예를 들어 어떤 가능성이 그것을 확인할 수 있습니다 자바 스크립트에서 스크립트는 페이지가 완전히되는 경우 어쩌면 누군가가 나를 도울 수있는 동적 웹 페이지의 전문가가 아니에요 : 여기 내 코드의 일부입니다 짐을 실은. 사전에

덕분에 모든 자원까지

+0

내 대답이 도움이 되었습니까? – Baz

+0

답변을 주셔서 감사합니다. 그러나 제 경우에는 페이지 로딩 중에 이러한 코드를 삽입하는 방법을 찾지 못했습니다. 페이지가 완전히로드되었는지를 결정하는 인적 자원으로 돌아 가야했습니다. – pdondziak

답변

0
window.onload = function() { 
    alert("Everything loaded") 
} 

onload 대기로드하고, 즉 포함 된 코드를 실행 경고를 시작합니다.

그러나 일부 시나리오에서는 onload이 작동하지 않을 수 있습니다. 올바르게 기억하면 브라우저의 앞뒤 단추를 사용하는 경우 가끔 작동하지 않는 경우가 있습니다.

관련 문제