C# 在页面加载完成后下载 HTML 字符串

本文关键字:下载 HTML 字符串 加载 | 更新日期: 2023-09-27 18:34:25

我正在尝试使用循环来下载一堆html页面并报废内部数据。但是这些页面在加载时有一些 JavaScript 作业运行。所以我认为使用网络客户端可能不是一个好的选择。但是如果我像下面这样使用网络浏览器。它在循环中第一次调用后返回空的 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();

C# 在页面加载完成后下载 HTML 字符串

您说的没错,WebClient 和所有其他 HTTP 客户端接口将完全忽略 JavaScript;毕竟它们都不是浏览器。

你想要:

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

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

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;
    /* ... */
}