htmlunit 是一款開源的java 頁面分析工具,讀取頁面后,可以有效的使用htmlunit分析頁面上的內容。項目可以模擬瀏覽器運行,被譽為java瀏覽器的開源實現。這個沒有界面的瀏覽器,運行速度也是非常迅速的。采用的是Rhinojs引擎。模擬js運行。
說白了就是一個瀏覽器,這個瀏覽器是用Java寫的無界面的瀏覽器,正因為其沒有界面,因此執行的速度還是可以滴,HtmlUnit提供了一系列的API,這些API可以干的功能比較多,如表單的填充,表單的提交,模仿點擊鏈接,由於內置了Rhinojs引擎,因此可以執行Javascript。
網頁獲取和解析速度較快,性能較好,推薦用於需要解析網頁腳本的應用場景。
在使用此工具前需要導入htmlunit需要的jar包:

代碼:
public static String url="http://www.XXX.cn/XXX";//抓取數據的地址 public static void main(String[] args) throws IOException, SAXException { WebClient wc = new WebClient(BrowserVersion.FIREFOX_52); wc.getOptions().setJavaScriptEnabled(true); //啟用JS解釋器,默認為true wc.setJavaScriptTimeout(100000);//設置JS執行的超時時間 wc.getOptions().setCssEnabled(false); //禁用css支持 wc.getOptions().setThrowExceptionOnScriptError(false); //js運行錯誤時,是否拋出異常 wc.getOptions().setTimeout(10000); //設置連接超時時間 ,這里是10S。如果為0,則無限期等待 wc.setAjaxController(new NicelyResynchronizingAjaxController());//設置支持AJAX wc.setWebConnection(new WebConnectionWrapper(wc) { public WebResponse getResponse(WebRequest request) throws IOException { WebResponse response = super.getResponse(request); String data= response.getContentAsString(); if (data.contains("{\"js中的數據標識\"")){//判斷抓到的js數據是否是包含抓取的字段 System.out.println(data); writeFile(data);//將js中獲取的數據寫入指定路徑的txt文件中 } return response; } } ); HtmlPage page = wc.getPage(url); System.out.println("page:" + page); try { Thread.sleep(1000);//設置 } catch (InterruptedException e) { e.printStackTrace(); } //關閉webclient wc.close(); } /** * 寫入TXT文件 */ public static void writeFile(String data) { try { File writeName = new File("data.txt"); // 相對路徑,如果沒有則要建立一個新的output.txt文件 writeName.createNewFile(); // 創建新文件,有同名的文件的話直接覆蓋 try{
FileWriter writer = new FileWriter(writeName);
BufferedWriter out = new BufferedWriter(writer); out.write(data); out.flush(); // 把緩存區內容壓入文件 } } catch (IOException e) { e.printStackTrace(); } }
