我们最近在我们的项目中更新了一堆dll,包括HtmlAgilityPack到他们的最新版本.这使得以下代码开始在第一行开始抛出错误.
List<HtmlNode> foundNodes = document.QuerySelectorAll(".divider").ToList();
foreach(HtmlNode node in foundNodes){
doWhatever(node);
}
Run Code Online (Sandbox Code Playgroud)
找不到方法:'System.Collections.Generic.IEnumerable`1 HtmlAgilityPack.HtmlNode.Descendants()'.
堆栈跟踪的最后一行是:
" 在Fizzler.Systems.HtmlAgilityPack.HtmlNodeOps.b__71(HtmlNode n) "
QuerySelectorAll返回一个IEnumerable的HtmlNode,但我似乎无法再将其强制转换为列表.我会冒险猜测现在有一些相关的dll与不兼容的版本(fizzler?)错过了这个Descendants方法?然而,HtmlAgilityPack 的NuGet页面没有显示任何依赖关系,我使用的fizzler版本是1.0.0,我认为是正确的.
我的目的是从网站上读出特定的容器/标签/属性(为了我的爱好),除了获取我的价值的德语翻译(我通常在浏览器中手动打开网站时通常会得到的)(可能是网络)网站从用户代理获取特定信息),但如果我使用我的程序,它只会给我英文值)
工作的c#控制台代码:
List<string> href = new List<string>();
List<string> titles = new List<string>();
for (int i = 0; i < 1; i++)
{
var webOverview = new HtmlWeb();
var documentOverview = webOverview.Load("http://gatherer.wizards.com/Pages/Search/Default.aspx?page=0&format=[%22Commander%22]");
webOverview.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0";//updated
webOverview.AutoDetectEncoding = true;//updated
var pageOverview = documentOverview.DocumentNode;
HtmlNode[] hrefList = pageOverview.QuerySelectorAll("td.leftCol").ToArray();
HtmlNode[] titleList = pageOverview.QuerySelectorAll("div.cardInfo").ToArray();
for (int rowcounter = 0; rowcounter < hrefList.Count(); rowcounter++)
{
var hrefValue = hrefList[rowcounter].QuerySelector("a").Attributes["href"].Value;
var titleValue = titleList[rowcounter].QuerySelector("span.cardTitle").InnerText;
href.Add(hrefValue);
titles.Add(titleValue);
Console.WriteLine(rowcounter.ToString() + ". " …Run Code Online (Sandbox Code Playgroud) c# console-application http-headers html-agility-pack fizzler
Fizzler是HTML文档的W3C选择器库.Nuget提供两个版本:一个取决于HtmlAgilityPack,一个不依赖于HtmlAgilityPack.
我只能找到依赖于HtmlAgilityPack的项目的文档和示例代码.我想利用没有这种依赖关系的那个,因为我总是希望减少我的依赖关系并保持简单.
在哪里可以找到不依赖于HtmlAgilityPack的Fizzler项目的文档/示例代码?