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 早期员工,中国藉第二位工程师第一位研发经理 ...
随机推荐
- java计算某个坐标是否在范围内
java电子围栏 圆.矩形.多边形算法 http://blog.csdn.net/deepak192/article/details/79402694/ java-经纬度有关的计算(半径内的经纬度范围 ...
- Python不定参数函数
1. 元组形式 def test1(*args): print('################test1################') print(type(args)) print(arg ...
- C/C++中的常量指针与指针常量(转)
常量指针 常量指针是指向常量的指针,指针指向的内存地址的内容是不可修改的. 常量指针定义“const int *p=&a;”告诉编译器,*p是常量,不能将*p作为左值进行操作.但这里的指针p还 ...
- I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
问题: 安装TensorFlow(CPU版本),使用pip install tensorflow安装,安装一切顺利,但是在跑一个简单的程序时,遇到如下情况: 大概意思是:你的CPU支持AVX扩展,但是 ...
- linux-批量杀死进程
kill `ps -ef|grep 进程名 | grep -v grep|awk '{print $2}'` 例如: kill `ps -ef | grep /etc/pam.d/su |grep - ...
- 〖Android〗从Android Studio转为Eclipse开发项目运行程序闪退的解决方法
很久没有撸Android App开发了- 最近把一个月前通过反编译.二次修改的Android SSHD项目进行简单修改一下: 突然发现迁移项目时,报了一个错误,同时还出现了闪退情况: - ::): t ...
- 外网IP监测上报程序(使用Poco库的SMTPClientSession发送邮件)
目录 IPReport 项目介绍 编译说明 安装使用说明 获取外网IP方式 邮件发送关键代码 IPReport 代码地址https://gitee.com/solym/IPReport 项目介绍 外网 ...
- Newtonsoft.Json2.0下面序列化和反序列化
序列化 string xml = JavaScriptConvert.SerializeObject(dataTable); 反序列化 JavaScriptConvert.DeserializeObj ...
- Android——进程通信/ AIDL/Message相关知识总结贴
Android多进程通信 http://www.apkbus.com/android-83462-1-1.html Android 跨进程通信(一) http://www.apkbus.com/and ...
- jquery ajax IE
在ie上会出现,get/post 只调用一次的现象 解决方法: cache:false http://stackoverflow.com/questions/8841425/how-to-set-ca ...