Java HtmlUnit可以';下载文件后无法检索页面

Java HtmlUnit可以';下载文件后无法检索页面,java,htmlunit,Java,Htmlunit,我对Java中的HtmlUnit有一个奇怪的问题。我使用它从网站下载一些数据,过程如下: 1-登录 2-每个元件(车辆) -----3搜寻汽车 -----4从链接下载zip文件 代码: 创建网络客户端: webClient = new WebClient(BrowserVersion.FIREFOX_3_6); webClient.setJavaScriptEnabled(true); webClient.setThrowExceptionOnScriptError(false); Defaul

我对Java中的HtmlUnit有一个奇怪的问题。我使用它从网站下载一些数据,过程如下:

1-登录

2-每个元件(车辆)

-----3搜寻汽车

-----4从链接下载zip文件

代码:

创建网络客户端:

webClient = new WebClient(BrowserVersion.FIREFOX_3_6);
webClient.setJavaScriptEnabled(true);
webClient.setThrowExceptionOnScriptError(false);
DefaultCredentialsProvider provider = new DefaultCredentialsProvider();
provider.addCredentials(USERNAME, PASSWORD);
webClient.setCredentialsProvider(provider);
webClient.setRefreshHandler(new ImmediateRefreshHandler());
登录:

  public void login() throws IOException
  {
    page = (HtmlPage) webClient.getPage(URL);
    HtmlForm form = page.getFormByName("formLogin");

    String user = USERNAME;
    String password = PASSWORD;

    // Enter login and password
    form.getInputByName("LoginSteps$UserName").setValueAttribute(user);
    form.getInputByName("LoginSteps$Password").setValueAttribute(password);

    // Click Login Button
    page = (HtmlPage) form.getInputByName("LoginSteps$LoginButton").click();

    webClient.waitForBackgroundJavaScript(3000);

    // Click on Campa area
    HtmlAnchor link = (HtmlAnchor) page.getElementById("ctl00_linkCampaNoiH");
    page = (HtmlPage) link.click();

    webClient.waitForBackgroundJavaScript(3000);
    System.out.println(page.asText());
  }
在网站中搜索汽车:

private void searchCar(String _regNumber) throws IOException
 {
// Open search window
page = page.getElementById("search_gridCampaNoi").click();

webClient.waitForBackgroundJavaScript(3000);

// Write plate number
HtmlInput element = (HtmlInput) page.getElementById("jqg1");
element.setValueAttribute(_regNumber);

webClient.waitForBackgroundJavaScript(3000);

// Click on search
HtmlAnchor anchor = (HtmlAnchor) page.getByXPath("//*[@id=\"fbox_gridCampaNoi_search\"]").get(0);
page = anchor.click();

webClient.waitForBackgroundJavaScript(3000);
System.out.println(page.asText());
}
下载pdf:

    try
    {
      InputStream is = _link.click().getWebResponse().getContentAsStream();
      File path = new File(new File(DOWNLOAD_PATH), _regNumber);
      if (!path.exists())
      {
        path.mkdir();
      }
      writeToFile(is, new File(path, _regNumber + "_pdfs.zip"));
    }
    catch (Exception e)
    {
      e.printStackTrace();
    }
  }
问题:

第一辆车可以正常工作,pdf已经下载,但当我搜索新车时,当我到达这一行时:

page = page.getElementById("search_gridCampaNoi").click();
我得到一个例外:

Exception in thread "main" java.lang.ClassCastException: com.gargoylesoftware.htmlunit.UnexpectedPage cannot be cast to com.gargoylesoftware.htmlunit.html.HtmlPage
调试后,我意识到在我打电话的那一刻:

InputStream is = _link.click().getWebResponse().getContentAsStream();
page.getElementById(“search_gridCampaNoi”).click()的返回类型从HtmlPage更改为WebResponse,因此我不再接收新页面,而是再次接收已下载的文件

调试器的两个屏幕截图显示了这种情况:

第一次呼叫,返回类型OK:

第二次调用,返回类型更改,我不再收到HtmlPage:


提前谢谢

为了防止有人遇到同样的问题,我找到了一个解决方法。更改行:

InputStream is = _link.click().getWebResponse().getContentAsStream();

看起来很有意思。我现在在做几次迭代时遇到了问题,有时有效,有时无效,但至少我现在有了一些东西

InputStream is = _link.openLinkInNewWindow().getWebResponse().getContentAsStream();