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脚本,可以检查它的页面完全加载。
在此先感谢
我的答案是否适合你? – Baz
感谢您的回答,但在我的情况下,我没有找到在页面加载期间注入此类代码的方法。我不得不退回到决定页面是否完全加载的人力资源。 – pdondziak