如何使用HTMLUNIT登录后从网站获取信息?

时间:2016-09-25 13:14:37

标签: java htmlunit

我之前已经发过一篇文章,但已经获得了更多关于如何做到这一点的细节,但我仍然无法正确地做到这一点。这是代码的主要部分。当我运行它时,我在控制台中得到了一大堆与css相关的警告。它不会工作。我试图获得用户的名字,就像我在代码中提到的那样。如果有人可以提供帮助,那对我来说意味着很多。该网站是我的学校网站:https://lionel2.kgv.edu.hk/login/index.php。我已经包含登录的网站(我删除了除我的用户部分以外的大多数元素),如果这有帮助。提前谢谢,

维杰。

网站: https://drive.google.com/a/kgv.hk/file/d/0B-O_Xw0mAw7tajJhVlRxTkFhOE0/view?usp=sharing

   //most of this is from https://gist.github.com/harisupriyanto/6805988

    String loginUrl = "http://lionel2.kgv.edu.hk";
    int loginFormNum = 1;
    String usernameInputName = "nameinput";
    String passwordInputName = "passinput";
    String submitLoginButtonValue = "Sign In";

    // create the HTMLUnit WebClient instance
    WebClient wclient = new WebClient();

    // configure WebClient based on your desired
    wclient.getOptions().setPrintContentOnFailingStatusCode(false);
    wclient.getOptions().setCssEnabled(true);
    wclient.getOptions().setThrowExceptionOnFailingStatusCode(false);
    wclient.getOptions().setThrowExceptionOnScriptError(false);

try {

      final HtmlPage loginPage = (HtmlPage)wclient.getPage(loginUrl);

      final HtmlForm loginForm = loginPage.getForms().get(loginFormNum);

      final HtmlTextInput txtUser = loginForm.getInputByName(usernameInputName);
      txtUser.setValueAttribute(username);
      final HtmlPasswordInput txtpass = loginForm.getInputByName(passwordInputName);
      txtpass.setValueAttribute(password);
      final HtmlSubmitInput submitLogin = loginForm.getInputByValue(submitLoginButtonValue);


      final HtmlPage returnPage = submitLogin.click();  

      final HtmlElement returnBody = returnPage.getBody(); 
      //if (//there is a class called "Login info, then print out the     nodeValue.) {

     // }

    } catch(FailingHttpStatusCodeException e) {
      e.printStackTrace();
    } catch(Exception e) {
      e.printStackTrace();
    }
  }

1 个答案:

答案 0 :(得分:0)

您很可能不需要CSS,因此您可以禁用它。

为了提高性能并减少警告和错误,我尽可能地禁用/限制。

    webClient.setJavaScriptTimeout(30 * 1000); // 30s
    webClient.getOptions().setTimeout(300 * 1000); // 300s
    webClient.getOptions().setCssEnabled(false);
    webClient.getOptions().setThrowExceptionOnScriptError(false); // no Exceptions because of javascript
    webClient.getOptions().setPopupBlockerEnabled(true);