Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Login Using HtmlUnit

Tags:

java

htmlunit

I am very very new to HtmlUnit. I want to know do I am able to login to a site using htmlunit and perform some operations in the site for example I want to login to my office portal and to aplly a leave.

I am using html unit and it shows some errors, is its possible to do with html unit or are there any other tools I can use for this purpose...
Here is my code
final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3_6);        
webClient.setJavaScriptEnabled(true);
webClient.getCookieManager().setCookiesEnabled(true);

final HtmlPage page1 =  webClient.getPage("http://www.ccstechnologies.org/login.aspx/");
final HtmlForm form = page1.getFormByName("form1");         
final HtmlSubmitInput button =  form.getInputByName("BtnLogin");
final HtmlTextInput textField =  form.getInputByName("Username");
final HtmlPasswordInput pwd =  form.getInputByName("password");        
textField.setValueAttribute("username");
pwd.setValueAttribute("password");      

final HtmlPage page2 =  button.getEnclosingForm().click();  
String htmlBody = page2.getWebResponse().getContentAsString(); 

System.out.println("Base Uri 1 : "+page1);
System.out.println("Base Uri 2 : "+page2);

webClient.closeAllWindows();

But when I print page2 it shows only the login page's url, and it is not returning the homepage url. What could be the problem ?

This is what I got in my console when clicked on form

May 28, 2012 11:44:15 AM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify WARNING: Obsolete content type encountered:'application/x-javascript'. May 28, 2012 11:44:16 AM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify WARNING: Obsolete content type encountered: 'application/x-javascript'. Base Uri 1 : HtmlPage(http://www.ccstechnologies.org/login.aspx/)@2741851 Base Uri 2 : HtmlPage(http://www.ccstechnologies.org/login.aspx/)@2741851

results generated when clicked on button

May 29, 2012 10:00:02 AM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify
WARNING: Obsolete content type encountered: 'application/x-javascript'.
May 29, 2012 10:00:02 AM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify
WARNING: Obsolete content type encountered: 'application/x-javascript'.
May 29, 2012 10:00:03 AM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify
WARNING: Obsolete content type encountered: 'application/x-javascript'.
May 29, 2012 10:00:03 AM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify
WARNING: Obsolete content type encountered: 'application/x-javascript'.
May 29, 2012 10:00:03 AM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify
WARNING: Obsolete content type encountered: 'application/x-javascript'.
May 29, 2012 10:00:03 AM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify
WARNING: Obsolete content type encountered: 'application/x-javascript'.
May 29, 2012 10:00:03 AM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify
WARNING: Obsolete content type encountered: 'text/javascript'.
May 29, 2012 10:00:03 AM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify
WARNING: Obsolete content type encountered: 'text/javascript'.
May 29, 2012 10:00:03 AM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify
WARNING: Obsolete content type encountered: 'text/javascript'.
May 29, 2012 10:00:03 AM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify
WARNING: Obsolete content type encountered: 'text/javascript'.
May 29, 2012 10:00:03 AM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify
WARNING: Obsolete content type encountered: 'text/javascript'.
May 29, 2012 10:00:03 AM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify
WARNING: Obsolete content type encountered: 'text/javascript'.
May 29, 2012 10:00:03 AM com.gargoylesoftware.htmlunit.DefaultCssErrorHandler error
WARNING: CSS error: [259:24] Error in expression. Invalid token "=". Was expecting one of: <S>, <COMMA>, "/", <PLUS>, "-", <HASH>, <STRING>, ")", <URI>, "inherit", <EMS>, <EXS>, <LENGTH_PX>, <LENGTH_CM>, <LENGTH_MM>, <LENGTH_IN>, <LENGTH_PT>, <LENGTH_PC>, <ANGLE_DEG>, <ANGLE_RAD>, <ANGLE_GRAD>, <TIME_MS>, <TIME_S>, <FREQ_HZ>, <FREQ_KHZ>, <DIMENSION>, <PERCENTAGE>, <NUMBER>, <FUNCTION>, <IDENT>.
May 29, 2012 10:00:03 AM com.gargoylesoftware.htmlunit.DefaultCssErrorHandler error
WARNING: CSS error: [259:29] Error in style rule. Invalid token "\r\n   ". Was expecting one of: "}", ";".
May 29, 2012 10:00:03 AM com.gargoylesoftware.htmlunit.DefaultCssErrorHandler warning
WARNING: CSS warning: [259:29] Ignoring the following declarations in this rule.
HtmlPage(http://192.168.0.5/login.aspx)@23511316
HtmlPage(http://192.168.0.5/login.aspx)@17700115
like image 762
Renjith K N Avatar asked May 25 '12 07:05

Renjith K N


2 Answers

Ok, I looked into it, it would seem the problem was with the button. I replaced you line of code for the button with this:

 final HtmlPage page2 =  (HtmlPage) form.getInputByValue("Login").click();

now it appears that it at least tries to login(and the page of course prints invalid login) so it should work with appropriate credentials. to print the page in java and see it use system.out.println(page1.asText()) or asXml depending on what you want to see

my code is finally this:

final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3_6);         
        webClient.setJavaScriptEnabled(true);
        webClient.getCookieManager().setCookiesEnabled(true);


     try{   final HtmlPage page1 =  webClient.getPage("http://www.ccstechnologies.org/login.aspx/");
        final HtmlForm form = page1.getFormByName("form1");         
        final HtmlSubmitInput button =  form.getInputByName("BtnLogin");
        final HtmlTextInput textField =  form.getInputByName("Username");
        final HtmlPasswordInput pwd =  form.getInputByName("password");        
        textField.setValueAttribute("username");
        pwd.setValueAttribute("password");      
System.out.println(page1.asText());
        final HtmlPage page2 =  (HtmlPage) form.getInputByValue("Login").click();

        String htmlBody = page2.getWebResponse().getContentAsString(); 
        System.out.println(page2.asText());
       System.out.println("Base Uri 1 : "+page1);
      System.out.println("Base Uri 2 : "+page2);

        webClient.closeAllWindows();}catch (Exception e) {
            // TODO: handle exception
        }
like image 115
Joe Yahchouchi Avatar answered Oct 18 '22 13:10

Joe Yahchouchi


this is what you should set for the javascript:

webClient.getOptions().setJavaScriptEnabled(false);

and you can as well add these to it.

webClient.getOptions().setRedirectEnabled(true);
        webClient.getOptions().setThrowExceptionOnScriptError(false);
        webClient.getOptions().setCssEnabled(false);
        webClient.getOptions().setUseInsecureSSL(true);
        webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
        webClient.getCookieManager().setCookiesEnabled(true);

This should solve the problem as it did for me.

like image 3
Kunbi Avatar answered Oct 18 '22 13:10

Kunbi