阅读更多

13顶
1踩

编程语言

原创新闻 无畏的Java浏览器HmlUnit2.1发布

2008-04-18 09:08 by 资深记者 kyo100900 评论(4) 有8905人浏览
一款新的纯Java浏览器发布了,它可以采用更高级的方式来处理web页面.比如说:填写表单,点击超链接,访问页面某个指定元素(element)的属性或值时,不再需要你去用创建基于低级别的TCP/IP或HTTP的request来处理它们.只要调用getPage(url)方法就可以让所的HTML,JavaScript以及AJAX自动进行处理.

HtmlUnit最大的亮点就是自动测试web页面,甚至还可以和一些复杂的JavaScript库协同工作.(比如说Google的WebToolkit1.4.60就已经通过测试验证了).某些场合下,还可以用来进行web scraping(注1)或下载网站的内容.

HtmlUnit的2.0版本增加了很多新的特性:

l         W3C的DOM实现

l         Java5支持

l         更好的支持XPath

l         增强对不合法的HTML处理能力(特别是抓数据的时候,个人觉得这个比较重要)

l         增强对JavaScript的支持

而最新的HtmlUnit2.1版本则主要是改善用户反应的一些性能问题.

你可以通过HtmlUnit的官方网站了解更情况,他们期待你的反馈.

下面我们稍微来几个入门例子:

1.       最普通的用法:

public void testHomePage() throws Exception {
    final WebClient webClient = new WebClient();
    final HtmlPage page = (HtmlPage) webClient.getPage("http://htmlunit.sourceforge.net");
assertEquals("HtmlUnit - Welcome to HtmlUnit", page.getTitleText());
}


2.       模拟FireFox2:

public void testHomePage() throws Exception {
    final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_2);
    final HtmlPage page = (HtmlPage) webClient.getPage("http://htmlunit.sourceforge.net");
    assertEquals("HtmlUnit - Welcome to HtmlUnit", page.getTitleText());

}


3.       使用代理:
public void testHomePage() throws Exception {
    final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_2, "http://myproxyserver", 8000);
    final HtmlPage page = (HtmlPage) webClient.getPage("http://htmlunit.sourceforge.net");
    assertEquals("HtmlUnit - Welcome to HtmlUnit", page.getTitleText());
}


4       一个表单提交示例:

public void testHomePage() throws Exception {
    final WebClient webClient = new WebClient();

    // Get the first page
    final HtmlPage page1 = (HtmlPage) webClient.getPage("http://some_url");

    // Get the form that we are dealing with and within that form, 
    // find the submit button and the field that we want to change.
    final HtmlForm form = page1.getFormByName("myform");

    final HtmlSubmitInput button = (HtmlSubmitInput) form.getInputByName("submitbutton");
    final HtmlTextInput textField = (HtmlTextInput) form.getInputByName("userid");

    // Change the value of the text field
    textField.setValueAttribute("root");

    // Now submit the form by clicking the button and get back the second page.
    final HtmlPage page2 = (HtmlPage) button.click();
}


上述代码非常简洁明了,如果你需要这样一个工具,那么让大胆尝试吧.

