我试图在C# Web窗体项目中使用HTMLAgilityPack抓取网页。
我所看到的所有解决方案都使用了WebBrowser控件。然而,据我所知,这只在WinForms项目中可用。
目前我通过以下代码调用所需的页面:
var getHtmlWeb = new HtmlWeb();
var document = getHtmlWeb.Load(inputUri);
HtmlAgilityPack.HtmlNodeCollection nodes = document.DocumentNode.SelectNodes("//div[@class=\"nav\"]");
下面是我看到的一段使用WebBrowser控件的代码示例:
if (this.webBrowser1.Document.GetElementsByTagName("html")[0] != null)
_htmlAgilityPackDocument.LoadHtml(this.webBrowser1.Document.GetElementsByTagName("html")[0].OuterHtml);
我怎样才能抓住网页一旦 AJAX 已加载?
2条答案
按热度按时间kuarbcqp1#
似乎使用HTMLAgilityPack只能抓取通过html本身加载的内容。因此,通过 AJAX 加载的任何内容对HTMLAgilityPack都不可见。
也许最简单的选择-在可行的情况下-是使用基于浏览器的工具,如Firebug来确定 AJAX 加载的数据源。然后直接操作源数据。这样做的另一个好处是能够抓取更大的数据集。
ej83mcc02#
我一整天都在努力做到这一点,所以这里有一个联邦快递跟踪的例子,说明接受的答案是指(我认为):
或者,您是否考虑过使用www.example.com在应用程序中构建浏览器Cefsharp.net,然后通过.net界面使用Dev Tools?
你可能已经注意到,即使是动态 AJAX /JS生成的HTML也可以使用Firefox中的Inspect Element选项找到。因此,即使你不能使用传统的HTML抓取方法来抓取代码,代码也会在你的计算机上。
另一个可以考虑的选择。
https://cefsharp.github.io/