我正在尝试抓取一个特定的网页,其工作方式如下。
首先加载页面,然后它运行某种 javascript 来获取填充页面所需的数据。我对这些数据很感兴趣。
如果我使用 HtmlAgilityPack 获取页面 - 脚本不会运行,所以我得到的内容基本上是一个空白页面。
有没有办法强制它运行脚本,这样我就可以获得数据?
最佳答案
您正在获取服务器返回的内容 - 与网络浏览器相同。当然,Web 浏览器随后会运行这些脚本。 Html Agility Pack 只是一个 HTML 解析器——它无法解释 javascript 或将其绑定(bind)到文档的内部表示。如果你想运行脚本,你需要一个网络浏览器。您的问题的完美答案是一个完整的“ headless ”网络浏览器。它结合了 HTML 解析器、javascript 解释器和模拟浏览器 DOM 的模型,所有这些都协同工作。基本上,这是一个网络浏览器,只是没有渲染部分。目前还没有完全在 .NET 环境中工作的东西。
最好的办法是使用 WebBrowser
控件,并在程序控制下在 Internet Explorer 中实际加载和运行页面。这不会很快或很漂亮,但它会做你需要做的。
另请参阅我对类似问题的回答:Load a DOM and Execute javascript, server side, with .Net其中讨论了 .NET 中用于执行此操作的可用技术。不幸的是,大部分内容现在已经存在,但还没有完全存在,或者没有以正确的方式集成。
关于c# - 在 HtmlAgilityPack 中运行脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11393075/