C# 使用 HTTPWebRequest 拉取网页并从站点执行 javascript

Posted

技术标签:

【中文标题】C# 使用 HTTPWebRequest 拉取网页并从站点执行 javascript【英文标题】:C# Pull a webpage with HTTPWebRequest and execute the javascript from the site 【发布时间】:2012-11-05 13:39:34 【问题描述】:

有没有办法使用 HTTPWebRequest 获取网页,然后执行页面上的所有 javascriptcode 以及 ajax 调用并将结果保存到字符串?

我想解析一个网站,其中一些图像是通过 js 代码生成的,并且在 js 脚本运行之前这些图像不在网页上。

现在我在网上搜索解决方案,但我发现的只是这样的答案是不可能的,请改用网络浏览器,这对我来说不是一个选项。

问候

【问题讨论】:

您能详细说明为什么不能使用 WebBrowser 类吗? notions.okuda.ca/2009/06/11/… 详细说明了 alexn 的建议。如果你不能使用 a 网络浏览器,我无法从你的 Q 中判断你是否不能使用 the WebBrowser 对象。 WebBrowser 很慢,有时有问题,速度对我很重要。 【参考方案1】:

这确实是不可能的,正如我在尝试满足急需的需求时发现的那样。 Javascript 将执行,但不会进行 Ajax 调用。

我确定的解决方案是通过代码隐藏文件(C# 代码)同步获取 Ajax 调用的所有数据,并使用脚本标签将代码隐藏变量分配给 Javascript 变量,并让 Javascript做它的工作(构建动态元素等)

【讨论】:

你用什么来执行没有 ajax 调用的 javascript? 同步 Javascript 无论如何都会在任何网络请求中执行。只有异步代码(ajax 调用、回调)才会失败。回答问题:我在 ASP.NET 中使用了WebRequest 类。【参考方案2】:

您可以使用 C++ http 系统来执行此操作,它可以让您对接收的数据片段进行大量控制,但我想这并不是一个真正的答案,所以......

为什么不尝试输入webkit into your app,并从中排除事件。它有几个事件可以在下载开始和完成时通知您。

【讨论】:

我认为快速简便的方法是 WebBrowser 控件,对他来说最好的方法是使用 .NET WebKit 包装器。【参考方案3】:

我做了一些研究只是因为我觉得它很有趣。我发现了一个名为 Phantom.js 的东西,看起来它可以满足您的需求。看看这个: http://phantomjs.org/

【讨论】:

有趣的项目,但它似乎更独立,不适合在 C# 中使用。

以上是关于C# 使用 HTTPWebRequest 拉取网页并从站点执行 javascript的主要内容,如果未能解决你的问题,请参考以下文章

用asp.net c# HttpWebRequest获取网页源代码

c#中webclient,httpwebrequest,webbroser哪个获取网页快

c# HttpWebRequest 使用代理访问网页,在vs中release调试的时候可以,直接运行出错

C# httpwebrequest 和 javascript

用C#代码 get请求获取网页响应代码,通过HttpWebRequest的GetResponse()方法报异常,我想获取这相应代码

C# 获取网页内容