首先我们新建一个Maven普通客户端项目,然后打开pom.xml

引入htmlunit支持:

<dependency>
<groupId>net.sourceforge.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
<version>2.26</version>
</dependency>

然后我们写一个测试类,来解析www.baidu.com 获取网页html以及网页文本,这里有点类似httpClient,但是底层执行过程默认多了一个js执行过程(当然htmlunit提供了关闭js解析设置);

package com.demo;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import java.io.IOException;
import java.net.MalformedURLException; import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage; public class HtmlUnitTest { public static void main(String[] args) {
//模拟指定浏览器 使用代理
WebClient webClient=new WebClient(BrowserVersion.FIREFOX_52,"202.106.16.36",3128); // 实例化Web客户端
webClient.getOptions().setCssEnabled(false); // 取消css支持
webClient.getOptions().setJavaScriptEnabled(false); // 取消javascript支持
try {
HtmlPage page=webClient.getPage("http://www.baidu.com"); // 解析获取页面
Thread.sleep(10000); // 休息10秒钟 等待htmlunit执行js HtmlForm form=page.getFormByName("myform"); // 得到搜索Form
HtmlTextInput textField=form.getInputByName("q"); // 获取查询文本框
HtmlSubmitInput button=form.getInputByName("submitButton"); // 获取提交按钮
textField.setValueAttribute("java"); // 文本框“填入”数据
HtmlPage page2=button.click(); // 模拟点击 HtmlTable table=page.getHtmlElementById("table1");
for(HtmlTableRow row:table.getRows()){ // 遍历所有行
for(HtmlTableCell cell:row.getCells()){ // 遍历所有列
System.out.print(cell.asText()+" ");
}
System.out.println();
} HtmlDivision div=page.getHtmlElementById("navMenu"); // 查找指定id的html dom元素
System.out.println(div.asXml());
System.out.println("======================");
DomNodeList<DomElement> aList=page.getElementsByTagName("a"); // 根据tag名称查询所有tag
for(int i=0;i<aList.getLength();i++){
DomElement a=aList.get(i);
System.out.println(a.asXml());
}
System.out.println("======================");
HtmlListItem item =(HtmlListItem) page.getByXPath("//div[@id='navMenu'][1]/ul/li").get(0); // xpath方式
System.out.println(item.asXml()); System.out.println("网页html:"+page.asXml()); // 获取Html
System.out.println("====================");
System.out.println("网页文本:"+page.asText()); // 获取文本
} 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();
}finally{
webClient.close(); // 关闭客户端,释放内存
}
}
}

这里代理IP如何找 ,很多网站都有提供的,我们介绍一个,http://www.66ip.cn

最新文章

  1. Hibernate(3)——实例总结Hibernate对象的状态和ThreadLoacl封闭的session
  2. css3——新盒子定义box-sizing
  3. 解决首次访问jenkins,输入默认密码之后,一直卡住问题
  4. ahb2apb和apb2apb async bridge
  5. eclipse 中发布 maven 项目到 tomcat
  6. C/C++ 不带参数的回调函数 与 带参数的回调函数 函数指针数组 例子
  7. Linux 阿里云挂载新分区
  8. Jquery Ajax方法传递json到action
  9. 应用360云盘与SVN版本管理服务器搭建基于云端的版本控制软件
  10. Java——(二)Java集合容器
  11. symfony2 关于是否需要建立多bundle
  12. break用法
  13. java.lang.NumberFormatException错误及解决方法
  14. 7 种 join
  15. Spark实战记录
  16. Linux那些事儿之我是Hub(大结局)挂起自动化【转】
  17. Mybatis批量insert报错的解决办法【the right syntax to use near &#39;&#39; at line...】
  18. View 的setTag() 和 getTag()
  19. Zepto自定义模块打包构建
  20. Debian - 安装随记

热门文章

  1. pc端和移动端的轮播图实现(只是结构,内容以后慢慢补充)
  2. jQuery基本选择器模块(二)
  3. mybatis学习笔记之基础复习(3)
  4. wpf ComboBox 获取选中项的文本内容
  5. App Store兼容性问题
  6. 查看linux机器cpu、内存环境信息
  7. RabbitMQ学习笔记(5)----RabbitMQ整合Spring
  8. 应用六:Vue之父子组件间的三种通信方式
  9. spring cloud(三) config
  10. javaee 文件的复制