在不断更新的 C# 中解析 HTML

Posted

技术标签:

【中文标题】在不断更新的 C# 中解析 HTML【英文标题】:Parsing HTML in C# that is updating constantly 【发布时间】:2016-01-21 12:21:48 【问题描述】:

我有一个使用 AJAX 查询显示一些数据的网页。我需要在 C# 程序中解析其中的一些数据。

问题是,当我查看网页的源代码时,它没有显示数据,因为这是由 AJAX 脚本自动生成并修改 DOM。

如果我选择网页上的所有内容并使用 Chrome 执行“检查元素”,我将拥有完整的 html 代码,其中包含我想要提取的数据,这些数据位于各种表格中。

我尝试的是做一个webBrowser1.Navigate("www.site.com"),然后在我的webBrowser1_DocumentCompleted() 事件中,我正在这样做:

var name = webBrowser1.Document.GetElementById("table_1_r_7_c_2");

问题是webBrowser1 没有返回完整的 HTML 代码,因为某些代码是由 AJAX 查询生成的。

有谁知道我如何在 C# 中实现这种行为?

【问题讨论】:

你能告诉我们你实际尝试了什么吗?这种方式更容易提供帮助 为什么不复制 JSON 请求并解析响应? 尝试使用WebBrowser 而不是简单的请求。 WebBrowser 实际上执行 AJAX 并且通常表现得像 IE 浏览器。页面“加载”(谎言)后,您可以等待以各种方式下载完整的 html。 我尝试的是做一个 webBrowser1.Navigate("www.site.com"),然后在我的 webBrowser1_DocumentCompleted() 事件中,我这样做:var name = webBrowser1.Document .GetElementById("table_1_r_7_c_2");问题是 webBrowser1 没有返回完整的 html 代码,因为一些代码是由 ajax 查询生成的 【参考方案1】:

DocumentCompleted 事件有点误导,因为它也会为页面上的每个 AJAX 请求触发。您可以执行类似的操作来检查它是加载的实际页面,还是其他一些变体来查找特定请求。

  private void OnDocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    
       if (e.Url.AbsolutePath == webBrowser1.Url.AbsolutePath)
       
          // page loaded
       
    

【讨论】:

以上是关于在不断更新的 C# 中解析 HTML的主要内容,如果未能解决你的问题,请参考以下文章

全网最硬核 Java 新内存模型解析与实验单篇版(不断更新QA中)

全网最硬核 Java 新内存模型解析与实验单篇版(不断更新QA中)

全网最硬核 Java 新内存模型解析与实验单篇版(不断更新QA中)

全网最硬核 Java 新内存模型解析与实验单篇版(不断更新QA中)

全网最硬核 Java 新内存模型解析与实验单篇版(不断更新QA中)

更新命令和 C#