官方網址:http://htmlunit.sourceforge.net/
有時候你需要模擬瀏覽器,HtmlUnit 就是個不錯的選擇
像 網頁中js 中的內容,如果你想用爬蟲爬取的話,用Jsoup 就不怎么行了,但是HtmlUnit 就是個不錯的選擇
(1) HtmlUnit模擬表單提交
下面的代碼是模擬在百度里搜索 "root" 得到的page2 就是百度搜索"root" 的結果
package com.xinsearch; import java.io.IOException; import java.net.MalformedURLException; import com.gargoylesoftware.htmlunit.BrowserVersion; import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; 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; public class Test { public static void main(String[] args) { try { WebClient client=new WebClient(BrowserVersion.FIREFOX_10); HtmlPage page=client.getPage("http://www.baidu.com/"); HtmlForm form = page.getFormByName("f"); HtmlTextInput text= form.getInputByName("wd"); HtmlSubmitInput submit = form.getInputByValue("百度一下"); text.setValueAttribute("root"); HtmlPage page2=submit.click(); System.out.println(page2.asXml()); } catch (FailingHttpStatusCodeException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
結果就不列出了
(2) 得到元素的方法有很多 下面寫的是根據 Attribute 的方法
List<HtmlElement> body=page.getDocumentElement().getElementsByAttribute("div", "class", "item");
try { WebClient webClient=new WebClient(BrowserVersion.FIREFOX_10); //這一步是創建一個模擬瀏覽器,使用瀏覽器版本為FIREFOX10.0,可以更改,如果 //使用這個瀏覽器不能解決問題的時候,可以更換CHROME or IE URL url; url = new URL("http://www.baidu.com"); //創建一個url連接 HtmlPage page = webClient.getPage(url); //使用模擬瀏覽器對這個鏈接發送請求 HtmlInput input=(HtmlInput)page.getDocumentElement().getElementsByAttribute("input", "id", "kw").get(0); //獲取輸入框 input.setAttribute("value", "哪兒買"); //然后設置輸入框的屬性值 HtmlInput active=(HtmlInput) page.getDocumentElement().getElementsByAttribute("input","id","su").get(0); //獲取你需要操縱的那個按鈕 HtmlPage result=active.click(); //然后觸發按鈕上綁定的javascript事件,得到一個新的頁面,這個頁面就是從服務器//響應得到的 System.out.println(result.asXml()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }