使用htmlunit项目,说白了就是一个浏览器,这个浏览器是用Java写的无界面的浏览器,因为其没有界面,因此执行的速度还是妥妥的。下载地址:http://sourceforge.net/projects/htmlunit/files/htmlunit/
其原理也比较简单,就是模拟浏览器点击输入操作,利用
WebClient webclient = new WebClient();
webclient .getPage(url);
可以获得页面对象HtmlForm,然后可以使用其API进行操作,表单的填充,表单的提交,模仿点击链接,由于内置了Rhinojs引擎,因此可以执行Javascript。
给个小例子,模拟百度搜素操作:
package com.test.html;
import java.io.IOException;
import java.net.MalformedURLException;
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlForm;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
/**
* @author hj
* @version 创建时间:2016-7-5 下午9:30:49
*/
public class HtmlGet {
public static void main(String[] args) {
// 得到浏览器对象,直接New一个就能得到,现在就好比说你得到了一个浏览器了
WebClient webclient = new WebClient();
// 这里是配置一下不加载css和javaScript,配置起来很简单,是不是
webclient.getOptions().setCssEnabled(false);
webclient.getOptions().setJavaScriptEnabled(false);
// 做的第一件事,去拿到这个网页,只需要调用getPage这个方法即可
HtmlPage htmlpage = null;
try {
htmlpage = (HtmlPage) webclient
.getPage("http://news.baidu.com/advanced_news.html");
} catch (FailingHttpStatusCodeException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (MalformedURLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// 根据名字得到一个表单,查看上面这个网页的源代码可以发现表单的名字叫“f”
final HtmlForm form = htmlpage.getFormByName("f");
// 同样道理,获取”百度一下“这个按钮
final HtmlSubmitInput button = (HtmlSubmitInput) form.getInputByValue("百度一下");
// 得到搜索框
final HtmlTextInput textField = (HtmlTextInput) form.getInputByName("q1");
// 最近周星驰比较火呀,我这里设置一下在搜索框内填入”周星驰“
textField.setValueAttribute("苍井空");
// 输入好了,我们点一下这个按钮
HtmlPage nextPage = null;
try {
nextPage = (HtmlPage) button.click();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 我把结果转成String
String result = nextPage.asXml();
System.out.println(result);
}
}
如果需要做批量的表单提交,思路:首先进行自动登录或者手动登录后,然后读取放入excel或者txt中的数据,最后循环调用表单提交。时间有限,这里就不做实现了!