您的位置: 首页 > 编程笔记

Java 无界面浏览器 HtmlUnit 使用总结

Java HtmlUnit 时间:2019-08-12  查看:13   收藏

一:HtmlUnit介绍

HtmlUnit是一个用java编写的无界面浏览器,建模html文档,通过API调用页面,填充表单,点击链接等等。如同正常浏览器一样操作。典型应用于测试以及从网页抓取信息。

二、常用步骤

1、定义WebClient

webClient = new WebClient();

2、获取页面

HtmlPage page = webClient.getPage("https://www.hao123.com/rili/");// hao123 万年历

3、从页面中获取元素

DomNodeList<DomElement> elementsByTagNameSubmit = page.getElementsByTagName("ul");

4、模拟点击

nextMonthElement.click(); // 点击下一个月

三、获取元素常用方法

1、根据id获取元素

HtmlPage.getElementById(String); 

HtmlPage.getElementsById(String); 

2、根据name获取元素

HtmlPage.getElementByName(String); 

HtmlPage.getElementsByName(String)

3、根据标签名获取元素

page.getElementsByTagName("ul");

4、根据xpath获取元素

page.getByXPath("//div[@class='select_month e_clear']");

四、webClient.getOptions()的常用方法说明

void setCssEnabled(boolean enabled)             //启用/禁用CSS支持。 

void setJavaScriptEnabled(boolean enabled)           //启用/禁用JavaScript支持。  

void setTimeout(int timeout)            //设置该程序的超时。  

void setUseInsecureSSL(boolean useInsecureSSL)         //如果设置为true,客户机将接受与任何主机的连接,而不管它们是否有有效证书  

五、示例代码

示例代码功能:获取hao123万年历日期信息。

WebClient webClient = new WebClient();
webClient.getOptions().setUseInsecureSSL(true);
HtmlPage page = webClient.getPage("https://www.hao123.com/rili/");// hao123 万年历
DomElement dateDomElement = null;
// 等待检查页面是否加载
for (int i = 0; i < 60; i++) {
DomNodeList<DomElement> elementsByTagNameList = page.getElementsByTagName("div");
for (DomElement domElement : elementsByTagNameList) {
//根据目标元素class属性循环匹配
if (domElement.getAttribute("class").equals("select_month e_clear")) {
break;
}
}
Thread.sleep(1000);
}
List<HtmlDivision> list = page.getByXPath("//div[@class='select_month e_clear']");
DomElement nextMonthElement = null;// 页面下一个月元素
for(HtmlDivision htmlDivision : list){
Iterator<DomElement> childElems = htmlDivision.getChildElements().iterator();
while(childElems.hasNext()){
DomElement domElem = childElems.next();
if(domElem.getAttribute("class").equals("right_arrow")){
nextMonthElement = domElem;
break;
}
}
}
nextMonthElement.click(); // 点击下一个月
for (int i = 0; i < 60; i++) {
DomNodeList<DomElement> elementsByTagNameList = page.getElementsByTagName("ul");
for (DomElement domElement : elementsByTagNameList) {
//根据目标元素class属性循环匹配
if (domElement.getAttribute("class").equals("e_clear js-cld-panel")) {
dateDomElement = domElement; 
break;
}
}
Thread.sleep(1000);
}
DomNodeList<HtmlElement> htmlElements = dateDomElement.getElementsByTagName("li");
for (HtmlElement element : htmlElements) {
List<HtmlElement> lunar = element.getElementsByAttribute("div", "class", "lunar_date");// 阴历日期
List<HtmlElement> solar = element.getElementsByAttribute("div", "class", "solar_date");// 阳历日期
if (element.getAttribute("class").indexOf("vacation") != -1) {// 假期
}
if (element.getAttribute("class").indexOf("weekend") != -1 ) {// 周末
}
}




 

0% (0)
0% (0)
0.173674s