使用 HtmlUnit 操作网页(登录58同城)

1.导入jar包

htmlunit-2.35.0-OSGi.jar

Ps:之前研究了网页的电脑端登录,发现 btn.click() 执行无效,查看众多资料未果后,突然想起还有h5页面,套入一看,完全ok , 登录后想切换电脑端也只需要调用一下 电脑版.click(),就行了
在这里插入图片描述
贴出代码.

public void test_login() throws IOException{
		Scanner scan = new Scanner(System.in);
		
		WebClient wc = new WebClient(); 
		//58的h5登陆页面
		String url = "https://m.m.58.com/login?path=https://m.m.58.com/index";
		HtmlPage page = HTML.getHtmlPageByUrl(url, true, false, 10,wc);
//		HtmlDivision div = (HtmlDivision) page.getByXPath("//div[@class='phonenumlogin']");
		
		//获取控件对象
		HtmlTelInput phone = (HtmlTelInput) page.getElementById("mobilenumber_login_input");
		HtmlButtonInput getcode = (HtmlButtonInput) page.getElementById("mobile_login_getcode");
		HtmlTelInput yzm = (HtmlTelInput) page.getElementById("mobilecode_login_input");
		HtmlButtonInput btn = (HtmlButtonInput) page.getElementById("mobilebtn_login_input");
		
		
		System.out.println("输入手机号:");
		String text = scan.nextLine();
		
		//给phone 对象设置value值
		phone.setValueAttribute(text);
		
		//模拟点击获取验证码按钮
		getcode.click();
		
		System.out.println("输入验证码:");
		text = scan.nextLine();
		yzm.setValueAttribute(text);
		
		System.out.println("手机号:"+phone.getValueAttribute());
		System.out.println("验证码:"+yzm.getValueAttribute());
		
		//模拟点击登录按钮 并获取返回的页面
		page = btn.click();
		//System.out.println(page.asXml());
		wc.close();
		scan.close();
	}

HTML 下的 getHtmlPageByUrl 类:

/**
 * 根据传入的url获取操作网页的HtmlPage对象
 * @param url url
 * @param js  是否启用js true:false
 * @param css 是否启用css true:false
 * @param max 连接超时时间  max/s 如果为0,则无限期等待  
 * @return HtmlPage
 */
public static HtmlPage getHtmlPageByUrl(String url,boolean js,boolean css,int max,WebClient wc) {
	wc.getOptions().setThrowExceptionOnScriptError(false); // js运行错误时,是否抛出异常  
	wc.getOptions().setUseInsecureSSL(true);  
	wc.getOptions().setJavaScriptEnabled(js); // 设置JS支持 
	wc.getOptions().setCssEnabled(css); // 设置css支持  
	wc.getOptions().setTimeout(max*10000); // 设置连接超时时间 ,这里是max秒。如果为0,则无限期等待  
	wc.getOptions().setDoNotTrackEnabled(false);
	wc.setAjaxController(new NicelyResynchronizingAjaxController()); //设置支持ajax
	wc.waitForBackgroundJavaScript(10000);//让js先加载完,获取页面异步生成的代码,
	HtmlPage page = null;
	try {
		page = wc.getPage(url);
	} catch (IOException e) {
		e.printStackTrace();
		System.out.println("获取"+url+" 的网页对象失败!");
	}
	return page;
}

输出片段:

<a href="https://qy.m.58.com/m_entmgr/?" onclick="clickLog('from=m_my_myzhaopin')">
   <i></i>
   <span>
     我的招聘
   </span>
 </a>
      

可以看见已经登录成功了

你可能感兴趣的:(爬虫相关)