Tho*_*and 5 c# html-agility-pack infinite-scroll
有很多网站使用这种(imo)恼人的"无限滚动"风格.例如tumblr,twitter,9gag等网站.
我最近尝试使用HtmlAgilityPack以编程方式从这些网站中删除一些图片.像这样:
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(url);
var primary = doc.DocumentNode.SelectNodes("//img[@class='badge-item-img']");
var picstring = primary.Select(r => r.GetAttributeValue("src", null)).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
这工作正常,但当我尝试从某些网站加载HTML时,我注意到我只收回了少量内容(比如前10个"帖子"或"图片",或者其他什么......)我想知道是否可以在c#中模拟页面的"向下滚动".
这不仅仅是我以编程方式加载html的情况,当我只是去tumblr这样的网站时,我检查firebug或只是"查看源代码",我预计所有内容都会在某处,但很多好像是用javascript隐藏/插入.HTML源中只显示我的屏幕上实际可见的内容.
所以我的问题是:是否可以模拟无限滚动到页面,并用c#(最好)加载到那个HTML?
(我知道我可以使用API用于tumblr和twitter,但我只是想和HtmlAgilityPack一起玩一些有趣的黑客攻击)
除了嵌入 Web 浏览器(通常无法在无头环境中工作)之外,无法一次性为所有此类网站可靠地执行此操作。
您应该考虑做的是查看站点的 JavaScript,以便了解在用户向下滚动时使用哪些 AJAX 查询来获取内容。
或者,在浏览器中使用 Web 调试器(例如 Chrome 中包含的调试器)。这些调试器通常有一个“网络”窗格,可用于检查页面执行的 AJAX 请求。在向下滚动时查看这些请求应该会为您提供足够的信息来编写模拟这些请求的 C# 代码。
然后,您必须将这些请求的响应解析为特定 API 提供的任何类型的内容,可能是 JSON 或 XML,但几乎可以肯定不是 HTML。(无论如何,这可能对您更好,因为它可以让您不必解析面向显示的 HTML,而 AJAX API 将为您提供应该更易于使用的数据对象。)
| 归档时间: |
|
| 查看次数: |
2289 次 |
| 最近记录: |