2

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 のスクリプトなどの可能性がある場合は、誰かが私を助けることができるかもしれません。

前もって感謝します

4

1 に答える 1

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

onloadすべてのリソースがロードされるまで待機し、含まれているコードを実行します。つまり、アラートを開始します。

ただし、onload一部のシナリオでは機能しない場合があることに注意してください。私の記憶が正しければ、ブラウザの戻るボタンと進むボタンを使用するとうまくいかないことがあります。

于 2012-10-05T06:56:46.033 に答える