我正在尝试制作一个应用程序,该应用程序将使用用户提供的登录名连接到站点。我在使用 Java 与网站交互方面没有任何经验,所以我用谷歌搜索了一些并找到了适合我需要的 hmtlunit。
但是我在尝试点击登录表单的提交按钮时遇到了错误:
public static boolean attempt_login(String username, String password) throws ElementNotFoundException, IOException {
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3_6);
webClient.setJavaScriptEnabled(false);
webClient.setThrowExceptionOnScriptError(false);
webClient.setRefreshHandler(new RefreshHandler() {
public void handleRefresh(Page page, URL url, int arg) throws IOException {
System.out.println("handleRefresh");
}
});
HtmlPage page = (HtmlPage) webClient.getPage(Config.LOGIN_PAGE);
List<HtmlForm> forms = page.getForms();
HtmlForm form = null;
for(HtmlForm f : forms){
if(f.getId().equals("login_form")){
form = f;
}
}
if(form == null){
throw new NullPointerException("Could not find form!");
}
form.getInputByName("username").setValueAttribute(username);
form.getInputByName("password").setValueAttribute(password);
page = (HtmlPage) form.getInputByValue("Login Now!").click();
System.out.println(page.asText());
return false;}
不知怎么的,它找不到要登录的提交按钮
com.gargoylesoftware.htmlunit.ElementNotFoundException: elementName=[input] attributeName=[value] attributeValue=[Login Now!]
at com.gargoylesoftware.htmlunit.html.HtmlForm.getInputByValue(HtmlForm.java:737)
at domain.Helper.attempt_login(Helper.java:41)
at TesterStartUp.main(TesterStartUp.java:15)
html源码:
<button type="submit" value="Login Now!" onmouseover="this.style.backgroundPosition='bottom';" onmouseout="this.style.backgroundPosition='top';" onclick="return SetFocus();">Login Now!</button>
当我用谷歌搜索解决方案时,我发现有关禁用 javascript 的内容会有所帮助。所以我告诉 webclient 禁用它(webClient.setJavaScriptEnabled(false);)但仍然有异常。
起初我在尝试选择表单(“login_form”)时遇到了同样的问题,但有一种方法可以让我获得所有表单的列表,然后只查看是否有一个与列表匹配。我找不到提交按钮的解决方法,所以我希望其他人知道这个问题的解决方案。
提前致谢, 巨魔爵士
最佳答案
HtmlUnit getInputByValue()
method在 <form>
上运行只会返回 HtmlInput 的类型,以及唯一的输入按钮类型 -- HtmlButtonInput -- 代表 <input type="button">
而不是 <button>
.您将需要更改 HTML 或使用不同的 HtmlUnit 方法调用。
关于Java HtmlUnit form.getInputByValue ("Login Now!").click();,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5810000/