2019独角兽企业重金招聘Python工程师标准>>>

随着Web的发展,RIA越来越多,JavaScript和Complex AJAX Libraries给网络爬虫带来了极大的挑战,解析页面的时候需要模拟浏览器执行JavaScript才能获得需要的文本内容。

好在有一个Java开源项目HtmlUnit,它能模拟Firefox、IE、Chrome等浏览器,不但可以用来测试Web应用,还可以用来解析包含JS的页面以提取信息。

下面看看HtmlUnit的效果如何:

首先,建立一个maven工程,引入junit依赖和HtmlUnit依赖:

<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.8.2</version><scope>test</scope>
</dependency>
<dependency><groupId>net.sourceforge.htmlunit</groupId><artifactId>htmlunit</artifactId><version>2.14</version>
</dependency>

其次,写一个junit单元测试来使用HtmlUnit提取页面信息:

/*** 使用HtmlUnit模拟浏览器执行JS来获取网页内容* @author 杨尚川*/
public class HtmlUnitTest {@Testpublic void homePage() throws Exception {final WebClient webClient = new WebClient(BrowserVersion.INTERNET_EXPLORER_11);final HtmlPage page = webClient.getPage("http://yangshangchuan.iteye.com");Assert.assertEquals("杨尚川的博客 - ITeye技术网站", page.getTitleText());final String pageAsXml = page.asXml();Assert.assertTrue(pageAsXml.contains("杨尚川,系统架构设计师,系统分析师,2013年度优秀开源项目APDPlat发起人,资深Nutch搜索引擎专家。多年专业的软件研发经验,从事过管理信息系统(MIS)开发、移动智能终端(Win CE、Android、Java ME)开发、搜索引擎(nutch、lucene、solr、elasticsearch)开发、大数据分析处理(Hadoop、Hbase、Pig、Hive)等工作。目前为独立咨询顾问,专注于大数据、搜索引擎等相关技术,为客户提供Nutch、Lucene、Hadoop、Solr、ElasticSearch、HBase、Pig、Hive、Gora等框架的解决方案、技术支持、技术咨询以及培训等服务。"));final String pageAsText = page.asText();Assert.assertTrue(pageAsText.contains("[置顶] 国内首套免费的《Nutch相关框架视频教程》(1-20)"));webClient.closeAllWindows();}@Testpublic void homePage_Firefox() throws Exception {final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_24);final HtmlPage page = webClient.getPage("http://yangshangchuan.iteye.com");        Assert.assertEquals("杨尚川的博客 - ITeye技术网站", page.getTitleText());webClient.closeAllWindows();}@Testpublic void getElements() throws Exception {final WebClient webClient = new WebClient(BrowserVersion.CHROME);final HtmlPage page = webClient.getPage("http://yangshangchuan.iteye.com");final HtmlDivision div = page.getHtmlElementById("blog_actions");//获取子元素Iterator<DomElement> iter = div.getChildElements().iterator();while(iter.hasNext()){System.out.println(iter.next().getTextContent());}//获取所有输出链接for(HtmlAnchor anchor : page.getAnchors()){System.out.println(anchor.getTextContent()+" : "+anchor.getAttribute("href"));}webClient.closeAllWindows();}@Testpublic void xpath() throws Exception {final WebClient webClient = new WebClient();final HtmlPage page = webClient.getPage("http://yangshangchuan.iteye.com");//获取所有博文标题final List<HtmlAnchor> titles = (List<HtmlAnchor>)page.getByXPath("/html/body/div[2]/div[2]/div/div[16]/div/h3/a");for(HtmlAnchor title : titles){System.out.println(title.getTextContent()+" : "+title.getAttribute("href"));}//获取博主信息final HtmlDivision div = (HtmlDivision) page.getByXPath("//div[@id='blog_owner_name']").get(0);System.out.println(div.getTextContent());webClient.closeAllWindows();}@Testpublic void submittingForm() throws Exception {final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_24);final HtmlPage page = webClient.getPage("http://www.oschina.net");// Form没有name和id属性final HtmlForm form = page.getForms().get(0);final HtmlTextInput textField = form.getInputByName("q");final HtmlButton button = form.getButtonByName("");textField.setValueAttribute("APDPlat");final HtmlPage resultPage = button.click();final String pageAsText = resultPage.asText();Assert.assertTrue(pageAsText.contains("找到约"));Assert.assertTrue(pageAsText.contains("条结果"));        webClient.closeAllWindows();}
}

最后,我们运行单元测试, 全部通过测试!

转载于:https://my.oschina.net/apdplat/blog/217586

