HTML单元 - 使用表单登录到安全网站 - 无法在表单后连接到页面

时间:2012-03-07 21:37:43

标签: htmlunit

我是java htmlunit的新手,所以任何帮助都将不胜感激 - 提前致谢。

我正在尝试使用htmlunit向网页上的表单提交用户名和密码,以使用用户名和密码身份验证进行保护,以反映网络浏览器的操作。该网站本身具有基于表单的授权。

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.Iterator;
import java.util.Set;

//Import htmlunit classes    

import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlForm;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
import com.gargoylesoftware.htmlunit.util.Cookie;


//This Class attempts to submit user and password credentials
//and mirrors how a login button would be clicked on a webpage:

public class submitForm {

    public static void main(String[] args) throws Exception {

        WebClient webClient = new WebClient();

        // Get the first page
        HtmlPage page1 = (HtmlPage) webClient.getPage("http://cmdbjr/frameset.php?ci_name=&ci_id=&ci_type=");

        // Get the form that we are dealing with and within that form,
        // find the submit button and the field that we want to change.
        HtmlForm form = page1.getFormByName("loginform");

        // Enter login and passwd
        form.getInputByName("user_id").setValueAttribute("#####");
        form.getInputByName("password").setValueAttribute("#####");

        // Click "Sign In" button/link
        page1 = (HtmlPage) form.getInputByValue("Log In").click();

        // I added the cookie section but this returns a null pointer exception    
        Set<Cookie> cookie = webClient.getCookieManager().getCookies();

        if(cookie != null){

            Iterator<Cookie> i = cookie.iterator();

            while (i.hasNext()) {

                webClient.getCookieManager().addCookie(i.next());

            }

        }


        //  Get page as Html
        String htmlBody = page1.getWebResponse().getContentAsString();
        //  Save the response in a file
        String filePath = "c:/temp/test_out.html";

        BufferedWriter bw = new BufferedWriter(new FileWriter(new File(filePath)));
        bw.write(htmlBody);
        bw.close();

        // Change the value of the text field
        // userField.setValueAttribute("alwalsh");
        // passwordField.setValueAttribute("1REland6");

        // Now submit the form by clicking the button and get back the second page.
        // final HtmlPage page2 = button.click();


        webClient.closeAllWindows();
    }
}

如果我在没有代码的cookie部分的情况下运行代码,那么我试图访问哪个页面 是在登录页面没有出现后出现错误页面,说我没有连接到互联网。

如果使用cookie部分运行代码错误:

  

在contentWeb.main的线程“main”&gt; java.lang.NullPointerException中的异常(contentWeb.java:26)

返回。

我是java htmlunit的新手,所以任何帮助都会非常感激。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

我用我的雅虎邮箱登录凭据复制了你的例子,但它确实有效。但是,我添加了webClient.setThrowExceptionOnScriptError(false);来忽略脚本错误的异常。