用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對象,我們可以用它來獲得表單。

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

獲得一個HtmlElement對象,可以根據html的id、name來獲取,如果都沒有,也可以用Xpath語法來獲取htmlElement對象

//獲得name為"登陸"的html元素
HtmlElement htmlElement = page.getElementByName("登陸"); 

獲得后,“點擊”這個htmlElement。返回的是點擊百度的“登陸”后的頁面

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

這樣當前的page2就是百度的登陸頁面,那么我們要填寫表單然后提交表單登陸。

還是先獲取HtmlElement元素

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

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

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("登陸失敗");
        }

 

 






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM