html 页面工具,html页面工具-htmlUnit

HtmlUnit测试工具的推出,创意非常好。是一款给java开发用的browser。说它是browser,其实它是对html建模并且提供API来访问页面,点击链接等等的java类库。

这样的测试工具有这样几个优点:

运行起来没有界面,速度非常快。

由于是java类库,有无限扩展的可能,可以构造各种功能强大的工具。包括本地化测试,多种数据源输入数据。

跨平台,跨浏览器。java本身就有跨平台的特性,浏览器,只要简单的设定一个参数就可以轻易模仿想要的浏览器了。

转化为性能测试,非常简单,可以共享同一脚本。

官网:http://htmlunit.sourceforge.net/

代码示例:

import java.io.IOException;

import java.net.MalformedURLException;

import java.net.URL;

import java.util.Arrays;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

import com.gargoylesoftware.htmlunit.BrowserVersion;

import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;

import com.gargoylesoftware.htmlunit.HttpMethod;

import com.gargoylesoftware.htmlunit.WebClient;

import com.gargoylesoftware.htmlunit.WebRequest;

import com.gargoylesoftware.htmlunit.html.HtmlForm;

import com.gargoylesoftware.htmlunit.html.HtmlInput;

import com.gargoylesoftware.htmlunit.html.HtmlPage;

import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;

import com.gargoylesoftware.htmlunit.util.NameValuePair;

public class MySina {

private WebClient client;

private WebRequest request;

private String sinaLoginUrl = " http://mail.sina.com.cn/cgi-bin/login.php";

private String hostSinaUrl = "";

public static void main(String[] args) throws FailingHttpStatusCodeException, MalformedURLException, IOException {

String username = "***";

String password = "***";

String newpassword = "***";

String nickname = "***";

MySina mySina = new MySina();

if (mySina.mailLoginBySina(username, password)) { // 登录

mySina.updatePwdBySina(password, newpassword); // 修改密码

mySina.updateNickName(nickname); // 修改帐户昵称

} else {

System.out.println("登录失败!请检查用户名和密码是否正确!");

}

}

public MySina(){

client = new WebClient(BrowserVersion.INTERNET_EXPLORER_8);

client.setJavaScriptEnabled(false);

}

/**

* 更改帐户昵称

*

* @param nickname 昵称

* @return boolean

* @throws FailingHttpStatusCodeException

* @throws IOException

*/

public boolean updateNickName(String nickname) throws FailingHttpStatusCodeException, IOException {

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);

HtmlPage p = client.getPage(hostSinaUrl + "classic/index.php");

if (p.getBody().getTextContent().indexOf(""NickName":"" + nickname + """) > 0) {

return true;

} else {

return false;

}

}

/**

* 修改密码

*

* @param oldpassword 旧密码

* @param newpassword 新密码

* @return boolean

* @throws FailingHttpStatusCodeException

* @throws IOException

*/

public boolean updatePwdBySina(String oldpassword, String newpassword) throws FailingHttpStatusCodeException,

IOException {

String sinaSetUrl = " http://login.sina.com.cn/member/security/password.php";

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

request.setCharset("gbk");

request.setRequestParameters(Arrays.asList(new NameValuePair("pass", oldpassword),

new NameValuePair("pass1", newpassword),

new NameValuePair("pass2", newpassword)));

HtmlPage p = client.getPage(request);

if (p.getBody().getTextContent().indexOf("您的密码修改成功") > 0) {

return true;

} else {

return false;

}

}

/**

* 登录

*

* @param username 用户名

* @param password 密码

* @return boolean

* @throws FailingHttpStatusCodeException

* @throws MalformedURLException

* @throws IOException

*/

public boolean mailLoginBySina(String username, String password) throws FailingHttpStatusCodeException,

