1

我正在用 Java 编写一个程序,以便在单击页面底部的下一步按钮后从一系列页面中抓取源代码。我的代码目前是:

public class Htmlunitscraper { 

  private static String s = "http://cpdocket.cp.cuyahogacounty.us/SheriffSearch/results.aspx?q=searchType%3dSaleDate%26searchString%3d10%2f21%2f2013%26foreclosureType%3d%27NONT%27%2c+%27PAR%27%2c+%27COMM%27%2c+%27TXLN%27";

  public static String scrapeWebsite() throws IOException {

    final WebClient webClient = new WebClient();
    final HtmlPage page = webClient.getPage(s);
    final HtmlForm form = page.getForms().get(0);
    final HtmlSubmitInput button = form.getInputByValue(">");
    final HtmlPage page2 = button.click();
    int amountOfTries = 10;
    while (amountOfTries > 0 && String originalHtml = page2.getWebResponse().getContentAsString() !=page.getWebResponse().getContentAsString()) {
    amountOfTries--;
    synchronized (page) {
        page.wait(1000);
    }
   }
    return originalHtml;
  }
}

这是我第一次使用Htmlunit,所以我一直在参考这篇文章。对于初学者,我不完全确定“Form”类是如何工作的,以及它究竟做了什么。不过,对于我的问题,正在打印的字符串是来自原始网页的源代码,而不是在单击下一个按钮之后。从 URL 手动查看源代码时,单击下一步按钮后,我必须刷新页面才能查看更新的源代码,所以想象一下我必须在我的程序中模拟它。我该怎么做呢?即使添加了刷新方法,它仍然无法正常工作。

4

2 回答 2

2

该网页实际上使用 AJAX,因此单击该按钮不会让您进入新页面。HTTP 请求发生在后台,一旦完成,页面中的 DOM 就会刷新。但是,您需要等待这种情况发生,而且您似乎没有这样做。

请参阅此链接以了解如何在 HTMLUnit 中处理 AJAX 请求。

于 2013-10-18T02:57:50.717 回答
0

实际上你输入了错误的网址......请先手动打开网址然后你可以看到http://cpdocket.cp.cuyahogacounty.us/SheriffSearch/results.aspx?q=searchType%3dSaleDate%26searchString%3d10%2f21%2f2013% 26foreclosureType%3d%27NONT%27%2c+%27PAR%27%2c+%27COMM%27%2c+%27TXLN%27

然后我们收到类似 403 - Forbidden: Access is denied 之类的错误。请先检查一下。

于 2013-10-17T12:42:21.387 回答