2012-11-16 31 views
5

有没有办法使用HTTPWebRequest获取网页,然后执行页面上的所有javascript代码以及Ajax调用并将结果保存为字符串?C#使用HTTPWebRequest提取网页,并从网站执行javascript

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

现在我搜索了网络上的解决方案,但是我发现所有的答案都是不可能的,请使用webbrowser,而不是我的选项。

问候

+1

你能详细说明为什么使用WebBrowser类不是一个选项吗? – alexn

+0

http://notions.okuda.ca/2009/06/11/calling-javascript-in-a-webbrowser-control-from-c/详细说明亚历山大的建议。如果您不能使用* a *网络浏览器,您无法使用* WebBrowser对象,我无法从您的Q中知道。 –

+0

WebBrowser速度很慢,有时候也是越野车,速度对我来说很重要。 – maddo7

回答

2

你可以用C++的http系统做这件事,它可以让你对接收的数据段有很多的控制,但我想这不是一个真正的答案。 ..

为什么不试试把webkit into your app,并从它运行的事件。它有几个事件可以在下载开始和结束时通知您。

+0

我认为快速简便的方法是使用WebBrowser控件,对他来说最好的方法就是使用.NET WebKit包装器。 –

0

这的确是不可能的,因为我发现,同时尽力满足要求的迫切需求。 Javascript将执行,但Ajax调用将不会生成。

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

+0

和你用什么来执行没有ajax调用的JavaScript? – maddo7

+0

同步JavaScript在任何Web请求中执行。只有使用异步代码(ajax调用,回调)才会失败。 要回答这个问题:我在ASP.NET中使用了'WebRequest'类。 –

1

我做了一点研究,仅仅因为我认为这很有趣。我发现了一种叫做Phantom.js的东西,它看起来像是你需要的东西。检查出来: http://phantomjs.org/

+0

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