我正在尝试创建一个应用程序,该应用程序将使用用户提供的登录名连接到站点。我没有任何与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;}
不知何故,它无法找到要登录的submitButton
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”),但有一种方法可以获取所有表单的列表,然后查看是否与列表匹配。我无法找到提交按钮的方法,所以我希望其他人知道这个问题的解决方案。
提前致谢, 特罗尔爵士
答案 0 :(得分:1)
在<form>
上运行的HtmlUnit getInputByValue()
method只返回HtmlInput类型,唯一的输入按钮类型 - HtmlButtonInput - 代表<input type="button">
而不是<button>
。您需要更改HTML或使用其他HtmlUnit方法调用。
答案 1 :(得分:0)
我有同样的问题,我自己解决了:
当您尝试使用html单元登录时,首先检查登录框是否正在使用jquery显示。如果在单击按钮后出现登录框/ div,则需要刷新页面(Web客户端)以访问新的输入元素
HtmlPage page = webClient.getPage("https://www.yourwebsite.com/#");
HtmlAnchor link=page.getElementByName("link");
link.click();
page.refresh();
如果您的网站有一个按钮而不是锚链接,请将其更改为html按钮,刷新后可以找到该元素。
希望它能帮助解决您的问题