<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>
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")); }); }}