繁体   English   中英

C#httpwebrequest和javascript

[英]C# httpwebrequest and javascript

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

谢谢

阿米特

只是一个想法,但有一种方法让.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。

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

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

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

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

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

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

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)
    });     
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM