HTML 敏捷包,无法选择节点

Posted

技术标签:

【中文标题】HTML 敏捷包,无法选择节点【英文标题】:HTML Agility pack, can't select a node 【发布时间】:2012-11-04 15:15:54 【问题描述】:

我有以下 html 代码

<a href="http://www.google.de/products/catalog?hl=de&amp;newwindow=1&amp;q=6411920054105&amp;um=1&amp;ie=UTF-8&amp;cid=12216375657503902223&amp;sa=X&amp;ei=8nWWUOvADonntQbP3IHgDw&amp;ved=0CEgQ8gIwAA" class="psliimg" target="_blank">
<img src="https://lh5.googleusercontent.com/public/OCXiCAAYqFb859nA0DsbPbBSBR2EYU8IFnl_xtJxG2t1_z_xlLiRjxt5HPa0XFZBT1nch4a1j8PAAr4SVs974R_KnJI83sDB303YlcZQD9L5kmKUdTKXfLfJM_lovWyQcf4UlZkXb8sMarIamxSytCjB-aM=s90-c" >
</a>

基本上是它

<a href="" class="" target=""><img src="" ></a>

使用 html 敏捷包我无法获得带有以下 xpath 的节点

//a[@class="psliimg]

但是我可以通过选择它的子&lt;img&gt; 来获得它,但是当我尝试访问除 href 之外的任何其他属性时,它永远不会起作用!如果我尝试获取属性的计数,即使有 3 个,它也会给我一个!

这是原来的link,所以你可以测试一下,可能是什么原因造成的?

【问题讨论】:

【参考方案1】:

您希望从您发布的 htlm 代码中得到什么?

我运行它并尝试测试自己并得到同样的错误。所以我在下面运行了这段代码,写入控制台的文本甚至不包含属性class = psliimg,所以我不确定从页面读取原始html代码和HAP如何处理它之间发生了什么。

Sub Main()
    Dim web As HtmlWeb = New HtmlWeb
    Dim doc As HtmlDocument = web.Load("https://www.google.de/search?hl=de&tbm=shop&q=6411920054105&oq=6411920054105&gs_l=products-cc.12...3450.3450.0.4463.1.1.0.0.0.0.334.334.3-1.1.0...0.0...1ac.1.fBfILtFfII0")

    Dim str = doc.DocumentNode.SelectSingleNode("//a[contains(@href,'12216375657503902223')]").ParentNode.InnerHtml
    'The long munber is contained in the html line and is just used to identify the node I want to select.
    Console.WriteLine(Str)
    Console.ReadKey()
End Sub

这是输出:

<a href="http://www.google.de/products/catalog?hl=de&amp;q=6411920054105&amp;um=1&amp;ie=UTF-8&amp;cid=12216375657503902223">
<img src="https://lh5.googleusercontent.com/public/OCXiCAAYqFb859nA0DsbPbBSBR2EYU8IFnl_xtJxG2t1_z_xlLiRjxt5HPa0XFZBT1nch4a1j8PAAr4SVs974R_KnJI83sDB303YlcZQD9L5kmKUdTKXfLfJM_lovWyQcf4UlZkXb8sMarIamxSytCjB-aM=s90-c"   >
</a>

所以很遗憾,您可能不得不将xpath 代码用于上面的内容,而不是网站所说的内容,如果我错了,请纠正我。

您还可以遍历每个节点并选择您喜欢的。

    For Each link As HtmlNode In doc.DocumentNode.SelectNodes("//a[@href]")
        'Console.WriteLine(link.ParentNode.InnerHtml)
    Next

对不起,不是真正的答案,但不知道发布代码 sn-ps 的最佳方式。

【讨论】:

以上是关于HTML 敏捷包,无法选择节点的主要内容,如果未能解决你的问题,请参考以下文章

Html 敏捷包 - 新的 HtmlAttribute

Xpath 使用 html 敏捷包返回 null

C# Html 敏捷包 ( SelectSingleNode )

滴滴开源AgileTC:敏捷测试用例管理平台

HTMl 敏捷包错误解析并返回 XElement

华为云计算之物理节点CNA安装教程