【问题标题】:c# download html string after page loading is finishedc#页面加载完成后下载html字符串
【发布时间】:2016-02-12 14:29:24
【问题描述】:

我正在尝试使用循环来下载一堆 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();

【问题讨论】:

  • 如果使用WebClient的downloadstring方法呢?有帮助吗?

标签: javascript c# html


【解决方案1】:

您说得对,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;
    /* ... */
}

【讨论】:

  • 非常感谢亚历克斯。这是我正在寻找的确切答案。请告诉我如何添加 DocumentCompleted 事件。
  • 用示例编辑。
  • 亚历克斯。谢谢。这是控制台应用程序。我使用了这段代码,但没有触发 Wb_DocumentCompleted 函数。
  • 哦。查看线程 cmets:Using WebBrowser in a console application
  • 亚历克斯。太感谢了。你拯救了我的一天。
猜你喜欢
  • 1970-01-01
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-26
  • 2021-01-16
  • 1970-01-01
相关资源
最近更新 更多