【注1】Web scraper 是一种与 spider 类似的技术,不过它具有更多合法性问题。scraper 是一种 spider,其目标是为了从 Web 上获取特定的内容,例如产品的成本或服务。scraper 的一种用途是为了获得有竞争力的价格,从而确定给定产品的价格,以便能够制定出自己产品的合理价格或相应地进行宣传。scraper 还可以从很多 Web 站点上搜集大量数据并将这些信息提供给用户。   BTW:我曾经用java的URL类做过此类事情,但现在有了HtmlUnit会更得以应手.
来自: theserverside
13
1
评论 共 4 条 请登录后发表评论
4 楼 cppasm 2008-04-18 22:32
今天刚好用过了,不爽,因为当返回json格式的数据时它就傻眼了,还是只有自己用commons-httpclient来写。
3 楼 jiangyubao 2008-04-18 16:39
很好,很强大,我喜欢
2 楼 funseason 2008-04-18 10:55
我也出一个ruby浏览器好了~
1 楼 Eastsun 2008-04-18 10:13
还有个WebRenderer也蛮强大,是基于Swing的web渲染器,支持HTML 4.01, CSS 1 & 2, SSL, JavaScript, XHTML, XSL etc.
但不是纯JAVA的,使用了Mozilla的DOM解析器

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 详细设计范本

    详细设计说明书 1 引言 1.1编写目的   说明编写这份详细设计说明书的目的,指出预期的读者。 1.2背景   说明:   a.待开发软件系统的名称;   b.本项目的任务提出者、开发者、用户和运行该程序系统的计算中心。 1.3定义   列出本文件中用到专门术语的定义和外文首字母组词的原词组。

  • 软件工程课程实践-项目开发总结报告

    该基金管理系统采用BS结构,由前端界面,后端,数据库组成。系统主要分为基金市场,基金查询,基金管理和用户管理四大功能模块。用户可通过建立个人账户,查看每日基金的各项指标,同时进行购买、抛售以及统计;并且可以查看自己的各项操作记录。该基金管理系统界面简洁美观,功能友好。系统采用了可视化的图表,方便用户可视化地分析数据的对比与变化,给用户更加直观的感受和分析个人的基金,并且通过我们的系统可以在线购买和抛售,免去了一些繁琐的过程,增强了用户体验。1. 可行性分析报告 2. 软件开发计划 3. 软件需求规格说明书

  • 20.9.7 项目开发总结报告

    项目开发总结报告 项目总结最后价值的东西是经验、教训的总结。 项目开发总结报告的编制,根据GB/T 8567-2006的规定,项目总结报告应包含以下几个部分的内容: (1) 引言。标识、系统概述、文档概述。 (2) 引用文件。引用文档的编号、标题、修改版本和日期。 (3)实际开发效果。概要性总结:产品、主要功能和性能、基本流程、进度、费用。 (4)开发工作评价。对生产效率的评价、对产品质量的评价。 (5)缺陷与处理。 (6)经验与教...

  • 无法启动此程序,因为计算机中丢失chrome_elf.dll。尝试重新安装该程序以解决此问题

    问题: 无法启动此程序,因为计算机中丢失chrome_elf.dll。尝试重新安装该程序以解决此问题 如下图:       解决: 看下C:\Windows\SysWOW64下没这个文件   没有的话下载chrome_eft.dll          http://www.gezila.com/ruanjian/xitong/100654.html 把chrome_eft....

  • 项目开发总结报告

    1 引言 1.1编写目的 软件开发中的概要设计,主要解决实现该软件需求的程序模块设计问题。包括如何把该软件程序划分成若干个模块、决定哥哥模块之间的接口、模块之间传递的信息,以及模块构造的设计等。体现了用户需求与应用软件之间的关系,在设计过程中起到了提纲挈领的作用。 1.2背景 开发软件名称:基于安卓开发的《自习任我行》 项目开发成员:杨波、崔海营、周亚豪、闵芮、高琪、蔡容玉、张...

  • 教你怎样做项目开发总结报告[转]

    转自S8S8,觉得自己会用得上,所以存档于此。-----------------------------------------------------教你怎样做项目开发总结报告I 引言 1.1编写目的   说明编写这份项目开发总结报告的目的,指出预期的阅读范围。1.2背景   说明:   a.本项目的名称和所开发出来的软件系统的名称;  b.此软件的任务提出者、开发者、用户及安装此软件的

  • 项目开发文档——项目开发总结报告

    项目开发总结报告 1 引言 1.1 编写目的:阐明编写总结报告的目的并指明读者对象。 1.2 项目背景:说明项目的来源、委托单位、开发单位及主管部门。 1.3 定义:列出报告中所用到的专门术语的定义和缩写词的原意。 1.4参考资料:列出有关资料的作者、标题、编号、发表日期、出版单位或资料来源,可包括:项目的计划任务书、合同或批文;项目开发计划;需求规格说明书;概要设计说明书;详细设计说明书;用户...

  • 研发项目总结格式

    怎样做项目开发总结报告---格式及要点I 引言 1.1编写目的   说明编写这份项目开发总结报告的目的,指出预期的阅读范围。 1.2背景   说明:   a.本项目的名称和所开发出来的软件系统的名称;   b.此软件的任务提出者、开发者、用户及安装此软件的计算中心。 I.3定义   列出本文件中用到的专门术语的定义和外文首字母组词的原词组。 1.4参考资料   列出要用到的参考资料,如:   

  • 软件项目开发总结报告

    此报告是一个建议的软件项目开发总结报告格式,。里面的内容是本人项目开发实习自己的一个总结,非常粗糙。

  • 软件项目总结报告.doc

    NULL 博文链接:https://joneand.iteye.com/blog/913957

  • 软件工程之项目开发总结报告(GB8567-1988)

    做软件工程需要用到的,希望对大家有帮助!

  • 项目开发心得体会

    最近做了个项目,写一个图文直播平台,听上去貌似很简单哈,可事实并不是这回事儿啊,我也是第一次做项目,经历了一波又一波的难点,至今项目尚未完成,处理测试阶段。 项目开始于四周前,因项目需要用python的Flask框架开发,只会python简单语法的我开始学习flask,跟着视频一步一步学,大概学了一周多,然后就做了个小的网站Demo,同时这两周也在确定我们的项目需求。然后第三周,项目启动,我负责

  • 《软件工程导论》课后习题答案

    《软件工程导论》课后习题答案第一章 软件工程概论1.什么是软件危机?软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。这些问题表现在以下几个方面:(1)用户对开发出的软件很难满意。 (2)软件产品的质量往往靠不住。 (3)一般软件很难维护。 (4)软件生产效率很低。 (5)软件开发成本越来越大。 (6)软件成本与开发进度难以估计。 (7)软件技术的发展远远满足不了计算机应用的普及与...

  • 项目开发总结报告 模板

    项目开发总结报告 1 引言 1.1 编写目的:阐明编写总结报告的目的并指明读者对象。 1.2 项目背景:说明项目的来源、委托单位、开发单位及主管部门。 1.3 定义:列出报告中所用到的专门术语的定义和缩写词的原意。 1.4参考资料:列出有关资料的作者、标题、编号、发表日期、出版单位或资料来源,可包括:项目的计划任务书、合同或批文;项目开发计划;需求规格说明书;概要设计说明书;详细设计说明书;用

  • 学习中——项目开发总结

    最近几天,本人进行了第一次项目开发负责前端工作,其中遇到的跨域问题等等 ,截止目前出现的配置及开发问题已得到全部解决。于是利用空闲时间,写一篇文章来记录本次学习的问题总结。

  • 机房收费系统之项目开发总结报告

    目录 1引言... 1 1.1编写目的... 1 1.2背景... 1 1.3定义... 2 1.4参考资料... 2 2实际开发结果... 2 2.1产品... 2 2.2主要功能和性能... 3 2.3基本流程... 4 2.4进度... 6 2.5费用... 6 3开发工作评价... 6 3.1对生产效率的评价... 6 3.2对产品质量

  • 【记在开发中的成长体会】

    偶尔会在那一刻感觉时间过的真快,转眼间,在软件开发之路上已经坚持了接近一年的时间。在这段时间里面,我接触了许多不知道的技术,开发了各种类型的项目,曾经遇到了让我搓手不急的问题,每次发现问题并将它解决的收获是最大的。孔子曾说:“吾日三省吾身——为人谋而不忠乎?与朋友交而不信乎?传不习乎?”,只有多反省自己做过的事情,从中看出自身的长短,不断总结,然后才能进步。在软件开发之路上依是如此。 一.知道得

Global site tag (gtag.js) - Google Analytics