在以下网站,我尝试使用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无法识别页面上的表单。我该如何解决这个问题?
答案 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,但这里有诀窍
通过禁用JavaScript在浏览器中打开同一页面。它不起作用。
查看HtmlUnit api文档。班级JAVADOC
public ScriptResult executeJavaScript(String sourceCode)
这里的关键是,如果您使用的API不会在其赢得的JavaScript上执行JavaScript,您必须为其编写代码。