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

C#动态URL元素值爬取失败求助:HtmlAgilityPack无法获取目标元素

解决C#使用HtmlAgilityPack爬取动态网页内容失败的问题

问题原因

HtmlAgilityPack的HtmlWeb.Load()仅能获取服务器返回的静态HTML源码,而目标网站的内容是通过JavaScript动态渲染生成的。直接爬取的静态HTML中并不包含你要找的//div[contains(@class,'ltr inline')]元素,因此无法获取到目标内容。

解决方案

需要使用支持JavaScript执行的工具来获取渲染后的完整页面,以下是两种可行方案:

方案1:使用Selenium + ChromeDriver

  1. 安装NuGet包:Selenium.WebDriver 和 Selenium.WebDriver.ChromeDriver
  2. 示例代码:
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using HtmlAgilityPack;

// 配置ChromeDriver,启用无头模式(无需显示浏览器窗口)
var options = new ChromeOptions();
options.AddArgument("--headless=new");

using var driver = new ChromeDriver(options);
driver.Navigate().GoToUrl("http://www.tsetmc.com/Loader.aspx?ParTree=151311&i=5516102131364383");

// 等待页面渲染完成(可根据实际加载速度调整等待时长)
System.Threading.Thread.Sleep(2000);

// 获取渲染后的完整页面HTML
var pageHtml = driver.PageSource;

// 用HtmlAgilityPack解析HTML
var doc = new HtmlDocument();
doc.LoadHtml(pageHtml);

var element = doc.DocumentNode.SelectSingleNode("//div[contains(@class,'ltr inline')]");
if (element != null)
{
    MessageBox.Show(element.InnerText.Trim());
}
else
{
    MessageBox.Show("未找到目标元素");
}

方案2:使用PuppeteerSharp(轻量无头浏览器)

  1. 安装NuGet包:PuppeteerSharp
  2. 示例代码:
using PuppeteerSharp;
using HtmlAgilityPack;

// 自动下载适配版本的Chromium(首次运行执行)
await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);

using var browser = await Puppeteer.LaunchAsync(new LaunchOptions
{
    Headless = true // 启用无头模式
});

using var page = await browser.NewPageAsync();
await page.GoToAsync("http://www.tsetmc.com/Loader.aspx?ParTree=151311&i=5516102131364383");

// 等待目标元素加载完成(更可靠的等待方式)
await page.WaitForSelectorAsync("div.ltr.inline");

// 获取渲染后的页面HTML
var pageHtml = await page.GetContentAsync();

// 解析HTML
var doc = new HtmlDocument();
doc.LoadHtml(pageHtml);

var element = doc.DocumentNode.SelectSingleNode("//div[contains(@class,'ltr inline')]");
if (element != null)
{
    MessageBox.Show(element.InnerText.Trim());
}
else
{
    MessageBox.Show("未找到目标元素");
}

注意事项

  • 动态网页必须依赖能执行JavaScript的工具来获取完整内容,HtmlAgilityPack本身不支持JS渲染
  • 等待页面加载的逻辑很关键,可根据页面实际加载速度调整等待时长,或使用元素等待(如Puppeteer的WaitForSelectorAsync)替代固定睡眠
  • Selenium需要确保ChromeDriver版本与本地Chrome浏览器版本匹配,PuppeteerSharp则会自动下载适配的Chromium,版本兼容性问题更少

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:20:35