c#在页面加载完成后下载html字符串

时间:2016-02-12 14:29:25

标签: javascript c# html

我正在尝试使用循环来下载一堆html页面并废弃内部数据。但是这些页面在加载时会运行一些javascript工作。所以我在想使用webclient可能不是一个好选择。但是,如果我使用webBrowser如下。它在循环中第一次调用后返回空的html字符串。

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

1 个答案:

答案 0 :(得分:3)

WebClient&所有其他HTTP客户端接口都将完全忽略JavaScript;毕竟,没有一个是浏览器。

你想:

var html = wb.Document.GetElementsByTagName("HTML")[0].OuterHtml;

请注意,如果您通过WebBrowser加载,则不需要刮取原始标记;您可以使用GetElementById/TagName等DOM方法。

while循环非常VBScript,你应该将代码连接到DocumentCompleted事件。

private void Whatever()
{
    WebBrowser wb = new WebBrowser();
    wb.DocumentCompleted += Wb_DocumentCompleted;

    wb.ScriptErrorsSuppressed = true;
    wb.Navigate("http://stackoverflow.com");
}

private void Wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    var wb = (WebBrowser)sender;

    var html = wb.Document.GetElementsByTagName("HTML")[0].OuterHtml;
    var domd = wb.Document.GetElementById("copyright").InnerText;
    /* ... */
}