我正在尝试抓取一个按如下方式工作的特定网页。
首先加载页面,然后运行某种javascript来获取填充页面所需的数据。我对这些数据感兴趣。
如果我使用HtmlAgilityPack获取页面-该脚本不会运行,那么我得到的基本上是空白页面。
有没有一种方法可以强制它运行脚本,以便我可以获取数据?
您将获得服务器返回的内容-与Web浏览器相同。然后,Web浏览器将运行脚本。HTML Agility Pack仅是HTML解析器- 它无法解释javascript或将其绑定到文档的内部表示形式。如果要运行脚本,则需要Web浏览器。完整的“无头”网络浏览器将是您问题的完美答案。那是结合了HTML解析器,javascript解释器和模拟浏览器DOM的模型的所有东西,它们一起工作。基本上,这是一个Web浏览器,除了没有呈现部分。目前,还没有一种东西可以完全在.NET环境下工作。
最好的选择是使用WebBrowser控件,并在程序控制下在InternetExplorer中实际加载和运行页面。这不会很快或很漂亮,但是它将满足您的需要。
WebBrowser
另请参见我对类似问题的回答:使用.Net加载DOM并在服务器端执行javascript,其中讨论了.NET中执行此操作的可用技术。不幸的是,大多数组件现在都存在,但是还不存在,或者没有以正确的方式集成。