用Java模拟网站登录(二)
2013-11-06 17:23
423 查看
本文为原创,转载请声明来源和作者,谢谢!
作者:_cha1R 上一篇文章《用Java模拟网站登录》介绍过,模拟一些如百度、QQ之类的网站登录?有两个方式,一是发送模拟请求,二是模拟浏览器操作。那么这次介绍第二种方式,模拟浏览器操作。这个可能知道的人不多,它并没有HttpClient那么出名。当初我在学习它的时候,在百度几乎搜索不到关于它的资料,幸亏我们还可以用Google。它叫htmlunit。 htmlunit:A java GUI-Less browser, which allows high-level manipulation of web pages, such as filling forms and clicking links; just getPage(url), find a hyperlink, click() and you have all the HTML, JavaScript, and Ajax are automatically processed. 简单翻译下介绍:一个Java代码版浏览器,它没有图形界面。它可以允许使用网页的一些高级操作,如填写表单、点击链接。你只需要调用getPage(url)方法,然后找到一个超链接,调用click()方法点击它,你就可以得到点击后返回的页面。包括Javascript、Ajax、cookie等都是自动处理的。 换言之,浏览器能做什么,它就能做什么。它可以模拟浏览器大部分操作,包括解析Js、css! 在使用它之前,做好准备工作: 从http://sourceforge.net/projects/htmlunit/files/上下载htmlunit-2.13-bin.zip,解压后导入到项目里。 导入完以后,模拟一个登陆的过程: 首先创建一个WebClient对象,这个对象跟HttpClient对象有几分相似,同样是一个浏览器对象,可以用它来做点浏览器可以做的事情。
WebClient webClient = new WebClient();//创建WebClient它可以打开一个网址,返回一个HtmlPage对象,我们可以用它来获得表单。
HtmlPage page = webClient.getPage("http://www.baidu.com/"); //打开百度获得一个HtmlElement对象,可以根据html的id、name来获取,如果都没有,也可以用Xpath语法来获取htmlElement对象
//获得name为"登陆"的html元素 HtmlElement htmlElement = page.getElementByName("登陆");获得后,“点击”这个htmlElement。返回的是点击百度的“登陆”后的页面
page = htmlElement.click();//调用click()方法这样当前的page2就是百度的登陆页面,那么我们要填写表单然后提交表单登陆。还是先获取HtmlElement元素
//获得name为"username"的html元素 HtmlElement usernameEle = page.getElementByName("username"); //获得id为"password"的html元素 HtmlElement passwordEle = (HtmlElement)page.getElementById("password");填写这两个表单元素,用type()方法,注意先设置焦点:
usernameEle.focus(); //设置输入焦点 usernameEle.type("username123"); //填写值 passwordEle.focus(); //设置输入焦点 passwordEle.type("mypassword"); //填写值填写完后,提交登陆表单
//获得name为"登陆"的元素 HtmlElement submitEle = page.getElementByName("登陆"); //点击“登陆” page = submitEle.click();click()完以后,会返回click()后的HtmlPage对象,我们可以用它来判断是否登陆成功
String result = page.asXml();//获得click()后的html页面(包括标签) if(result.contains("登陆成功!")){ System.out.println("登陆成功"); }else{ System.out.println("登陆失败"); }下面附上整个代码以便测试:
WebClient webClient = new WebClient();//创建WebClient
HtmlPage page = webClient.getPage("http://www.baidu.com/"); //打开百度
//获得name为"登陆"的html元素
HtmlElement htmlElement = page.getElementByName("登陆");
page = htmlElement.click();//调用click()方法
//获得name为"username"的html元素
HtmlElement usernameEle = page.getElementByName("username");
//获得id为"password"的html元素
HtmlElement passwordEle = (HtmlElement) page.getElementById("password");
usernameEle.focus(); //设置输入焦点 usernameEle.type("username123"); //填写值 passwordEle.focus(); //设置输入焦点 passwordEle.type("mypassword"); //填写值
//获得name为"登陆"的元素 HtmlElement submitEle = page.getElementByName("登陆"); //点击“登陆” page = submitEle.click();
String result = page.asXml();//获得click()后的html页面(包括标签) if(result.contains("登陆成功!")){ System.out.println("登陆成功"); }else{ System.out.println("登陆失败"); }
相关文章推荐
- Java模拟网站登录02【转载】
- 利用java模拟网站登录程序代码
- java模拟登录qq网站,实现一键签到等等功能
- Java模拟网站登录
- [置顶] Java代码模拟网站登录
- Java模拟网站登录
- java模拟登录校内成绩查询网站,将获得的HTML代码用jsoup解析
- 用java程序模拟网站的登录以及文件批量上传
- 用Java模拟网站登录
- java 作为客户端发送http post请求登录网站首页。 HTTP/1.1 302 Found
- QT实现CSDN上传资源管理助手Demo之(2)模拟登录CSDN网站
- PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
- Java语言使用HttpClient模拟浏览器登录
- 模拟浏览器登录网站
- Redis缓存Mysql模拟用户登录Java实现实例
- Java小程序之集合框架模拟数据库实现用户登录和注册功能
- 第三方网站微信登录java代码实现
- java实现模拟登录新浪微博
- [置顶]Java丨jsoup网络爬虫模拟登录思路解析
- Winform模拟post请求和get请求登录网站