模拟浏览器的神器 - HtmlUnit
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相关推荐
- 模拟浏览器自动化测试工具Selenium之五Centos系统命令行下部署selenium环境试验
一.背景: Selenium是一个web自动化测试框架,也支持从HTML页面上爬取javascript生成的或AJAX的内容. selenium2支持通过各种driver(Firfox ...
- 模拟浏览器自动化测试工具Selenium之一eclipse集成开发部署篇
1.背景:在网页自动化测试和网页表单自动交互的场景中,对动态js页面的加载,隐藏链接爬虫和表单元素需要加载js来解析. htmlunit相比较于htmlparser以及httpclient只能解析静态 ...
- python 模拟浏览器selenium_使用Selenium模拟浏览器,实现自动爬取数据
最近需要在一个网站下载一批数据.但是输入一个查询,返回三四万条结果,每次只能导出500条,而且每次还得输入下载条目的范围!这样点击下载,还不要了我的老命.于是乎想自动化这个过程. 我的需求主要是两点: ...
- Python爬虫之selenium爬虫,模拟浏览器爬取天猫信息
由于工作需要,需要提取到天猫400个指定商品页面中指定的信息,于是有了这个爬虫.这是一个使用 selenium 爬取天猫商品信息的爬虫,虽然功能单一,但是也算是 selenium 爬虫的基本用法了. ...
- java 模拟浏览器 htmlunit_htmlunit 模拟指定浏览器
前面我们的测试代码是直接请求的,有些网站服务器防火墙会直接拒绝访问. 我们现在用htmlunit来模拟下浏览器请求:主要是加了一些头消息: 这个是我们用火狐调试工具看到的请求头小心里的属性,当然上面还 ...
- Java模拟浏览器工具HtmlUnit-登陆实践
HtmlUnit简介 HtmlUnit是一个可以模拟浏览器请求的java工具包,官网链接 ,基本实现浏览器基础功能,包括: 加载js,css 执行ajax 处理表单 保存cookies等 本篇文章简单 ...
- python模块学习---mechanize(模拟浏览器)
mechanize是非常合适的模拟浏览器的模块. 它的特点主要有: 1 http,https协议等. 2 简单的HTML表单填写. 3 浏览器历史记录和重载. 4 Referer的HTTP头的正确添加 ...
- python写页面发送post请求_Python模拟浏览器向CSDN发送post请求的方法,POST
目录 1.发送get请求的方法 import requests import json def GET(url): #get请求 req = requests.get(url) #输出状态码 prin ...
- python刷新页面_Python模拟浏览器爬取天猫信息
由于工作需要,需要提取到天猫400个指定商品页面中指定的信息,于是有了这个爬虫.这是一个使用 selenium 爬取天猫商品信息的爬虫,虽然功能单一,但是也算是 selenium 爬虫的基本用法了. ...
最新文章
- swift_026(Swift 的类型转换)
- 探究java-JVM的五步(三步)类加载机制(包含类加载过程的一些代码书写,如类加载代码)
- 大数据技术 思维导图
- Oralce定时任务实际应用
- Java初级笔记-第一章
- HttpClient 使用证书访问https站点
- vue学习笔记-接口调用-axios
- 奎享添加自己字体_文泰刻绘怎么添加字体 新字体导入与添加步骤教程
- 群晖通过计划任务挂载USB盘做主力下载盘
- 微信小程序分享二维码扫码进入如何获取参数,小程序码进入参数为啥拿不到;
- [转]采购订单或采购申请审批状态为IN PROCESS的解决方法
- 解决IOS引入H5页面Safari浏览器工具栏会遮挡页面底部展示
- Keil暗色模式配置文件
- Linux 不能命令补全,Linux 命令未自动提示补全
- Red Hat 向开发者免费提供企业版Red Hat Linux
- 双系统重装Ubuntu
- android app trifit_Android人脸识别app——基于Face++,MVP+Retofit+RxJava+Dagger高度解耦
- 普通本科毕业一年,刷完这1000道JAVA面试题,成功逆袭上岸
- 已解决解压zip文件,抛出异常:不可预料的压缩文件末端的正确解决方法(亲测有效)
- ORACLE 9i卸载并重新安装