Java – 如何使用HtmlUnit登录网站?
我正在编写一个Java程序来登录我学校用来发布成绩的网站。
这是登录表单的url: https : //ma-andover.myfollett.com/aspen/logon.do
这是登录表单的HTML:
我试图使用以下代码登录:
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,名称或值,但幸运的是它是页面上的唯一按钮。 所以我只获取所有按钮标签(所有这些标签)并选择要单击的列表中的第一个元素。