You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取指定URL中动态加载的完整HTML及目标刷新时间

解决动态加载内容的爬取问题

方案1:使用无头浏览器模拟页面渲染

普通HTTP工具(如URLConnection、jsoup)只能获取页面初始静态HTML,无法执行JavaScript生成的动态内容。用无头浏览器可以模拟真实浏览器的加载流程,等待JS执行完毕后再获取完整DOM:

Java + Selenium 示例

  1. 引入Maven依赖:
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-chrome-driver</artifactId>
    <version>4.15.0</version>
</dependency>
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-support</artifactId>
    <version>4.15.0</version>
</dependency>
  1. 编写爬取代码:
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.By;

public class WeatherScraper {
    public static void main(String[] args) {
        // 配置无头模式
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--headless=new");
        options.addArguments("--disable-gpu");
        
        WebDriver driver = new ChromeDriver(options);
        try {
            driver.get("https://www.weatherlink.com/embeddablePage/show/44a2d6b116484f5a8013ffad079046b9/slim");
            // 等待动态内容加载,可根据实际情况调整时长或改用显式等待
            Thread.sleep(3000);
            
            // 获取目标容器内容
            String containerHtml = driver.findElement(By.className("embeddable-page-container")).getAttribute("innerHTML");
            // 提取最后刷新时间
            String refreshTime = driver.findElement(By.className("conditions")).getText();
            
            System.out.println("容器内容:" + containerHtml);
            System.out.println("最后刷新时间:" + refreshTime);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            driver.quit();
        }
    }
}

方案2:直接调用后端API(更高效)

页面动态内容通常来自后端API接口,可通过开发者工具定位接口后直接请求,无需渲染页面:

  1. 打开Chrome开发者工具(F12),切换到「Network」面板,勾选「XHR」选项
  2. 刷新页面,找到返回天气数据的JSON接口
  3. 复制接口URL、请求头和参数,用HTTP工具直接请求并解析数据

Java + OkHttp 示例

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import org.json.JSONObject;

import java.io.IOException;

public class WeatherApiScraper {
    public static void main(String[] args) throws IOException {
        OkHttpClient client = new OkHttpClient();
        // 替换为实际找到的API接口URL
        String apiUrl = "https://api.weatherlink.com/your-target-api";
        
        Request request = new Request.Builder()
                .url(apiUrl)
                // 复制开发者工具中看到的必要请求头
                .addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36")
                .build();
        
        try (Response response = client.newCall(request).execute()) {
            if (!response.isSuccessful()) throw new IOException("请求失败:" + response);
            
            String jsonData = response.body().string();
            JSONObject json = new JSONObject(jsonData);
            // 根据实际JSON结构提取刷新时间
            String refreshTime = json.getJSONObject("data").getString("last_refresh");
            System.out.println("最后刷新时间:" + refreshTime);
        }
    }
}

注意事项

  • 使用无头浏览器时,需安装对应版本的浏览器驱动(如ChromeDriver),确保与浏览器版本匹配
  • 调用API时,需遵守网站使用条款,避免频繁请求导致IP被封禁
  • 部分API可能需要携带认证信息或特定请求头,需从开发者工具中完整复制

内容的提问来源于stack exchange,提问作者Stéphane Gauthier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 17:58:24