2012-10-04 138 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");  
    } 
} 

我不是在動態網頁的專家,所以,也許有人可以幫助我,如果有例如任何可能性的JavaScript腳本,可以檢查它的頁面完全加載。

在此先感謝

+0

我的答案是否適合你? – Baz

+0

感謝您的回答,但在我的情況下,我沒有找到在頁面加載期間注入此類代碼的方法。我不得不退回到決定頁面是否完全加載的人力資源。 – pdondziak

回答

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

onload等待,直到所有的資源被加載並執行該所包含的代碼,即啓動警報。

不過請注意,這onload可能無法在某些情況下工作。如果我沒有記錯,它有時不適用於使用瀏覽器的後退和前進按鈕。

相關問題