C# 为什么Html.AgilityPack会丢失一些图像标记?
我正在使用html敏捷包,并做了类似的事情C# 为什么Html.AgilityPack会丢失一些图像标记?,c#,.net,html-agility-pack,C#,.net,Html Agility Pack,我正在使用html敏捷包,并做了类似的事情 HtmlWeb web = new HtmlWeb(); HtmlDocument doc = web.Load("http://test.com"); int count = doc.DocumentNode.SelectNodes("//img").Count(); 我得到了38 当我转到该页面并执行$('img').size()时我得到43返回。为什么会有区别?“//img”只是在寻找根目录吗 这就是为什么我可能会错过一些 “//img”只
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load("http://test.com");
int count = doc.DocumentNode.SelectNodes("//img").Count();
我得到了38
当我转到该页面并执行$('img').size()时代码>我得到43
返回。为什么会有区别?“//img”
只是在寻找根目录吗
这就是为什么我可能会错过一些
“//img”只是在寻找
根的
不,它正在查找子节点(当前节点的子节点、孙子节点等)。xpath表达式从文档中选择所有图像
当我转到该页面并执行$('img').size()时;我回来了
我的假设-一些图像是通过javascript动态创建的。HtmlAgilityPack无法处理此问题
顺便说一下,对于http://test.com
我使用AgilityPack(doc.DocumentNode.SelectNodes(“//img”).Count()
)获得了87个图像节点,从Chome控制台获得了87个图像节点($('img').size()
)
EDIT:HtmlWeb.Load()
方法内部使用类获取数据。AgilityPack的作用是正确解析数据。一些web资源完全可能根据一些请求头(如User-Agent
和其他请求头)为同一URI返回不同的内容。例如,User-Agent
标题可以通过HtmlWeb.UserAgent
属性设置。ya test.come不是我正在使用的页面(只是要填写的内容)。嗯,如果是这样的话,我不确定他们会怎么做。实际上,通过谷歌浏览器查看源代码,我得到了48张图片,但似乎至少有10张被注释掉了。因此,可能它们被htmlAgilityPack忽略了(这会给我一个38的计数)。仍然不确定为什么jquery在查找43时会有差异,那么忽略一些注释掉的和其他注释掉的是什么呢?@chobo2,尝试关闭javascript。我认为图像的数量应该是相同的。还对我的答案进行了编辑,对其进行了一个可能的解释。