2012-10-04 169 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可能无法在某些情况下工作。如果我没有记错,它有时不适用于使用浏览器的后退和前进按钮。

相关问题