51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

HtmlUnit动态数据未加载

# 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

赞(4)
未经允许不得转载:工具盒子 » HtmlUnit动态数据未加载