Java – 如何使用HtmlUnit登录网站?

我正在编写一个Java程序来登录我学校用来发布成绩的网站。

这是登录表单的url: https : //ma-andover.myfollett.com/aspen/logon.do

这是登录表单的HTML:

document.forms[0].elements['deploymentId'].value = 'ma-andover'; $(function() { $('form').attr('autocomplete', 'off'); var name = $('#username'); var password = $('#password'); name.attr('autocomplete', 'off'); password.attr('autocomplete', 'off'); if (name.val() == '') { password.attr('disabled','disabled'); } });

 
I forgot my password
setTimeout(function(){window.location.reload(true);}, 1800000);

我试图使用以下代码登录:

 import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlForm; import com.gargoylesoftware.htmlunit.html.HtmlPage; public class LoginAttempt { public static void main(String[] args) throws Exception { WebClient webClient = new WebClient(); HtmlPage page = (HtmlPage) webClient.getPage("https://ma-andover.myfollett.com/aspen/logon.do"); HtmlForm form = page.getFormByName("logonForm"); form.getInputByName("username").setValueAttribute("myUsername"); //works fine form.getInputByName("password").setValueAttribute("myPassword"); //does not work page = form.getInputByValue("Log On").click(); //works fine System.out.println(page.asText()); } } 

该程序填写用户名框并单击“登录”按钮,但它不会填写密码框。 我可以改变什么来使这个程序工作? 我怀疑密码框的“type =’password’”属性与问题有关,但如果我错了请纠正我。 任何帮助表示赞赏。 非常感谢你。

目标页面: https : //ma-andover.myfollett.com/aspen/home.do

这是我的输出,以防它可能有用:

 Aspen: Log On Aspen About Aspen Andover Public Schools Login ID myUsername Password I forgot my password Log On Copyright © 2003-2014 Follett School Solutions. All rights reserved. Follett Corporation Follett Software Company Aspen Terms of Use You must enter a password. OK 

username段中键入内容之前,密码字段将被禁用。 通过设置username中的值不会触发管理密码字段启用的事件。

以下工作

 public static void main(String[] args) { WebClient webClient = new WebClient(); try { HtmlPage page = (HtmlPage) webClient .getPage("https://ma-andover.myfollett.com/aspen/logon.do"); HtmlForm form = page.getFormByName("logonForm"); form.getInputByName("username").setValueAttribute("myUsername"); HtmlInput passWordInput = form.getInputByName("password"); passWordInput.removeAttribute("disabled"); passWordInput.setValueAttribute("myPassword"); page = form.getInputByValue("Log On").click(); // works fine System.out.println(page.asText()); } catch (Exception e) { e.printStackTrace(); } finally { webClient.close(); } } 

输出是

 Aspen: Log On Aspen About Aspen Andover Public Schools Login ID myUsername Password I forgot my password Log On Copyright © 2003-2014 Follett School Solutions. All rights reserved. Follett Corporation Follett Software Company Aspen Terms of Use Invalid login. OK 

要自动处理JavaScript,您应该使用type()

 try (WebClient webClient = new WebClient()) { HtmlPage page = (HtmlPage) webClient.getPage("https://ma-andover.myfollett.com/aspen/logon.do"); HtmlForm form = page.getFormByName("logonForm"); form.getInputByName("username").type("myUsername"); form.getInputByName("password").type("myPassword"); page = form.getInputByValue("Log On").click(); System.out.println(page.asText()); } 

我用了:

 final WebClient webClient = new WebClient()) HtmlPage page = webClient.getPage("url"); ((HtmlTextInput) page.getHtmlElementById("usernameID")).setText("Username"); page.getHtmlElementById("passwordID").setAttribute("value","Password"); page.getElementsByTagName("button").get(0).click(); System.out.println(page.asText()); 

我点击了那个按钮,因为我的按钮没有id,名称或值,但幸运的是它是页面上的唯一按钮。 所以我只获取所有按钮标签(所有这些标签)并选择要单击的列表中的第一个元素。