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");
}
}
私は動的 Web ページの専門家ではないので、ページが完全にロードされていることを確認できる JavaScript のスクリプトなどの可能性がある場合は、誰かが私を助けることができるかもしれません。
前もって感謝します