1.前期准备
下载HtmlUnit,本博客使用的是2.15版本。
2.人人网登陆页面分析
在浏览器输入人人网登陆地址,查看网页源码可发现,登陆框代码如下:
<form method="post" <span style="color:#ff0000;">id="loginForm"</span> class="login-form" action="/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="/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="/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="/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="/home" /><input type="hidden" name="domain" value="" /><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 = "/"; /*** 用户名*/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();}}
如果觉得《HtmlUnit实现人人网登陆》对你有帮助,请点赞、收藏,并留下你的观点哦!