使用HtmlUnit登录网站

时间:2013-02-24 00:47:35

标签: java htmlunit

我正在尝试登录我的大学网站,但我遇到了html单元的问题。

我的代码:

    WebClient webClient = new WebClient(BrowserVersion.INTERNET_EXPLORER_8);
    webClient.setJavaScriptEnabled(false);
    webClient.setThrowExceptionOnScriptError(false);
    HtmlPage currentPage = webClient.getPage("http://www.oid.hacettepe.edu.tr/cgi-bin/menuindex.cgi");
    HtmlForm form = currentPage.getForms().get(0);  // forms correct
    System.out.println(form.asXml());
    HtmlTextInput name = form.getInputByName("login");
    HtmlPasswordInput pass = form.getInputByName("passwd");
    name.setValueAttribute("*****");
    pass.setValueAttribute("*****");
    HtmlSubmitInput button = form.getInputByName("SubmitName");
    HtmlPage page2 = button.click();
    System.out.println(page2.asText());

结果:

Exception in thread "main" com.gargoylesoftware.htmlunit.ElementNotFoundException: elementName=[input] attributeName=[name] attributeValue=[login]
    at com.gargoylesoftware.htmlunit.html.HtmlForm.getInputByName(HtmlForm.java:460)
    at hacettepe.Hacettepe.main(Hacettepe.java:34)
Java Result: 1

你能解释一下我对这个问题的看法有什么问题吗?非常感谢。

2 个答案:

答案 0 :(得分:0)

因为页面上找不到元素'login'。

答案 1 :(得分:0)

就像user2115021建议的那样,作为第一步,验证您要查找的元素实际上位于您请求的第一页中。特别是,请确保“login”,“psswd”和“SubmitName”是“currentPage”中的实际值。

如果这不起作用,请尝试更改获取表单名称的方式。我用过

final HtmlForm form = page.getFormByName("loginform");

之前没有任何麻烦。 getForms()可能会返回多个表单,您需要确保正在查看正确的表单。