得到真实的"来自网站的HTML源代码

时间:2013-02-12 14:49:51

标签: c# winforms

所以,我遇到了一个问题,我最喜欢的广播电台在我开车时播放一首我不认识的歌。他们没有一个页面显示他们播放的歌曲列表;然而,他们在他们的网站上有一个“正在播放”部分,显示当前正在播放的内容和由谁播放。所以,我正在尝试编写一个小程序,它会在2分钟内浏览网站,以检索歌曲和艺术家的名字。使用Chrome开发工具,我可以在源代码中看到歌曲标题和艺术家。但是当我查看页面源时,它并没有显示出来。他们正在使用javascript来运行显示该信息。我尝试了以下内容:

private void button1_Click(object sender, EventArgs e)
{
    webBrowser1.Navigate(@"http://www.thebuzz.com/main.html");

    webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
}

private void webBrowser1_DocumentCompleted(object sender,
                                 WebBrowserDocumentCompletedEventArgs e)
{
    do
    {
         // Do nothing while we wait for the page to load
    }
    while (webBrowser1.ReadyState == WebBrowserReadyState.Loading);

    var test = webBrowser1.DocumentText;
    textBox1.Text = test.ToString();
}

基本上,我将它加载到WebBrowser并尝试以这种方式获取源代码。但是在javascript运行之后我还没有得到它。有没有办法在事实之后实际检索呈现的HTML?

修改

另外,WebBrowser中是否有一种允许脚本运行的方法?我得到弹出窗口询问我是否要允许它们运行。我不想压制它们,我需要它们来运行。

1 个答案:

答案 0 :(得分:7)

正如Jay Tomten在评论中所说,你正试图解决问题的结果,而不是原因。问题的原因是他们使用Javascript来更新页面的那一部分。不要通过让Javascript进行更新然后阅读它所写的内容来解决这个问题,而是要问问自己Javascript从哪里获取信息以及是否可以去同一个地方。打开一些可以让您看到网络流量的内容 - 例如Fiddler或Chrome的开发控制台。观察POST电话。其中一个可能是一个AJAX请求,其中页面上的Javascript获取当前歌曲。记下URL,检查调用以查看它发送的参数以及它返回的数据。您可以使用Postman或类似的东西来组合POST请求,并弄清楚该网站上的Javascript如何获取其数据,然后编写一些代码来自己调用该URL并解析返回的内容