htmlunit抓取动态网页(jsoup的简单使用方法教程)
优采云 发布时间: 2021-10-11 18:16htmlunit抓取动态网页(jsoup的简单使用方法教程)
jsoup 只能解析静态 html 页面。如果页面是js动态生成的,jsoup将无法启动。使用htmlunit获取js运行后的页面,还可以模拟浏览器点击页面元素,非常强大,本文介绍htmlunit的简单使用。步骤如下:
1、引入依赖
net.sourceforge.htmlunit
htmlunit
2.36.0
org.jsoup
jsoup
1.12.1
2、我们爬取我们绘制的页面,首先绘制一个简单的页面,页面中id为content的div的原创内容为hello,页面加载后内容变为
HtmlUnit 太强大了
,访问此页面查看结果
Title
HtmlUnit简单使用
hello
document.getElementById("content").innerHTML = "HtmlUnit好强大";
3、写测试类,先用jsoup直接爬取,看内容是什么,我们打印出来,可以看到是hello
@Test
public void testJsoup() throws IOException {
Document document = Jsoup.connect("http://localhost:8080/index.html").get();
System.out.println(document.getElementById("content").html());
}
4、用htmlunit看看效果
@Test
public void test() {
final WebClient webClient = new WebClient(BrowserVersion.CHROME);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
webClient.getOptions().setActiveXNative(false);
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
HtmlPage page = null;
try {
page = webClient.getPage("http://localhost:8080/index.html");
} catch (Exception e) {
e.printStackTrace();
}finally {
webClient.close();
}
webClient.waitForBackgroundJavaScript(30000);
String pageXml = page.asXml();
Document document = Jsoup.parse(pageXml);//获取html文档
System.out.println(document.getElementById("content").html());
}
可以看到js运行后的内容,与浏览器看到的结果一致