我正在使用 SWT 浏览器类,但我遇到了问题。我正在尝试从使用 ASP 动态加载大部分数据的页面复制页面源。问题是浏览器事件侦听器的完成事件当然是在显示整个页面内容之前触发的。这是我的代码的一部分:
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 中的脚本可以检查页面是否已完全加载,也许有人可以帮助我。
提前致谢