模拟浏览器的神器 - HtmlUnit相关推荐

  1. 模拟浏览器自动化测试工具Selenium之五Centos系统命令行下部署selenium环境试验

    一.背景:     Selenium是一个web自动化测试框架,也支持从HTML页面上爬取javascript生成的或AJAX的内容.     selenium2支持通过各种driver(Firfox ...

  2. 模拟浏览器自动化测试工具Selenium之一eclipse集成开发部署篇

    1.背景:在网页自动化测试和网页表单自动交互的场景中,对动态js页面的加载,隐藏链接爬虫和表单元素需要加载js来解析. htmlunit相比较于htmlparser以及httpclient只能解析静态 ...

  3. python 模拟浏览器selenium_使用Selenium模拟浏览器,实现自动爬取数据

    最近需要在一个网站下载一批数据.但是输入一个查询,返回三四万条结果,每次只能导出500条,而且每次还得输入下载条目的范围!这样点击下载,还不要了我的老命.于是乎想自动化这个过程. 我的需求主要是两点: ...

  4. Python爬虫之selenium爬虫,模拟浏览器爬取天猫信息

    由于工作需要,需要提取到天猫400个指定商品页面中指定的信息,于是有了这个爬虫.这是一个使用 selenium 爬取天猫商品信息的爬虫,虽然功能单一,但是也算是 selenium 爬虫的基本用法了. ...

  5. java 模拟浏览器 htmlunit_htmlunit 模拟指定浏览器

    前面我们的测试代码是直接请求的,有些网站服务器防火墙会直接拒绝访问. 我们现在用htmlunit来模拟下浏览器请求:主要是加了一些头消息: 这个是我们用火狐调试工具看到的请求头小心里的属性,当然上面还 ...

  6. Java模拟浏览器工具HtmlUnit-登陆实践

    HtmlUnit简介 HtmlUnit是一个可以模拟浏览器请求的java工具包,官网链接 ,基本实现浏览器基础功能,包括: 加载js,css 执行ajax 处理表单 保存cookies等 本篇文章简单 ...

  7. python模块学习---mechanize(模拟浏览器)

    mechanize是非常合适的模拟浏览器的模块. 它的特点主要有: 1 http,https协议等. 2 简单的HTML表单填写. 3 浏览器历史记录和重载. 4 Referer的HTTP头的正确添加 ...

  8. python写页面发送post请求_Python模拟浏览器向CSDN发送post请求的方法,POST

    目录 1.发送get请求的方法 import requests import json def GET(url): #get请求 req = requests.get(url) #输出状态码 prin ...

  9. python刷新页面_Python模拟浏览器爬取天猫信息

    由于工作需要,需要提取到天猫400个指定商品页面中指定的信息,于是有了这个爬虫.这是一个使用 selenium 爬取天猫商品信息的爬虫,虽然功能单一,但是也算是 selenium 爬虫的基本用法了. ...

最新文章

  1. swift_026(Swift 的类型转换)
  2. 探究java-JVM的五步(三步)类加载机制(包含类加载过程的一些代码书写,如类加载代码)
  3. 大数据技术 思维导图
  4. Oralce定时任务实际应用
  5. Java初级笔记-第一章
  6. HttpClient 使用证书访问https站点
  7. vue学习笔记-接口调用-axios
  8. 奎享添加自己字体_文泰刻绘怎么添加字体 新字体导入与添加步骤教程
  9. 群晖通过计划任务挂载USB盘做主力下载盘
  10. 微信小程序分享二维码扫码进入如何获取参数,小程序码进入参数为啥拿不到;
  11. [转]采购订单或采购申请审批状态为IN PROCESS的解决方法
  12. 解决IOS引入H5页面Safari浏览器工具栏会遮挡页面底部展示
  13. Keil暗色模式配置文件
  14. Linux 不能命令补全,Linux 命令未自动提示补全
  15. Red Hat 向开发者免费提供企业版Red Hat Linux
  16. 双系统重装Ubuntu
  17. android app trifit_Android人脸识别app——基于Face++,MVP+Retofit+RxJava+Dagger高度解耦
  18. 普通本科毕业一年,刷完这1000道JAVA面试题,成功逆袭上岸
  19. 已解决解压zip文件,抛出异常:不可预料的压缩文件末端的正确解决方法(亲测有效)
  20. ORACLE 9i卸载并重新安装

热门文章

  1. 量子计算技术发展迅猛,商业潜力初现!如何把握量子计算时代的新机遇?
  2. 【关注】人类的智力是如何发展起来的?《自然》发布三大科学假说
  3. 麦肯锡AI应用报告:深度学习是蓝海还是深坑?
  4. 2018全球100个最有价值的科技品牌 18个中国品牌上榜
  5. 平均月薪 21.8k、中国开发者占比最高,揭晓 Go 语言真实现状!
  6. 面向全场景的鸿蒙操作系统能有多安全?
  7. 离开一线互联网大厂的年轻人在想什么?
  8. 【转】Python3 (入门6) 库的打包与安装
  9. skyline粒子效果xml获取
  10. 《可穿戴创意设计:技术与时尚的融合》一一第3章 从纺织品到可穿戴设备