htmlunit使用小例子:模拟新浪邮箱登录、修改密码、更改帐号昵称
2011-09-07 16:23
218 查看
为了用Java编写一个邮件群发软件,接触到了htmlunit,没太大技术含量,仅是使用htmlunit经验。
没太大技术含量,仅是使用htmlunit经验。
附上htmlunit jar文件和API http://files.cnblogs.com/skillCoding/htmlunit-2.9-bin.zip
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; } }
没太大技术含量,仅是使用htmlunit经验。
附上htmlunit jar文件和API http://files.cnblogs.com/skillCoding/htmlunit-2.9-bin.zip
相关文章推荐
- Android高效率编码-第三方SDK详解系列(二)——Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能
- Android高效率编码-第三方SDK详解系列(二)——Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能
- 使用htmlunit工具来实现对新浪的模拟登录获取cookie操作(也可适用其他网站,最好是无验证码的)
- 修改SVN登录帐号和密码
- SpringCloud(第 013 篇)电影微服务使用定制化 Feign 在客户端进行负载均衡调度并为 Feign 配置帐号密码登录认证 Eureka
- eclipse 中main()函数中的String[] args如何使用?通过String[] args验证账号密码的登录类?静态的主方法怎样才能调用非static的方法——通过生成对象?在类中制作一个方法——能够修改对象的属性值?
- win10 使用邮箱帐号登录
- 怎样修改Ubuntu的root帐户密码并使用root登录
- 使用手机登录OWA修改密码的问题
- 安装好MySQL后,用SQL去修改root帐号的密码,结果不能登录了!
- Chrome 62 的大坑:修改密码后始终使用保存的旧密码登录
- android注册 登录 修改帐号密码 添加资料 给新注册用户充值DEMO
- 修改数据库密码后,使用psql -U登录报错
- GitLab Server 发送邮件给新增用户使其通过邮箱中的链接去指定地址修改登录密码
- 安装好MySQL后,用SQL去修改root帐号的密码,结果不能登录了!
- mysql使用root登录失败,重新修改密码笔记
- redis如何修改登录密码?设置的密码为什么无效?以及如何更改端口?
- android注册 登录+修改帐号密码+添加资料+给指定帐号充值
- java 使用htmlunit模拟登录爬取新浪微博页面
- 修改SQL Server登录密码(使用SQL Server身份登录)