16

我正在尝试抓取一个特定的网页,其工作方式如下。

首先加载页面,然后运行某种 javascript 来获取填充页面所需的数据。我对那个数据很感兴趣。

如果我使用 HtmlAgilityPack 获取页面 - 脚本不会运行,所以我得到它基本上是一个空白页面。

有没有办法强制它运行脚本,所以我可以获取数据?

4

2 回答 2

17

您将获得服务器返回的内容 - 与 Web 浏览器相同。当然,Web 浏览器会运行这些脚本。Html Agility Pack 只是一个 HTML 解析器 - 它无法解释 javascript 或将其绑定到文档的内部表示。如果你想运行脚本,你需要一个网络浏览器。您的问题的完美答案将是一个完整的“无头”网络浏览器。它包含了一个 HTML 解析器、一个 javascript 解释器和一个模拟浏览器 DOM 的模型,所有这些都一起工作。基本上,那是一个网络浏览器,除了没有渲染部分。目前还没有这样的东西可以完全在 .NET 环境中运行。

最好的办法是使用WebBrowser控件并在 Internet Explorer 中在程序控制下实际加载和运行页面。这不会很快或很漂亮,但它会做你需要做的事情。

另请参阅我对类似问题的回答:Load a DOM and Execute javascript, server side, with .Net,其中讨论了 .NET 中用于执行此操作的可用技术。不幸的是,大多数部件现在都存在,但还没有完全到位或者没有以正确的方式集成。

于 2012-07-09T12:15:24.090 回答
3

您可以为此使用 Awesomium,http: //www.awesomium.com/ 。它工作得相当好,但不支持 x64 并且不是线程安全的。我用它来扫描一些网站 24x7 并且它至少连续几天运行良好,但它通常会崩溃。

于 2014-01-27T08:07:48.700 回答