c# - 在 HtmlAgilityPack 中运行脚本

标签 c# javascript html-agility-pack

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

首先加载页面,然后它运行某种 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/

相关文章:

c# - 如何判断用户何时在您的控制范围之外单击?

javascript - 根据变量值在javascript中获取图像

javascript - AngularJS 1.6 : Object printed in Html is not visible (undefined) in controller function

html-agility-pack - 无法使用 Html-Agility-Pack 设置 InnerText

c# - 加入一个线程无一异常(exception)地停止执行

c# - 何时将对象返回到其池中

c# - 如何获取多个<a>标签的内文?

c# - 使用 C# HTMLAGILITYPACK 从网站抓取动态数据

c# - 将 Windows 应用商店应用程序图像放入另一个程序集中?

javascript - 使用 javascript 和 AJAX 将 html 文件插入到我的主 html 文件中的 DIV id