html页面工具-htmlUnit
HtmlUnit测试工具的推出,创意非常好。是一款给java开发用的browser。说它是browser,其实它是对html建模并且提供API来访问页面,点击链接等等的java类库。
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;
}
}
html页面工具-htmlUnit的更多相关文章
- 如何编辑PDF文件,怎么使用PDF裁剪页面工具
在编辑PDF文件的时候,往往会有很多的小技巧可以使用,在编辑PDF文件的时候,怎么对文件的页面进行裁剪呢,不会的话,看看下面的文章吧,小编已经为大家整理好了哦. 1.打开运行PDF编辑器,在编辑器中打 ...
- jekyll介绍安装.github静态页面工具
jekyll build # => 当前文件夹中的内容将会生成到 ./site 文件夹中. $ jekyll build --destination <destination> # ...
- 微软Connect教程系列--自动生成增删改查页面工具介绍(二)
本章课程描述了vs2015的三个特点,其中主要将描述在vs2015下面,使用命令自动生成增删改查界面,具体如下: 1.web.config文件不在存在,用config.json替代,以适应支撑vs的插 ...
- Javascrpt 页面工具
/** * 笔者:DL * 时间:2014-3-19 * PagingTool模块提供最基本的.网页工具栏.和页面数据 回电话 可扩展性 分页工具栏介绍,和页面呈现的数据 * 主意 ...
- ASP.NET 数据库页面访问简单工具
在工作中,有很多项目已上线后,很多项目的数据库服务器都不会对外开放的,外网想直接访问客户数据库服务器时,可能会出现困难. 这时就需要一个可以查询,更新数据库操作的页面了: 本来用sql语句直接操作数据 ...
- [转]以Facebook为案例剖析科技公司应有的工具文化
原文:http://36kr.com/p/146507.html 这是一篇几年前的文章,但对于没有涉及到工具文化这个概念的人来说,还是很新的. 前言 前段时间和大众点评的 CEO 张涛聊天的时候碰到内 ...
- ArcGIS空间分析工具
1. 3D分析 1.1. 3D Features toolset 工具 工具 描述 3D Features toolset (3D 要素工具集) Add Z Information 添加 Z 信息 添 ...
- 自定义tld标签,页面使用
背景需求: 系统本身的session不能在页面使用 如下: controller: @RequestMapping(method=RequestMethod.GET) public String ge ...
- 以Facebook为案例剖析科技公司应有的工具文化
http://www.36kr.com/p/146507.html 编者按:本文由 @王淮Harry哥 撰写,摘自他即将出版的新书.王淮是 Facebook 早期员工,中国藉第二位工程师第一位研发经理 ...
随机推荐
- php页面静态化,ob缓存方法
<?php ob_start();//开启缓存 //要生成静态网页的内容开始 ?> 中间的html代码 <?php //要生成静态网页的内容结束 //把生成的静态内容保存到文件,而不 ...
- LOJ.6281.数列分块入门5(分块 区间开方)
题目链接 int内的数(也不非得是int)最多开方4.5次就变成1了,所以还不是1就暴力,是1就直接跳过. #include <cmath> #include <cstdio> ...
- Shiro笔记(二)身份验证
Shiro笔记(二)身份验证 一.核心代码 @Test public void helloWorldTest(){ IniSecurityManagerFactory factory = new In ...
- tomcat能正常启动但是访问项目的welcome界面出现404
http://www.linuxidc.com/Linux/2017-03/141986.htm http://blog.csdn.net/shasiqq/article/details/513026 ...
- CocosCreator小栗子
主要是了解了场景切换的API,见下: 开始场景和结束场景内,按钮挂相同的Btn脚本,主要是切换到场景2中: Btn脚本如下, onLoad:function() { this.node.on('mou ...
- google ctemplate——c++模板引擎
1 概述 在进行web开发时,使用传统的CGI方式,在C/C++程序里面既要处理逻辑,也要处理页面显示内容,会比较混乱.可以通过模板引擎,使得逻辑与显示的分离.Google CTemplate就是其中 ...
- 游戏保护大放送之GPK
GPK也没有啥特别.龙之谷多开检测和别的不一样. #include "struct.h" #include "FGPK.h" ///////////////// ...
- Mybatis 中遍历map 参数中的 list 和 array 属性
原文:https://blog.csdn.net/liudongdong0909/article/details/51048835 问题在项目有中遇到批量删除操作时,需要根据两个属性去删除数据,其中一 ...
- RxJava2 源码解析(一)
概述 最近事情太多了,现在公司内部的变动,自己岗位的变化,以及最近决定找工作.所以博客耽误了,准备面试中,打算看一看RxJava2的源码,遂有了这篇文章. 不会对RxJava2的源码逐字逐句的阅读,只 ...
- Java中的语法糖
一.范型 1. C#和Java范型的区别 在C#中范型是切实存在的,List<int>和List<String>就是两种不同的类型,它们在系统运行期间生成,有自己的虚方法表和类 ...