模拟浏览器
最先想到的是httpClient 不过它功能有点局限性
改用HTMLUnit
htmlunit 是一款开源的java 页面分析工具,读取页面后,可以有效的使用htmlunit分析页面上的内容。项目可以模拟浏览器运行,被誉为java浏览器的开源实现。是一个没有界面的浏览器,运行速度迅速。是junit的扩展之一
maven项目先导入依赖
<dependency>
<groupId>net.sourceforge.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
<version>2.27</version>
</dependency>
接下来是代码段,不同的网站各种标签不同,要根据自己网站的css标签进行获取想要的页面元素 包括提交按钮,文本框,radio,CheckBox
package org.example;
import com.gargoylesoftware.htmlunit.AlertHandler;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.Page;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.DomElement;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
public class App
public static void main( String[] args ){
// 实例化Web客户端
WebClient webClient = new WebClient(BrowserVersion.CHROME);
//htmlunit对css支持不好,禁用
webClient.getOptions().setCssEnabled(false);
//javascript alert处理
try{
webClient.setAlertHandler(new AlertHandler() {
@Override
public void handleAlert(Page page, String message) {
System.out.println("提示:"+message);
}
});
//获取目标页面
HtmlPage page = webClient.getPage("http://www.xxx.com");
//用户名,并赋值
DomElement log_username = page.getElementById("log_username");
log_username.setAttribute("value","XXXXX");
//密码框,并赋值
DomElement log_password = page.getElementById("log_password");
log_password.setAttribute("value","xxxxxx");
//点击登录
DomElement a = page.getElementsByTagName("a").get(1);
HtmlPage page1 = a.click();
//点击日常打卡
DomElement a1 = page1.getElementsByTagName("a").get(14);
HtmlPage page2 = a1.click();
// 点击健康打卡
DomElement a2 = page2.getElementsByTagName("a").get(31);
HtmlPage page3 = a2.click();
//点击开始填报
DomElement input = page3.getElementsByTagName("input").get(6);
HtmlPage page4 = input.click();
//为radio和CheckBox赋值
DomElement radio1 = page4.getElementsByTagName("input").get(7);
radio1.setAttribute("checked","true");
DomElement radio2 = page4.getElementsByTagName("input").get(11);
radio2.setAttribute("checked","true");
DomElement checkbox = page4.getElementsByTagName("input").get(20);
checkbox.setAttribute("checked","true");
//填所在地及温度
DomElement location = page4.getElementsByTagName("input").get(8);
location.setAttribute("value","XXXX");
DomElement tempature = page4.getElementsByTagName("input").get(26);
tempature.setAttribute("value","XXXX");
//提交保存
DomElement tijiao = page4.getElementsByTagName("input").get(28);
tijiao.click();
//查看打卡记录,验证是否打卡成功
DomElement record = page1.getElementsByTagName("a").get(16);
HtmlPage page6 = record.click();
//获取健康表格
DomElement table = page6.getElementById("ctl00_cph_right_gv3");
System.out.println(table.asText());
}catch (Exception e){
e.printStackTrace();
}
webClient.close();
}
}