MalformedURLException, IOException {

HtmlPage loginPage = client.getPage(sinaLoginUrl);

HtmlForm loginForm = loginPage.getFormByName("free");

HtmlInput u = loginForm.getInputByName("u");

HtmlInput psw = loginForm.getInputByName("psw");

HtmlSubmitInput loginButton = loginForm.getInputByName("登录");

u.setValueAttribute(username);

psw.setValueAttribute(password);

HtmlPage result = loginButton.click();

String resultUrl = result.getUrl().toString();

if (resultUrl.indexOf("classic/index.php") > 0) {

String regex = "http://(.*?)/";

hostSinaUrl = myRegex(resultUrl, regex, null);

if (hostSinaUrl.length() > 0) {

return true;

} else {

return false;

}

} else {

return false;

}

}

/**

* 正则匹配替换

*

* @param str

* @param reg

* @param replace

* @return

*/

public String myRegex(String str, String reg, String[] replace) {

String result = null;

Matcher m = Pattern.compile(reg).matcher(str);

while (m.find()) {

result = m.group();

if (replace != null && replace.length > 0) {

for (String s : replace) {

result = result.replace(s, "");

}

}

}

return result;

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305592.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于电子邮件的InfoPath表单发布的注意点 [Infopath 2007]

让我们先来看看InfoPath 2007提供的其他几种发布方案:1. 将InfoPath模板发布到SharePoint Server或者InfoPath Form Server2. 将InfoPath模板制作成一个安装程序3. 将InfoPath模板发布到一个共享网络地址上方案1,3 都必须依赖已有服务器或网络,而方案2 则…

如何在 C# 8 中使用 Index 和 Range

C# 8 中有几个比较好玩的新特性,比如下面的这两个:System.Index 和 System.Range,分别对应着索引和切片操作,这篇文章将会讨论这两个类的使用。System.Index 和 System.Range 结构体 可以用它们在运行时对集合进行 index 和 slice…

python 廖雪峰数据分析统计服_廖雪峰python教程阅读量统计

统计了下廖老师的python教程各个小节的阅读量(毫无卵用),廖老师网站反爬做的比我们教务系统可是好多了,一定时间内访问次数多会禁止,反正数据量也不多,就慢慢来,基本上也不会对网站造成什么影响…

html点击图片弹出大图特效代码,Jquery 点击图片在弹出层显示大图

使用jquery,实现点击图片在弹出层显示大图,再次点击关闭,加入图片高宽和窗口高宽的大小判断。效果图片如下:1.点击前的效果:2.点击后的效果:html代码如下:弹出层图片Js代码如下:$(fu…

使用ClickOnce部署VS2005中的WinForm应用程序.(ZT)

使用ClickOnce部署VS2005中的WinForm应用程序/Files/chinhr/AA.rarTrackBack:http://blog.oracle.com.cn/155011/viewspace_3603.html

Hybrid-APP技术原理

源宝导读:Hybrid-APP技术不仅具有“Native APP的良好交互体验”同时也具备“Web APP跨平台开发的优势”。既然Hybrid-APP有这么多优势,那么究竟什么样的APP才算Hybrid App呢?本文将分享我们的技术研究成果。一、什么是Hybrid-APP狭义的Hybrid…

复旦计算机考研英语,2020考研复旦计算机专硕392经验贴

2020考研复旦计算机专硕392经验贴之前立flag上岸要写经验贴的,谁知今年复试时间跟初试一样长了,想说的都忘了。。但还是写一份吧每个人情况都不同,每个人都有自己的学习节奏,只希望在你焦虑的(我是这样的)看完这些经验贴后&#x…

基于微软ASP.NET AJAX框架开发幻灯片播放网页

一、 简介 最近,微软ASP.NET Ajax 1.0框架以其完整的基于Ajax的web开发方案呈现在web技术人员的前面,凭借与遗留ASP.NET系统的有机整合以及完全面向对象的客户端JavaScript组件模型两大绝杀正在引起越来越多的基于.NET平台的web开发者的关注。本文应该属…

推荐:.Net 5开源免费的内容管理系统

背景介绍内容管理系统(content management system,CMS)是一种位于WEB 前端(Web 服务器)和后端办公系统或流程(内容创作、编辑)之间的软件系统。内容的创作人员、编辑人员、发布人员使用内容管理…

python怎么安装开发版_python - easy_install的安装和使用

为什么要装easy_install? 正常情况下,我们要给Python安装第三方的扩展包,我们必须下载压缩包,解压缩到一个目录,然后命令行或者终端打开这个目录,然后执行 python setup.py install 来进行安装。 这样是不是很繁琐呢&…

河南信息工程学校计算机组装比赛,计算机技术系承办2019全员化试点项目计算机网络装调赛项...

2019年10月16日,由河南省教育厅主办、河南省职业教研室承办的技能竞赛全员化试点项目“计算机网络装调”赛项在河南信息工程学校开赛,来自全省37所学校的96名选手同台竞技,和谐交流。“计算机网络装调”赛项是2019年河南省中职教育技能竞赛的…

常用網址

论坛: [url]www.smth.org[/url] 水木社区bbs.fobshanghai.com 福步论坛英语: [url]http://www.examda.com/syyy/msyy/[/url]   面试英…

限制IIS站点的内存,避免级联影响

背景 代码写的有问题,会很容易出现内存泄露的问题。应用如果是部署在docker容器里面的,可以限制这个应用的内存。那么,如果是传统的.NET Framework应用,部署在IIS上面呢?老黄曾经遇到过在一台服务器上面,II…

笔记本怎么查看hdmi版本_涨知识丨一文看懂笔记本电脑HDMI接口

上一期文章我们同大家简单介绍了笔记本电脑Type-C接口及其日常用途,今天我们来聊聊笔记本电脑上另一个常备的电脑接口HDMI,它究竟是什么,有哪些用途,我们一一为您揭晓!如图所示,有着HDMI标识的接口就是我们…

中小企业CRM评测-用户交互_易客

用户交互<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />如何评测在这个部分我们应用了用户接口易用性方面的几种测试方法&#xff0c;以客观的评估参测产品在用户接口设计方面的素质。物理操作负担主要是由参测产品完成一组既定…

pdf编辑软件adobe acrobat_分享一款PDF编辑和阅读软件Acrobat

Adobe Acrobat介绍是一款非常好用且功能强大的PDF编辑和阅读软件。可以对PDF文件进行查看、添加注释、填写、签名并发送之外&#xff0c;同时还可以使用一些高级工具来创建、编辑、导出和组织PDF&#xff0c;以及将任何内容转换为高质量的PDF&#xff0c;并在任何屏幕上完美呈现…

诈尸了。不瞒您说,老坑从不填,天天开新坑

诈尸了。你的年更 UP 诈尸了。不瞒您说&#xff0c;我其实有好多乱七八糟的东西想往外捯饬捯饬整理整理。写过博客&#xff0c;发过公众号&#xff0c;做过视频。但是这些对我整理分享知识来说都有一个硬伤&#xff1a;慢。而咱们 IT 工作者&#xff08;哦&#xff0c;还有培训…

打开计算机任务栏有桌面没,电脑桌面任务栏不显示打开的窗口怎么办

我们在使用电脑的时刻&#xff0c;会遇到林林总总的问题&#xff0c;有时刻我们就会遇到我们在桌面打开了一个页面&#xff0c;然则电脑桌面下方的任务栏却不显示打开的窗口&#xff0c;那这是怎么回事呢&#xff1f;我们想要任务栏显示打开的窗口又该怎么做呢&#xff1f;今天…

关闭端口大全

关闭端口大全近来有人问关闭端口的问题&#xff0c;我手头正好有这方面的资料&#xff0c;供大家参考&#xff01;一 、端口大全端口&#xff1a;0服务&#xff1a;Reserved说明&#xff1a;通常用于分析操作系统。这一方法能够工作是因为在一些系统中“0”是无效端口&#xff…

Visual Studio将原生支持WSL 2

喜欢就关注我们吧&#xff01;近日&#xff0c;微软官方宣布旗下的集成开发环境 Visual Studio 将原生支持 WSL 2&#xff0c;这意味着 VS 用户可以在 WSL 2 上进行无缝构建和调试&#xff0c;而无需添加 SSH 连接&#xff0c;提升运行效率。据悉&#xff0c;微软曾在 2019 年将…