简单入门HtmlUnit

原创 2015年07月10日 13:39:22

因为需要,所以有了你,感恩带你来的大神,阿里嘎多~

1、项目地址

     HtmlUnit – Welcome to HtmlUnit   Or   HtmlUnit点击打开链接 :http://sourceforge.net/projects/htmlunit/

2、简介

HtmlUnit说白了就是一个浏览器,这个浏览器是用Java写的无界面的浏览器,正因为其没有界面,因此执行的速度还是可以滴,HtmlUnit提供了一系列的API,这些API可以干的功能比较多,如表单的填充,表单的提交,模仿点击链接,由于内置了Rhinojs引擎,因此可以执行Javascript 。对JS、CSS支持不是很好,但都可以轻易的配置是否启用。

作用:web的自动化测试(最初的目的),浏览器,网络爬虫

3、实例刨析

一个简单的抓取例子,Java代码如下:
final WebClient webClient=new WebClient();
final HtmlPage page=webClient.getPage("http://www.baidu.com/");
System.out.println(page.asText());
webClient.closeAllWindows();

上面的4行代码,运行,就可以得到百度首页的全部内容,上面代码在运行的过程中会出现很多警告,出现这些警告的主要原因是对JS、CSS支持不是很好,可以通过下面的代码配置JS、CSS是否启用:

webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setJavaScriptEnabled(false);

在上面的代码中,可以看到这三个类:WebClient,WebWindow,Page,它们有什么关系呢,不妨这样理解吧:

所有的页面最终都是在一个WebWindow对象里面,WebClient在创建时会自动的创建一个WebWindow对象,当调用getPage时会将新页面加载到WebWindow里,你可以理解成WebClient就是IE内核,WebWindow就是呈现页面的浏览器窗口

4、小小feature入门快

1)模拟特定浏览器,也可以指定浏览器的相应版本
1
2
//模拟chorme浏览器,其他浏览器请修改BrowserVersion.后面
WebClient  webClient=new WebClient(BrowserVersion.CHROME);
2)查找特定元素,通过get或者XPath可以从HtmlPage中获得特定的Html元素

方法一,通过get方法获取

1
2
3
HtmlPage page=webClient.getPage("http://www.baidu.com/");
//从百度上获取div标签id=myId内容
HtmlDivision div=(HtmlDivision)page.getElementById("myId");

方法二,通过XPath获取,XPath通常用于无法通过Id搜索,或者需要更为复杂的搜索时使用

1

List<?> tableList = page.getByXPath("//table[@id='tracing_by_booking_f:hl55']");

3)代理服务器的配置,代理的配置很简单,只需要配置好地址,端口,用户名与密码即可

1
2
3
final WebClient webClient = new WebClient(BrowserVersion.CHROME,"http://127.0.0.1",8087);
final DefaultCredentialsProvider credentialsProvider = (DefaultCredentialsProvider) webClient.getCredentialsProvider();
credentialsProvider.addCredentials("username","password");
4)模拟表单的提交
1
2
3
4
5
6
7
8
9
10
//获取表单 
final HtmlForm form = page.getFormByName("form");
//获取提交按扭
final HtmlSubmitInput button = form.getInputByName("submit");
//一会得输入的
final HtmlTextInput textField = form.getInputByName("userid");
textField.setValueAttribute("test");
//点击提交表单
final HtmlPage page = button.click();

5)获取页中所有的链接
1
2
3
4
java.util.List<HtmlAnchor> achList=page.getAnchors();
for(HtmlAnchor ach:achList){
System.out.println(ach.getHrefAttribute());
}
6)HtmlPage的相关方法,及HtmlInput、等等

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
page.getBody().getTextContent()

page.getTitleText();

page.asXml();

page.asText();

//获取input的默认值
htmlInput.getDefaultValue();

//设置文本框的值

htmlInput.setValueAttribute("values");

//模拟点击效果

htmlInput.click();
//模拟输入文本框
htmlInput.type("用户名");
//获取内嵌iframe
HtmlPage framePage=(HtmlPage)page.getFrameByName("frmTree1").getEnclosedPage();
//获得选择框
HtmlSelect seriesSelect = (HtmlSelect) page.getElementById("countrylst");
//获得所有的选择框内容
List optionList = seriesSelect.getOptions();
//将指定的选项选中
optionList.get(1).setSelected(true);

7)设置发送请求参数
1
2
3
4
5
6
7
8
9
10
11
12
13

String sinaSetUrl = hostSinaUrl + "basic/setting_account";

request = new WebRequest(new URL(sinaSetUrl),HttpMethod.POST);

request.setCharset("utf-8");

request.setRequestParameters(Arrays.asList(                 

new NameValuePair("nickname", nickname),                 

new NameValuePair("pop3", "on"),                 

new NameValuePair("imap", "on")));

client.getPage(request);

8)获取的页面头部信息

getResponseHeaders方法的返回值

0:Date=Tue, 07 Jul 2015 13:05:30 GMT

1:X-Powered-By=Servlet/3.0

2:Pragma=no-cache

3:Cache-Control=no-cache, no-store, must-revalidate

4:Expires=Thu, 01 Jan 1970 00:00:00 GMT

5:Vary=Accept-Encoding

6:Keep-Alive=timeout=60, max=185

7:Connection=Keep-Alive

8:Content-Type=text/html;charset=utf-8

9:Content-Language=en

10:Set-Cookie=TS01a3c52a=013b7b09e098d85f84bac23c1d294c3e11048d7ed19229b7ed7e16e91de8749726c9a6bf; Path=/

11:Transfer-Encoding=chunked

9)HtmlPage执行JS

1
2
ScriptResult sr = htmlPage.executeJavaScript("javascript:document.getElementById('tracing_by_booking_f').submit();");
HtmlPage resultPage = (HtmlPage) sr.getNewPage();

5、结束语

先写这些了,后续有新发现再继续增加咯。祝好运~
版权声明:随意转载。

相关文章推荐

HtmlUnit的简单例子

1.首先下载HtmlUnit的jar包,导入。 package com.shu.htmlUnit; import com.gargoylesoftware.htmlunit.Browser...

HtmlUnit简单用法

Contents 1. 作用 1 2. 获得数据 2 3. 模拟点击 2 4. 超链接 4 5. 关闭 4 6. js支持 4...
  • qqGrid
  • qqGrid
  • 2014年11月03日 20:30
  • 1003

HtmlUnit入门教程

Html入门学习教程。

HtmlUnit测试入门

HtmlUnit是junit的扩展框架之一,该框架模拟浏览器的行为,提供API对网页的元素进行操作。HtmlUnit支持HTTP、HTTPS、COOKIES、表单的POST和GET;能够对HTML文档...

HtmlUnit入门

HtmlUnit

HTMLUNIT学习笔记 & 入门教程 & 黑客实例

htmlunit学习笔记                                                       ...

htmlunit依赖jar包

  • 2017年10月10日 22:11
  • 889KB
  • 下载

htmlunit-2.6

  • 2017年03月30日 14:05
  • 835KB
  • 下载

使用HtmlUnit做爬虫

一 概述       HttpClient适合处理静态资源,网络爬虫等类似应用很大程度需要处理动态网页(内容有js填充,如百度图片,body里基本没有数据,碰到最麻烦的是新浪微博列表页)。将网页下...

htmlunit-2.26

  • 2017年08月15日 13:25
  • 19.6MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:简单入门HtmlUnit
举报原因:
原因补充:

(最多只允许输入30个字)