C#httpwebrequest和javascript

我正在使用C#HttpWebRequest来获取网页的一些数据。 问题是在页面加载后使用javascript / ajax更新了一些数据,而我没有在响应字符串中获取它。 有没有办法让webrequest等到页面中的所有脚本都已完成执行?

谢谢

阿米特

如果我正确地解释了您的问题,那么您的问题就没有简单的解决方案。

您正在从服务器上抓取HTML,并且由于您的C#代码不是真正的Web浏览器,因此它不会执行客户端脚本。

这样您就无法访问您获取的HTML不包含的信息。

编辑:我不知道这些来自原始网站的AJAX调用有多复杂,但您可以使用Firebug或Fiddler for IE来查看请求是如何进行的,以便在C#应用程序中调用这些AJAX调用。 所以你可以添加你需要的信息。 但这只是一个理论上的解决方案。

只是一个想法,但有一种方法可以让.net加载一个网页,就像它在浏览器中一样:使用System.Windows.Forms

您可以将网页加载到WebBrowser控件中

WebBrowser wb = new WebBrowser(); wb.ScrollBarsEnabled = false; wb.ScriptErrorsSuppressed = true; wb.Navigate(url); while (wb.ReadyState != WebBrowserReadyState.Complete) { Application.DoEvents(); } wb.Document.DomDocument.ToString() 

这可能会给你pre ajax DOM,但也许有办法让它先运行ajax。

当您在Web浏览器中打开网页时,浏览器会执行javascript并下载页面使用的其他资源(图像,脚本等)。 HttpWebRequest本身不会做任何这个,它只会下载你请求的页面的html。 它永远不会执行任何javascript / ajax代码。

使用HttpWebRequest下载页面,以编程方式在源代码中搜索相关的ajax信息,然后使用新的HttpWebRequest将数据拉下来。

HttpWebRequest不会模拟Web浏览器,它只会下载您指向的资源。 这意味着它不会执行甚至下载JavaScript文件。

你必须使用像FireBug这样的东西来获取通过JavaScript引入的数据的URL,然后指向你的HttpWebRequest。

使用HttpWebRequest下载页面。 在源代码中搜索相关的AJAX信息,然后使用新的HttpWebRequest来提取该数据。

你可以使用PhantomJs 。 我有这个问题 ,但没有找到我的问题的解决方案。 在我看来,最好的解决方案就是这个 。

我的解决方案如下所示:

 var page = require('webpage').create(); page.open("https://sample.com", function(){ page.evaluate(function(){ var i = 0, oJson = jsonData, sKey; localStorage.clear(); for (; sKey = Object.keys(oJson)[i]; i++) { localStorage.setItem(sKey,oJson[sKey]) } }); page.open("https://sample.com", function(){ setTimeout(function(){ page.render("screenshoot.png") // Where you want to save it console.log(page.content); //page source // You can access its content using jQuery var fbcomments = page.evaluate(function(){ return $("body").contents().find(".content") }) phantom.exit(); },10000) }); });