【问题标题】:C# Webbrowser control, mismatch between displayed content and Document.innerHtmlC# Webbrowser 控件,显示内容与 Document.innerHtml 不匹配
【发布时间】:2019-03-09 14:29:58
【问题描述】:

所以我有一个网站,我将其加载到表单的网络浏览器控件中。加载文档后,我检索 webbrowser.documenttext 。我在这里寻找解析特定的表。但我在这里没有找到表格,但我看到它正在表单浏览器中显示。

我告诉你,这个特定的表正在通过已经加载的 javascript 代码加载/附加到 doc。 当我右键单击并选择“查看源代码”时,它会弹出带有正确 html 的文档。

我的问题是如何获取 ViewSource 引用的相同文档,或者有什么方法可以获取表单上呈现的文档?

【问题讨论】:

    标签: c# html windows forms


    【解决方案1】:

    使用 HtmlAgilityPackage 来根据您的需要解析数据,而不是使用 Webbrowser Control。

     var html = new HtmlDocument();
    html.LoadHtml(new WebClient().DownloadString("http://www.asp.net")); 
    var root = html.DocumentNode;
    var commonPosts = root.Descendants().Where(n => n.GetAttributeValue("class", 
    "").Equals("common-post"));
    

    【讨论】:

    • 但是这只会解析原始 HTML,如果动态 HTML 已经注入脚本并且脚本正在更改 dom。我需要最新更改的 dom。
    【解决方案2】:

    Similar Existing Question

    上述问题与我的问题非常相似,经过彻底回答后,我了解到我需要等待并轮询网络浏览器以获取动态内容。

    我并没有真正实现答案中提供的代码,但我将 documentCompleted 事件更改为异步并提供了 5 秒的等待任务延迟

    private async void Browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            await Task.Delay(5000);
            var html= wb.Document.GetElementsByTagName("HTML")[0].OuterHtml;
        }
    

    现在我得到了动态结果。谢谢,我现在有感觉。

    【讨论】:

      猜你喜欢
      • 2012-09-27
      • 1970-01-01
      • 2016-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多