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

HTML Agility Pack无法解析价格变动时的<span>节点求助

解决方案

问题根源

你使用starts-with(@class, 'price-section__current-value')的XPath匹配逻辑存在疏漏:虽然变动后的class字符串确实以目标值开头,但这种前缀匹配的逻辑不够严谨,且HtmlWeb默认的缓存机制可能导致每次请求拿到的是旧页面数据,双重因素导致无法获取更新后的价格。

修正后的代码

string asset = cmbPair.Text.ToString();
var html = @"https://markets.businessinsider.com/currencies/" + asset;

// 配置安全协议(移除过时的Ssl3,添加主流的Tls13支持)
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13;

HtmlWeb web = new HtmlWeb();
// 彻底禁用缓存,强制每次拉取最新页面
web.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);
web.CacheOnly = false;

var htmlDoc = web.Load(html);

// 精准匹配包含目标class的span元素(兼容多class共存场景)
var onlypriceNode = htmlDoc.DocumentNode.SelectSingleNode("//span[contains(concat(' ', @class, ' '), ' price-section__current-value ')]");
if (onlypriceNode != null)
{
    string onlyprice = onlypriceNode.InnerText;
    // 此处添加更新UI或处理价格的逻辑
}

// 其他节点也用同样的方式优化匹配逻辑
var onlypricechangeNode = htmlDoc.DocumentNode.SelectSingleNode("//span[contains(concat(' ', @class, ' '), ' price-section__absolute-value ')]");
var onlyperchangeNode = htmlDoc.DocumentNode.SelectSingleNode("//span[contains(concat(' ', @class, ' '), ' price-section__relative-value ')]");

if (onlypricechangeNode != null)
{
    string onlypricechange = onlypricechangeNode.InnerText;
}
if (onlyperchangeNode != null)
{
    string onlyperchange = onlyperchangeNode.InnerText;
}

关键优化点

  • XPath匹配逻辑升级:通过contains(concat(' ', @class, ' '), ' target-class ')的写法,确保匹配的是独立完整的class值,避免误匹配相似前缀的class,完美兼容价格涨跌时的class变动场景。
  • 彻底清除缓存:新增web.CachePolicy配置,强制跳过本地和服务器缓存,每次请求都获取最新页面数据。
  • 空值安全判断:添加节点非空校验,避免页面结构临时变动时出现空引用异常。
  • 安全协议适配:移除已被淘汰的Ssl3,添加Tls13支持,提升请求兼容性和安全性。

额外提醒

如果是WinForms/WPF应用,定时器回调可能运行在非UI线程,更新UI时需要切换到UI线程:

// WinForms示例
this.Invoke((MethodInvoker)delegate {
    lblPrice.Text = onlyprice;
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:50:42