如何在.NET Core C#控制台程序中使用HtmlAgilityPack获取网页CSS文件链接
获取特定标签的CSS链接解决方案
嘿,这事儿不难改!你现在的代码是在抓取<a>标签的href,只要调整XPath表达式,就能精准定位到你要的<link rel="stylesheet">标签啦。
方法一:获取所有样式表链接
如果你想拿到页面上所有的CSS样式表链接,可以把你的代码改成这样:
var web = new HtmlWeb(); var doc = web.Load(url); // 用XPath定位所有rel属性为stylesheet的link标签 var styleLinkNodes = doc.DocumentNode.SelectNodes("//link[@rel='stylesheet']"); // 提取href属性,同时做空值处理避免报错 var cssHrefs = styleLinkNodes?.Select(node => node.Attributes["href"]?.Value) .Where(href => !string.IsNullOrEmpty(href)) .ToList() ?? new List<string>();
这段代码做了这些事:
- 用
//link[@rel='stylesheet']作为XPath,精准筛选出所有样式表的link标签 - 用
?.操作符防止styleLinkNodes为null时出现空引用异常 - 通过
Where过滤掉空的href值,最后如果没有找到任何节点,返回一个空列表
方法二:精准获取目标CSS文件
如果你只需要那个包含user-style.css的特定链接,可以用更精确的XPath直接定位:
var web = new HtmlWeb(); var doc = web.Load(url); // 匹配rel=stylesheet且href包含user-style.css的link标签 var targetCssNode = doc.DocumentNode.SelectSingleNode("//link[@rel='stylesheet' and contains(@href, 'user-style.css')]"); if (targetCssNode != null) { string targetCssHref = targetCssNode.Attributes["href"].Value; // 这里就可以处理拿到的目标CSS链接啦 Console.WriteLine(targetCssHref); }
这个XPath里的contains(@href, 'user-style.css')能帮你直接锁定包含指定文件名的样式表,不用再从列表里筛选,效率更高。
内容的提问来源于stack exchange,提问作者Xodya
相关产品推荐
相关产品推荐

