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

C#中获取含AJAX网站动态数据并监测指定内容的方法

解决动态网页内容检测的问题

你的问题核心在于静态HTTP请求无法获取JavaScript动态渲染的内容。以worldometers的人口页面为例,页面初始加载的HTML里并没有你要找的"40"数据,这些内容是后续通过AJAX请求加载并由JS渲染到页面上的。你之前用HttpWebRequest或者HttpClient只能拿到页面的初始骨架,自然检测不到目标文本。

正确的解决方案:使用浏览器自动化工具(Selenium WebDriver)

Selenium可以模拟真实浏览器的行为,等待页面完全加载包括AJAX动态生成的内容,完美适配这类动态网页场景。

步骤1:安装必要的NuGet包

首先在你的项目中安装以下NuGet包:

  • Selenium.WebDriver
  • Selenium.WebDriver.ChromeDriver(对应Chrome浏览器,也可以选择Firefox/Edge的驱动)

步骤2:实现等待目标内容的函数

下面是修改后的代码,它会等待页面中出现指定文本后停止执行:

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;
using System;

public static void WaitForDynamicWebPageContent(string url, string targetText)
{
    // 初始化Chrome浏览器驱动
    var options = new ChromeOptions();
    // 可选:启用无头模式(不显示浏览器窗口)
    // options.AddArgument("--headless=new");
    
    using (var driver = new ChromeDriver(options))
    {
        driver.Navigate().GoToUrl(url);
        
        try
        {
            // 设置显式等待,最长等待30秒(可根据需求调整)
            var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
            
            // 等待页面中任意元素包含目标文本
            wait.Until(d => d.PageSource.Contains(targetText));
            
            Console.WriteLine("Found it!");
        }
        catch (WebDriverTimeoutException)
        {
            Console.WriteLine($"Timeout: Target text '{targetText}' not found within the specified time.");
        }
    }
}

额外优化:持续监控页面更新

如果你的需求是持续监控页面后续的内容更新(比如页面实时刷新数据),可以用循环结合短时间等待的方式:

public static void MonitorDynamicWebPage(string url, string targetText, int checkIntervalMs = 1000)
{
    var options = new ChromeOptions();
    // options.AddArgument("--headless=new");
    
    using (var driver = new ChromeDriver(options))
    {
        driver.Navigate().GoToUrl(url);
        
        while (true)
        {
            if (driver.PageSource.Contains(targetText))
            {
                Console.WriteLine("Found the updated content!");
                break;
            }
            
            // 等待指定间隔后再检查
            System.Threading.Thread.Sleep(checkIntervalMs);
        }
    }
}

为什么这个方案可行?

  • 真实浏览器环境:Selenium会像用户操作一样加载页面,执行所有JavaScript代码,包括AJAX请求和动态DOM渲染。
  • 显式等待:相比你之前的轮询请求,显式等待只会在页面状态变化时检查,更高效且减少服务器压力。

内容的提问来源于stack exchange,提问作者Firoz Rangrez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:56:16