用Java模擬網站登陸(二)

本文爲原創,轉載請聲明來源和做者,謝謝!
做者:_cha1R

上一篇文章《用Java模擬網站登陸》介紹過,模擬一些如百度、QQ之類的網站登陸?有兩個方式,一是發送模擬請求,二是模擬瀏覽器操做。那麼此次介紹第二種方式,模擬瀏覽器操做。這個可能知道的人很少,它並無HttpClient那麼出名。當初我在學習它的時候,在百度幾乎搜索不到關於它的資料,幸好咱們還能夠用Google。它叫htmlunit。

htmlunit:A java GUI-Less browser, which allows high-level manipulation of web pages, such as filling forms and clicking links; just getPage(url), find a hyperlink, click() and you have all the HTML, JavaScript, and Ajax are automatically processed.

簡單翻譯下介紹:一個Java代碼版瀏覽器,它沒有圖形界面。它能夠容許使用網頁的一些高級操做,如填寫表單、點擊連接。你只須要調用getPage(url)方法,而後找到一個超連接,調用click()方法點擊它,你就能夠獲得點擊後返回的頁面。包括Javascript、Ajax、cookie等都是自動處理的。

換言之,瀏覽器能作什麼,它就能作什麼。它能夠模擬瀏覽器大部分操做,包括解析Js、css!

在使用它以前,作好準備工做:
http://sourceforge.net/projects/htmlunit/files/上下載htmlunit-2.13-bin.zip,解壓後導入到項目裏。

導入完之後,模擬一個登錄的過程:
首先建立一個WebClient對象,這個對象跟HttpClient對象有幾分類似,一樣是一個瀏覽器對象,能夠用它來作點瀏覽器能夠作的事情。
WebClient webClient =  new WebClient();//建立WebClient

它能夠打開一個網址,返回一個HtmlPage對象,咱們能夠用它來得到表單。css

HtmlPage page = webClient.getPage("http://www.baidu.com/");    //打開百度

得到一個HtmlElement對象,能夠根據html的id、name來獲取,若是都沒有,也能夠用Xpath語法來獲取htmlElement對象html

//得到name爲"登錄"的html元素
HtmlElement htmlElement = page.getElementByName("登錄"); 

得到後,「點擊」這個htmlElement。返回的是點擊百度的「登錄」後的頁面java

page = htmlElement.click();//調用click()方法

這樣當前的page2就是百度的登錄頁面,那麼咱們要填寫表單而後提交表單登錄。web

仍是先獲取HtmlElement元素瀏覽器

//得到name爲"username"的html元素
HtmlElement usernameEle = page.getElementByName("username"); 
//得到id爲"password"的html元素
HtmlElement passwordEle = (HtmlElement)page.getElementById("password");

填寫這兩個表單元素,用type()方法,注意先設置焦點:cookie

usernameEle.focus();   //設置輸入焦點
usernameEle.type("username123");  //填寫值

passwordEle.focus();   //設置輸入焦點
passwordEle.type("mypassword");  //填寫值

填寫完後,提交登錄表單學習

//得到name爲"登錄"的元素 
HtmlElement submitEle = page.getElementByName("登錄"); 
//點擊「登錄」
page = submitEle.click();

click()完之後,會返回click()後的HtmlPage對象,咱們能夠用它來判斷是否登錄成功測試

String result = page.asXml();//得到click()後的html頁面(包括標籤)
if(result.contains("登錄成功!")){
     System.out.println("登錄成功");     
}else{
     System.out.println("登錄失敗");
}

 

下面附上整個代碼以便測試:網站

WebClient webClient =  new WebClient();//建立WebClient
        HtmlPage page = webClient.getPage("http://www.baidu.com/");    //打開百度
        //得到name爲"登錄"的html元素
        HtmlElement htmlElement = page.getElementByName("登錄"); 
        page = htmlElement.click();//調用click()方法
        //得到name爲"username"的html元素
        HtmlElement usernameEle = page.getElementByName("username"); 
        //得到id爲"password"的html元素
        HtmlElement passwordEle = (HtmlElement) page.getElementById("password");
        usernameEle.focus();   //設置輸入焦點
        usernameEle.type("username123");  //填寫值

        passwordEle.focus();   //設置輸入焦點
        passwordEle.type("mypassword");  //填寫值
        //得到name爲"登錄"的元素 
        HtmlElement submitEle = page.getElementByName("登錄"); 
        //點擊「登錄」
        page = submitEle.click();
        String result = page.asXml();//得到click()後的html頁面(包括標籤)
        if(result.contains("登錄成功!")){
             System.out.println("登錄成功");     
        }else{
             System.out.println("登錄失敗");
        }
相關文章
相關標籤/搜索