我对 HTMLUnit 有疑问。不久我正在做的是,我正在填写表格并登录到网页,然后按下该页面上的按钮。实际上,我无法执行此过程,但我正在尝试。这是我的 HTML 表单源代码和 Java 源代码:
这是来自登录屏幕:
<form action="/login" method="post">
...
<input type="text" name="login_email" id="login_email" value="" />
<input type="password" name="login_password" id="login_password" />
<input type="submit" id="login_submit" name="login_submit" value="Sign in" />
</form>
这种形式有一些隐藏的输入。我知道这听起来很有趣,但是当我不对隐藏输入做任何事情时,我的 Java 代码就可以工作。
这是我使用此表单登录的 Java 代码:
此代码来自 stackoverflow 问题。我只是测试它,仅此而已。
WebClient webClient = new WebClient();
webClient.setThrowExceptionOnScriptError(false);
HtmlPage currentPage = webClient.getPage("https://www.blablabla.com:1234");
final HtmlForm form = currentPage.getFirstByXPath("//form[@action='/login']");
HtmlTextInput username = (HtmlTextInput) currentPage.getElementById("login_email");
HtmlPasswordInput password = (HtmlPasswordInput) currentPage.getElementById("login_password");
username.setText("username@blablabla.com");
password.setText("passW0rd");
HtmlButton submitButton = (HtmlButton) currentPage.createElement("button");
submitButton.setAttribute("type", "submit");
form.appendChild(submitButton);
HtmlPage newPage = submitButton.click();
System.out.println(newPage.asText());
在下一部分之前一切都很好。我可以登录,看到新页面的内容。
但是,当我尝试按下新页面中的按钮时,我什么也得不到。实际上,我想我什至无法按下它。
这是我的“按钮”和新网页的 HTML 源代码:
<form action="auth" method="post">
<input type="submit" name="allow" value="Allow"/>
</form>
还有一些隐藏的输入。
这是 -trying- 按下名为“允许”的按钮的 Java 代码:
HtmlButton button = newPage.getElementByName("allow");
HtmlPage page = button.click() ;
为了最后一次检查,我使用了另一段代码:
System.out.println(page.asText());
但我收到这样的错误
错误开始
WARNING: getElementById(script1338426904717) did a getElementByName for Internet Explorer
31.May.2012 04:15:04 com.gargoylesoftware.htmlunit.javascript.host.ActiveXObject jsConstructor
WARNING: Automation server can't create object for 'ShockwaveFlash.ShockwaveFlash'.
31.May.2012 04:15:04 com.gargoylesoftware.htmlunit.javascript.StrictErrorReporter runtimeError
SEVERE: runtimeError: message=[Automation server can't create object for 'ShockwaveFlash.ShockwaveFlash'.] sourceName=[https://www.jdkahsjkda/dksajda.js] line=[12] lineSource=[null] lineOffset=[0]
31.May.2012 04:15:04 com.gargoylesoftware.htmlunit.javascript.host.ActiveXObject jsConstructor
错误结束
只要我可以登录,这些错误对我来说都是可以的。
我可以登录,然后查看页面。它说“欢迎使用用户名密码......”但是,我不能按下按钮也不能做任何其他事情。
我希望你们能帮助我解决这个问题。
非常感谢你。
保重,谢谢。
编辑:
现在我得到这个错误:
Exception in thread "main" com.gargoylesoftware.htmlunit.ElementNotFoundException: elementName=[*] attributeName=[name] attributeValue=[allow]
at com.gargoylesoftware.htmlunit.html.HtmlPage.getElementByName(HtmlPage.java:1565)
at cza.main(cza.java:54)
但是,有一个名为“允许”的按钮。我正在查看第二页的来源,我看到了:
<input type="submit" name="allow" value="Allow"/>
<input type="submit" name="deny" value="Deny"/>
因此,有一个名为允许和拒绝的按钮。但是,此代码失败。这可能是因为JS还是什么?我尝试从 firstPage 中找到提交按钮并使用它提交表单。不是用假按钮,它再次失败。我为此使用了 HTMLSubmitInput,它再次失败。
再次感谢。