简体   繁体   English

使用HtmlUnit登录

[英]Login Using HtmlUnit

I am very very new to HtmlUnit. 我对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. 我想知道我是否能够使用htmlunit登录网站并在网站中执行某些操作,例如我想登录我的办公室门户网站并准备休假。

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 ... 我正在使用html单元,它显示了一些错误,是否可以使用html单元或是否有任何其他工具我可以用于此目的 ...
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. 但是当我打印page2它只显示登录页面的url,并且它没有返回主页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'. 2012年5月28日上午11:44:15 com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify警告:遇到过时的内容类型:'application / x-javascript'。 May 28, 2012 11:44:16 AM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify WARNING: Obsolete content type encountered: 'application/x-javascript'. 2012年5月28日上午11:44:16 com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify警告:遇到过时的内容类型:'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 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 

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 在java中打印页面并查看它使用system.out.println(page1.asText())或asXml取决于你想看到什么

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
        }

this is what you should set for the javascript: 这是你应该为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. 这应该像我一样解决问题。

尝试设置启用cookie,并尝试设置javascript启用忽略它可能打印的错误...(我以前认为红色错误是坏的,在html单位似乎不一定)

If the website uses an ajax call to login. 如果网站使用ajax调用登录。 This worked for me. 这对我有用。 Set this 设置这个

webClient.setAjaxController(new NicelyResynchronizingAjaxController());

This would cause all ajax calls to be synchronous. 这将导致所有ajax调用同步。

This is how I setup my WebClient object 这就是我设置WebClient对象的方法

WebClient webClient = new WebClient(BrowserVersion.CHROME);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setUseInsecureSSL(true);
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
webClient.getCookieManager().setCookiesEnabled(true);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getCookieManager().setCookiesEnabled(true);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM