一尘不染

在HtmlAgilityPack中运行脚本

c#

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

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

如果我使用HtmlAgilityPack获取页面-该脚本不会运行,那么我得到的基本上是空白页面。

有没有一种方法可以强制它运行脚本,以便我可以获取数据?


阅读 348

收藏
2020-05-19

共1个答案

一尘不染

您将获得服务器返回的内容-与Web浏览器相同。然后,Web浏览器将运行脚本。HTML Agility Pack仅是HTML解析器-
它无法解释javascript或将其绑定到文档的内部表示形式。如果要运行脚本,则需要Web浏览器。完整的“无头”网络浏览器将是您问题的完美答案。那是结合了HTML解析器,javascript解释器和模拟浏览器DOM的模型的所有东西,它们一起工作。基本上,这是一个Web浏览器,除了没有呈现部分。目前,还没有一种东西可以完全在.NET环境下工作。

最好的选择是使用WebBrowser控件,并在程序控制下在Internet
Explorer中实际加载和运行页面。这不会很快或很漂亮,但是它将满足您的需要。

另请参见我对类似问题的回答:使用.Net加载DOM并在服务器端执行javascript,其中讨论了.NET中执行此操作的可用技术。不幸的是,大多数组件现在都存在,但还不存在或没有以正确的方式集成。

2020-05-19