java htmlunit是什么,讓我們一起了解一下?
htmlunit是一款開源的java頁面分析工具,讀取頁面后,可以有效的使用htmlunit分析頁面上的內容。項目可以模擬瀏覽器運行,被譽為java瀏覽器的開源實現,是一個沒有界面的瀏覽器,運行速度迅速。
htmlunit的主要用途是什么?
常規意義上,該項目可以用來進行頁面的測試工作,實現網頁自動化測試,(包括JS)
但是一般來說,在小型爬蟲項目中,這種框架十分常用,可以有效的分析出 dom的標簽,并且有效的運行頁面上的js以便得到一些需要執行JS才能得到的值。
HtmlUnit使用方法是什么?
1、新建maven工程,添加HtmlUnit依賴:
????????????net.sourceforge.htmlunit????????htmlunit????????2.27
2、新建一個Junit TestCase來嘗試一下程序庫的使用。
程序代碼注釋如下:
package?xuyihao.util.depend; import?com.gargoylesoftware.htmlunit.BrowserVersion; import?com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController; import?com.gargoylesoftware.htmlunit.WebClient; import?com.gargoylesoftware.htmlunit.html.HtmlPage; import?org.jsoup.Jsoup; import?org.jsoup.nodes.Document; import?org.jsoup.nodes.Element; import?org.junit.Test; import?java.util.List; /** ?*?Created?by?xuyh?at?2017/11/6?14:03. ?*/ public?class?HtmlUtilTest?{ ????@Test ????public?void?test()?{ ????????final?WebClient?webClient?=?new?WebClient(BrowserVersion.CHROME);//新建一個模擬谷歌Chrome瀏覽器的瀏覽器客戶端對象 ????????webClient.getOptions().setThrowExceptionOnScriptError(false);//當JS執行出錯的時候是否拋出異常,?這里選擇不需要 ????????webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);//當HTTP的狀態非200時是否拋出異常,?這里選擇不需要 ????????webClient.getOptions().setActiveXNative(false); ????????webClient.getOptions().setCssEnabled(false);//是否啟用CSS,?因為不需要展現頁面,?所以不需要啟用 ????????webClient.getOptions().setJavaScriptEnabled(true);?//很重要,啟用JS ????????webClient.setAjaxController(new?NicelyResynchronizingAjaxController());//很重要,設置支持AJAX ????????HtmlPage?page?=?null; ????????try?{ ????????????page?=?webClient.getPage("http://ent.sina.com.cn/film/");//嘗試加載上面圖片例子給出的網頁 ????????}?catch?(Exception?e)?{ ????????????e.printStackTrace(); ????????}finally?{ ????????????webClient.close(); ????????} ????????webClient.waitForBackgroundJavaScript(30000);//異步JS執行需要耗時,所以這里線程要阻塞30秒,等待異步JS執行結束 ????????String?pageXml?=?page.asXml();//直接將加載完成的頁面轉換成xml格式的字符串 ????????//TODO?下面的代碼就是對字符串的操作了,常規的爬蟲操作,用到了比較好用的Jsoup庫 ????????Document?document?=?Jsoup.parse(pageXml);//獲取html文檔 ????????List?infoListEle?=?document.getElementById("feedCardContent").getElementsByAttributeValue("class",?"feed-card-item");//獲取元素節點等 ????????infoListEle.forEach(element?->?{ ????????????System.out.println(element.getElementsByTag("h2").first().getElementsByTag("a").text()); ????????????System.out.println(element.getElementsByTag("h2").first().getElementsByTag("a").attr("href")); ????????}); ????} }
以上就是小編今天的分享了,希望可以幫助到大家。