HtmlUnit无法在网站上找到表单

时间:2016-12-13 08:58:28

标签: java forms htmlunit

在以下网站,我尝试使用HtmlUnit访问登录名和密码表:https://zof.interreport.com/diveport#

然而,这个非常简单的javascript返回一个空列表[]。

void homePage() throws Exception{

    final WebClient webClient = new WebClient(BrowserVersion.CHROME);
    final HtmlPage page = webClient.getPage("https://zof.interreport.com/diveport#");
    System.out.println(page.getForms());
}

所以不知何故HtmlUnit无法识别页面上的表单。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

首先:你只显示一些java代码,但是你谈论的是javascript - 有什么遗漏吗?

关于表格。您尝试测试的页面是在客户端执行某些操作的页面之一。这意味着,在页面加载后,通过调用javascript在浏览器中创建真实的页面/ dom。使用HtmlUnit时,你必须要处理它。在简单的情况下,等待处理javacript就足够了。

此代码适用于我:

    final WebClient webClient = new WebClient(BrowserVersion.CHROME);
    final HtmlPage page = webClient.getPage("https://zof.interreport.com/diveport#");
    webClient.waitForBackgroundJavaScriptStartingBefore(5000);
    System.out.println(page.getForms());

注意使用最新的HtmlUnit SNAPSHOT版本。

答案 1 :(得分:0)

我还没有使用过那个API,但这里有诀窍

  1. 通过禁用JavaScript在浏览器中打开同一页面。它不起作用。

    • 这意味着页面使用一些JavaScript dom操作加载其内容。
    • 如果你不能在这里获得HTML,那么你正在使用的API必须有一些出路。
  2. 查看HtmlUnit api文档。班级JAVADOC

    • 有方法

    public Sc​​riptResult executeJavaScript(String sourceCode)

  3. 这里的关键是,如果您使用的API不会在其赢得的JavaScript上执行JavaScript,您必须为其编写代码。