# HtmlUnit动态数据未加载 {#htmlunit动态数据未加载}
HtmlUnit数据未加载及解决办法
# 一、解决办法 {#一、解决办法}
本人小白只想到这个,若有更好的办法请留个言~
在HtmlUnit获取数据前,使用线程sleep
让数据加载完
代码示例:
public class SpiderClass {
// 内部静态类创建客户端
private static class innerWebClient{
private static final WebClient WEB_CLIENT = new WebClient(BrowserVersion.CHROME);
}
// 根据内部静态类创建客户端单例模式
public static WebClient getInstance(){
return innerWebClient.WEB_CLIENT;
}
// main函数
public static void main(String[] args) {
// 创建客户端
WebClient client = getInstance();
try {
// 访问https://xx.xx.xx/a.jsp动态网页
HtmlPage page = client.getPage("https://xx.xx.xx/a.jsp");
// 关键部分!!!,让线程sleep以等待网页全部加载完成
Thread.sleep(10000);
// 获取dom id 为aa的节点内容,此aa节点为动态加载内容
DomElement domElement = page.getElementById("aa");
// 节点打印到控制台
System.out.println(domElement.asText());
} catch (Exception e) {
e.printStackTrace();
}
}
}
# 二、问题原因 {#二、问题原因}
因为程序的读取速度会快一些,而且推测 HtmlUnit
是异步读取 html
, css
,js
所以一些js还未加载完成,就已经可以读取到出现的 html
了