FizzlerEx/HtmlAgilityPack QuerySelector全部不起作用

本文关键字:全部 不起作用 QuerySelector HtmlAgilityPack FizzlerEx | 更新日期: 2023-09-27 18:35:52

我一直在尝试设置FizzlerEx,在 http://fizzlerex.codeplex.com/找到。添加对我的项目的引用后,我尝试运行网站上给出的示例代码 - 下面列出了我的全部代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using HtmlAgilityPack;
using Fizzler.Systems.HtmlAgilityPack;

namespace Fizzler_Test
{
    class Program
    {
        static void Main(string[] args)
        {
        var web = new HtmlWeb();
            var document = web.Load("http://example.com/page.html");
            var page = document.DocumentNode;
            foreach (var item in page.QuerySelectorAll("div.item"))
            {
                var title = item.QuerySelector("h3:not(.share)").InnerText;
                var date = DateTime.Parse(item.QuerySelector("span:eq(2)").InnerText);
                var description = item.QuerySelector("span:has(b)").InnerHtml;
            }
        }
}

但是,这会产生构建错误,声称:

Error   1   'HtmlAgilityPack.HtmlNode' does not contain a definition for 'QuerySelectorAll' and no extension method 'QuerySelectorAll' accepting a first argument of type 'HtmlAgilityPack.HtmlNode' could be found (are you missing a using directive or an assembly reference?)

看起来QuerySelectorAll实际上并不是HtmlNode的一部分,但鉴于这是从网站上逐字获取的官方示例代码,我希望创建者了解他们的库是如何工作的。 我不知道实际问题可能是什么。

这里似乎发现了一个相关的问题,但没有找到合适的答案:Fizzler 和 QuerySelectorAll

FizzlerEx/HtmlAgilityPack QuerySelector全部不起作用

看起来QuerySelectorAll实际上并不是HtmlNode的一部分,但鉴于这是官方示例代码。 来自网站的逐字记录,我希望创作者了解如何 他们的图书馆工作。我不知道实际问题会是什么 是。

你对这部分的看法是正确的。虽然你对第二部分的看法不正确,因为 HAP 的作者不是 FizzlerEx 的作者。问题出在别处。 只需查看错误,您就可以获得解决此问题所需的唯一线索。

Error   1   'HtmlAgilityPack.HtmlNode' does not contain a definition for 'QuerySelectorAll' and no extension method 'QuerySelectorAll' accepting a first argument of type 'HtmlAgilityPack.HtmlNode' could be found (are you missing a using directive or an assembly reference?)

那么,我们得到了什么;它告诉我们在命名空间HtmlAgilityPack中的类HtmlNode中没有称为QuerySelectorAll的方法。如果我们看一下 HAP 的源代码,您可以轻松确定错误消息确实是正确的,因为在我们正在寻找的类中没有该名称的方法。

HtmlAgilityPack.HtmlNode 的源代码 - class

我们想使用但找不到的这种方法在哪里?

它在这里,在Fizzler.Systems.HtmlAgilityPack.HtmlNodeSelection级。

在尝试了一些事情之后,我让代码完美地工作。问题在于Fizzler和HAP源代码之间的引用中的扩展。

如果你下载Fizzler,你会同时得到HtmlAgilityPack。当你在Visual Studio中添加引用时(假设你使用它),只添加

  • Fizzler.Systems.HtmlAgilityPack.dll
  • HtmlAgilityPack.dll

清理您的解决方案并重新生成它,它应该可以工作!

您应该通过右键单击引用来添加Fizzler->管理Nuget Package,并在线搜索它,您会发现它是HtmlAgilityPack的Fizzler,然后可以下载它。