最近在学习模拟登陆,本来想使用httpClient抓取数据,但是奈何不会。在机缘巧合下看到了HtmlUnit废话不多说。
上代码。
需要的jar包:
主要的jar包是htmlUnit.jar,可在官网下载。
public class Test{
public static void main(String[] args) throws Exception {
HtmlPage page = Test.lezhuan1();
String asXml = page.asXml();
System.out.println(asXml);
}
//某网站 需要验证码
public static HtmlPage pceggs() throws Exception{
//设置浏览器内核
WebClient webClient = new WebClient(BrowserVersion.CHROME);
webClient.getOptions().setThrowExceptionOnScriptError(false);
//设置证书
webClient.getOptions().setUseInsecureSSL(true);
//是否启用js
webClient.getOptions().setJavaScriptEnabled(true);
//是否启用css
webClient.getOptions().setCssEnabled(true);
//设置Ajax控制器
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
//获取页面
HtmlPage page = webClient.getPage("http://www.pceggs.com/nologin.aspx");//登陆页面
HtmlInput username = (HtmlInput) page.getElementById("txt_UserName");//账号输入框的id
HtmlInput password = (HtmlInput) page.getElementById("txt_PWD");//密码输入框的id
HtmlInput code=(HtmlInput) page.getElementById("txt_VerifyCode");//验证码输入栏的id
HtmlInput login=(HtmlInput) page.getElementById("Login_Submit");
//验证码图片存储 参数:验证码的图片id
HtmlImage vaCode=(HtmlImage) page.getElementById("valiCode");
File file=new File("yzm.png");
//保存图片到项目根目录下
vaCode.saveAs(file);
Scanner scanner=new Scanner(System.in);
//查看你项目下的yzm.png 手动输入
String codes=scanner.nextLine();
username.setAttribute("value","你的账号");;
password.setAttribute("value","你的密码");
code.setAttribute("value", codes);
page=login.click();
// page 就是返回结果,如果需要html形式 page.asXML 如果是需要Text 则使用 page.asText
return page;
}
//无需验证码
public static HtmlPage lezhuan1() throws Exception {
//设置浏览器内核
WebClient webClient = new WebClient(BrowserVersion.CHROME);
//设置证书
webClient.getOptions().setUseInsecureSSL(true);
//是否启用js
webClient.getOptions().setJavaScriptEnabled(true);
//是否启用css
webClient.getOptions().setCssEnabled(true);
//设置Ajax控制器
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
//获取页面
HtmlPage page = webClient.getPage("http://www.lezhuan1.com/login.html");
HtmlInput username = (HtmlInput) page.getElementById("tbUserAccount");
HtmlInput password = (HtmlInput) page.getElementById("tbUserPwd");
HtmlAnchor btn=page.getFirstByXPath("//li/a[@class='LoginBtn']");
username.setAttribute("value","你的账号");;
password.setAttribute("value","密码");
//这个网站比较的特殊它的登陆按钮是一张图片,所以需要找到它的li 标签下的a 标签 class为LoginBtn识别
page=btn.click();
return page;
}
}
maven依赖:
net.sourceforge.htmlunit
htmlunit
2.15