如何使用HTMLabilityPack提取文本html属性

时间:2017-10-04 21:17:34

标签: c# html discord.net

我需要从这个Site中提取突出显示的文本我正在使用下面的代码,并且没有将Object引用的错误设置为对象的实例。我也在指南中使用这个Guide,它说使用Xpath表达式。我转到我想要的行,然后右键单击=> copy =>复制xpath。我得到// [@ id =“profile”] / div 2 / div 2 / div 1 / div 1 / div 1 / div 1 / div / text()“);我必须转义引号。如果我只是做”// [@ id =“profile”]“那么它工作正常我得到个人资料,但我不能让这个工作并得到统计数据。

编辑:我需要的是获得排名值。但我不能简单地称之为一级,因为排名用于Solo,FPP Solo,等等。但我现在试图让他获得“1,510,890”号码。

Trying to get Highlighted Text

[Command("test")]
[Alias("ti")]
public async Task Stats(string name)
{
    string path = "https://pubgtracker.com/profile/pc/" + name + "?region=agg";
    HtmlWeb web = new HtmlWeb();
    HtmlDocument Doc = web.Load(path);

    var htmlNodes = Doc.DocumentNode
                    .SelectNodes("//*[@id=\"profile\"]/div[2]/div[2]/div[1]/div[1]/div[1]/div[1]/div/text()");

    foreach (var node in htmlNodes)
    {
        foreach (var att in node.Attributes)
        { 
            Console.WriteLine(att.Value); 
        }                    
    }
}

1 个答案:

答案 0 :(得分:1)

编辑:我之前的回答已不再有效,请阅读下面我的新发现。

我不认为你现在想做什么是可能的。

似乎在加载HTML之后加载显示您的Solo排名(以及大量其他数据)的数据(意味着浏览器中的javascript在下载html后处理一些数据绑定)。 / p>

您可以通过两种方式自行测试:

  1. 将调试器放在代码中的HtmlDocument Doc = web.Load(path);行,并检查Doc.DocumentNode.InnerHtml的值,将其复制并粘贴到Notepad ++或其他文本编辑器中,然后查看那里的数据。你会发现你的等级没有被服务器加载(即它在源HTML中不可用)

  2. 不是在Chrome中检查页面上的元素,而是右键单击“查看源”。这与HtmlAgilityPack将HTML“加载”到对象中时看到的数据相同。它不允许运行javascript(意味着您的值永远不会绑定到任何HTML)。

  3. 我能看到的 方式来收集所需的数据是从服务器获取源代码中嵌入的javascript对象。您将在<script>标记的文档末尾看到它。它是一个巨型 javscript对象,其中包含你的等级。

    你可以通过查看我上面解释的来源,并为你的等级做一个Ctrl + F来自己看到这个。您将看到它出现在对象的两个位置。