2

所以,我遇到了一个问题,我最喜欢的广播电台在我开车时播放一首我不知道的歌曲。他们没有一个显示他们播放过的歌曲列表的页面。但是,他们的网站上确实有一个“正在播放”部分,其中显示了当前正在播放的内容以及由谁播放。因此,我正在尝试编写一个小程序,该程序将每 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();
}

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

编辑

另外,有没有办法WebBrowser允许脚本运行?我收到弹出窗口询问我是否要允许它们运行。我不想压制他们,我需要他们跑。

4

1 回答 1

7

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

于 2013-02-12T15:19:44.623 回答