HtmlUnit实现人人网登陆

1.前期准备

下载HtmlUnit,本博客使用的是2.15版本。

2.人人网登陆页面分析

  在浏览器输入人人网登陆地址,查看网页源码可发现,登陆框代码如下:

<form method="post" <span style="color:#ff0000;">id="loginForm"</span> class="login-form" action="http://www.renren.com/PLogin.do">
<dl class="top clearfix">
<dd>
<input <span style="color:#ff0000;">type="text"</span> <span style="color:#ff0000;">name="email"</span> class="input-text" <span style="color:#ff0000;">id="email"</span> tabindex="1" value="" />
</dd>
</dl>
<dl class="pwd clearfix">
<dd>
<input <span style="color:#ff0000;">type="password" id="password" name="password"</span> error="请输入密码" class="input-text" tabindex="2"/>
<label class="pwdtip" id="pwdTip" for="password">请输入密码</label>
<a class="forgetPwd" id="forgetPwd" href="http://safe.renren.com/findPass.do" stats="home_findpassword">忘记密码?</a>
</dd>
</dl>
<div class="caps-lock-tips" id="capsLockMessage" style="display:none"></div>
<dl class="savepassword clearfix">
<dt>
<label title="为了确保您的信息安全,请不要在网吧或者公共机房勾选此项!" for="autoLogin" class="labelCheckbox">
<input type="checkbox" name="autoLogin" id="autoLogin" value="true" tabindex="4" />下次自动登录
</label>
</dt>
<dd>
<span class="getpassword" id="getpassword"><a href="http://safe.renren.com/findPass.do" stats="home_findpassword">忘记密码?</a></span>
</dd>
</dl>
<dl id="code" class="code clearfix">
<dt><label for="code">验证码:</label></dt>
<dd>
<input id="icode" type="text" name="icode" class="input-text" tabindex="3" autocomplete="off" />
<label class="codetip" id="codeTip" for="icode">请输入验证码</label>
</dd>
</dl>
<dl id="codeimg" class="codeimg clearfix">
<dt></dt>
<dd><img id="verifyPic_login" src="http://icode.renren.com/getcode.do?t=web_login&rnd=Math.random()"/>
</dd>
<a class="changeone" href="javascript:refreshCode_login();" >换一个</a>
</dl>
<dl class="bottom">
<input type="hidden" name="origURL" value="http://www.renren.com/home" />
<input type="hidden" name="domain" value="renren.com" />
<input type="hidden" name="key_id" value="1" />
<input type="hidden" name="captcha_type" id="captcha_type" value="web_login" />
<input <span style="color:#ff0000;">type="submit" id="login"</span> class="input-submit login-btn" stats="loginPage_login_button" <span style="color:#ff0000;">value="登录"</span> tabindex="5"/>
</dl>
</form>

欲模拟登陆,就先将用户名和密码填入响应输入框,人后将表单提交。简单浏览上述代码容易发现,表单的id为loginForm,

用户名输入框的name属性为email,密码输入框的name属性为password,登陆按钮的value属性为登陆,去代码中红色片段。通过

响应属性获取响应元素,执行相应操作即可。

3.编码实现

新建java工程,将HtmlUnit文件下libs下的所有*.jar添加到工程的classpath。具体方法为:右键工程,选择构建路径,选择配置构建路径,

添加外部Jar,全选添加。

  

package wukesly.htmlUnit.login;

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlForm;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlPasswordInput;
import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
import com.gargoylesoftware.htmlunit.html.HtmlTextInput;

public class LoginRenren {
	
	/**
	 * 人人网登陆页面地址
	 */
	private static final String rrUrl = "http://www.renren.com/"; 
 	/**
	 * 用户名
	 */
	private String username;
	/**
	 * 密码
	 */
	private String password;
	/**
	 * 浏览器
	 */
	private WebClient webClient;
	/**
	 * 登陆页面
	 */
	private HtmlPage loginPage;
	/**
	 * 登陆表单
	 */
	private HtmlForm loginForm;
	/**
	 * 人人网登陆表格id
	 */
	private static final String formId = "loginForm";
	/**
	 * 用户名输入域
	 */
	private HtmlTextInput usenameField;
	/**
	 * 密码输入域name
	 */
	private static final String uFieldName = "email";
	/**
	 * 密码输入域
	 */
	private HtmlPasswordInput passwordField;
	/**
	 * 密码输入域name
	 */
	private static final String pFieldName = "password";
	/**
	 * 登陆按钮
	 */
	private HtmlSubmitInput loginBnt;
	/**
	 * 登陆按钮的值
	 */
	private static final String bntValue = "登录";
	/**
	 * 登陆成功返回页面
	 */
	private HtmlPage retPage;
	
	
	/**
	 * @param username 用户名
	 * @param password 密码
	 */
	public LoginRenren(String username, String password) {
		this.username = username;
		this.password = password;
		init();
	}

	/**
	 * 初始化函数
	 */
	private void init(){
		//初始化浏览器
		webClient = new WebClient(BrowserVersion.CHROME);
		//设置浏览器
		setting();
	}
	
	private void setting(){
		// TODO 设置浏览器属性
		webClient.getOptions().setJavaScriptEnabled(false);
		
	}
	
	/**
	 * 关机
	 */
	public void shutdown(){
		//关闭浏览器
		webClient.closeAllWindows();
	}

	/**
	 * 登陆
	 * @return 登陆成功返回的页面
	 * @exception 页面获取异常
	 */
	public HtmlPage Login() throws Exception{
		
		//获取登陆页面
		loginPage = webClient.getPage(rrUrl);
		//获取表单,人人网登陆页面只有一个表单
		loginForm = loginPage.getForms().get(0);
		//获取用户名输入域
		usenameField = loginForm.getInputByName(uFieldName);
		//获取密码输入域
		passwordField = loginForm.getInputByName(pFieldName);
		//设置登陆参数
		usenameField.setValueAttribute(username);
		passwordField.setValueAttribute(password);
		//获取登陆按钮
		loginBnt = loginForm.getInputByValue(bntValue);
		//提交表单
		retPage = loginBnt.click();
		
		return retPage;
		
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO 自动生成的方法存根

		String u = "usename";//填写默认用户名
		String p = "password";//填写默认密码
		
		if(args.length<2){
			System.out.println("运行参数为默认!");
		}else if(args.length==2){
			u = args[0];
			p = args[1];
		}
		
	    LoginRenren loginRenren = new LoginRenren(u, p);
	    
	    try {
			HtmlPage page = loginRenren.Login();
			System.out.println("*********************登陆成功!文本内容如下:*************************");
<span style="white-space:pre">			</span>//输出登陆成功返回页面的文本内容
			System.out.print(page.asText());
		} catch (Exception e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
	    
		loginRenren.shutdown();
		
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值