使用 .NET 检索动态生成的 HTML 代码对许多人来说是一项难以捉摸的任务。虽然已经建议使用 Microsoft HTML 对象库程序集中的 System.Windows.Forms.WebBrowser 类和 COM 接口 mshtml.HTMLDocument,但事实证明它们的实现具有挑战性。
系统.Windows.Forms.WebBrowser 类在检索 Web 浏览器呈现的 HTML 代码方面未产生令人满意的结果。即使访问导航到“https://www.google.com/#q=where am i”的网页的 DomDocument,也无法检索呈现页面上显示的动态生成的数据。
同样,直接访问mshtml.HTMLDocument2接口也不能提供期望的结果。使用 System.Net.WebClient 从指定 URL 下载原始 HTML 并将其写入 IHTMLDocument2 实例无法捕获动态生成的数据。
优雅的解决方案结合轮询和异步/等待原理的方法提供了更可靠的解决方案。通过不断轮询当前的 HTML 快照并检查 WebBrowser 的 IsBusy 属性,我们可以确定页面何时完成渲染。这种方法显着降低了过早检索 HTML 代码的机会。
需要注意的是,确定页面完成渲染的确切时刻并不总是可能的由于某些网页上的复杂性和持续 AJAX 更新的潜力,100% 确定。为了缓解这种情况,建议在轮询逻辑之上实现超时机制。
此外,使用浏览器功能控件启用 HTML5 渲染至关重要,因为 WebBrowser 控件默认在 IE7 模拟模式下运行。可以调整此设置以确保与现代 Web 技术的兼容性并提高渲染准确性。
提供的 C# 代码以可用的形式演示了这些原则的应用。它使用 WebBrowser 控件、轮询逻辑和 async/await 结构来从特定 URL 检索动态 HTML 内容。结果是一个更精确和用户友好的解决方案,满足动态 HTML 提取的需求。
以上是如何克服在 .NET 中提取动态生成的 HTML 的挑战?的详细内容。更多信息请关注PHP中文网其他相关文章!