首页  >  文章  >  web前端  >  如何从 Web 浏览器控件检索动态生成的 HTML 代码?

如何从 Web 浏览器控件检索动态生成的 HTML 代码?

DDD
DDD原创
2024-10-18 08:35:03272浏览

How to Retrieve Dynamically Generated HTML Code from Web Browser Controls?

如何使用.NET的WebBrowser或mshtml.HTMLDocument动态生成HTML代码?

问题:

使用 WebBrowser 类或 mshtml.HTMLDocument 接口从网页检索动态生成的 HTML 代码可能是一个挑战。 WebBrowser 类无法捕获渲染的 HTML,并且 mshtml.HTMLDocument 返回与实际页面内容不同的原始 HTML。

解决方案:

使用 WebBrowser类:

虽然 WebBrowser 类没有提供获取渲染 HTML 的直接方法,但可以实现一种解决方法。将 WebBrowser 控件添加到表单,让它导航到所需的 URL,然后使用以下步骤检索 HTML:

  1. 发送“CTRL A”键选择所有内容。
  2. 使用 Copy 方法将所选内容复制到剪贴板。
  3. 从剪贴板粘贴 HTML 并根据需要进行解析。

使用 mshtml.HTMLDocument 接口:

  1. 创建 mshtml.HTMLDocument 的实例并使用 write 将下载的 HTML 传递给它。
  2. 通过轮询 all 属性和 IsBusy 检查 HTML 快照中的更改WebBrowser 控件的属性。
  3. 一旦 IsBusy 属性变为 false 并且 HTML 快照中没有任何更改,则认为页面已完全呈现并检索 HTML。

其他注意事项:

  • 确保使用浏览器功能控制启用 HTML5 渲染。
  • 使用超时来防止无限渲染。
  • 异步/等待可以简化轮询逻辑的实现。

示例代码:

<code class="C#">using Microsoft.Win32;
using System;
using System.Threading;
using System.Threading.Tasks;
using mshtml;

public async Task<string> LoadDynamicPage(string url, CancellationToken token)
{
    var doc = new HTMLDocument();
    doc.write(new System.Net.WebClient().DownloadString(url));

    // Poll for changes in HTML snapshot
    var html = doc.documentElement.outerHTML;
    while (true)
    {
        await Task.Delay(500, token);
        var htmlNow = doc.documentElement.outerHTML;
        if (html == htmlNow)
            break;

        html = htmlNow;
    }

    return html;
}</code>

以上是如何从 Web 浏览器控件检索动态生成的 HTML 代码?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn