【问题标题】:Display portion of a Website into a Web Browser在 Web 浏览器中显示网站的一部分
【发布时间】:2014-08-09 15:45:01
【问题描述】:

我想导航到一个特定的网站,然后我想在网络浏览器中只显示网站的一部分,以:

<div id="dex1" ...... </div>

我知道我需要通过 id 获取元素,但首先我尝试写这个:

string data = webBorwser.Document.Body.OuterHtml;

所以我需要从数据中获取该内容“id”并显示它,其余的将被删除。

对此有什么想法吗?

【问题讨论】:

  • 我会做一个 HttpWebRequest 并从 html 响应中只提取一个
    ,这样您就可以在浏览器上向用户显示它。问题在于您必须在该脚本中保留您需要的所有&lt;style&gt;&lt;script&gt; 标签,以便内容看起来不错。另外,您正在处理wpf? winform?
  • 我想要一个代码示例,如果可能的话
  • 我正在使用 windows 窗体
  • 是的,但我需要在收到响应之前对其进行编辑,因为我会在 Web 浏览器中显示整个响应(整个 html)

标签: c# string winforms browser document


【解决方案1】:
webBrowser1.DocumentCompleted += (sender, e) =>
{
    webBrowser1.DocumentText = webBrowser1.Document.GetElementById("dex1").OuterHtml;
};

再三考虑,不要这样做,设置 DocumentText 属性会导致 DocumentCompleted 事件再次触发。所以也许可以:

webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted;

void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    webBrowser1.DocumentCompleted -= webBrowser1_DocumentCompleted;
    webBrowser1.DocumentText = webBrowser1.Document.GetElementById("dex1").OuterHtml;
}

虽然在大多数现实世界的情况下,我希望你会得到更好的结果,注入一些 javascript 来进行 DOM 操作,这是安德烈的回答。

编辑:只需替换 body 标记内的所有内容,如果幸运的话,可能会维护所有必需的样式和脚本,如果它们都在头部不引用任何丢弃的上下文,您可能会对以下内容感到高兴:

webBrowser1.Document.Body.InnerHtml = webBrowser1.Document.GetElementById("dex1").OuterHtml;

【讨论】:

    【解决方案2】:

    因此,您可能需要大量外部资源,例如脚本和图像。从您的网站加载文档后,您可以添加一些自定义 javascript 来修改 DOM。从How to update DOM content inside WebBrowser Control in C#? 看起来像这样:

    HtmlElement headElement = webBrowser1.Document.GetElementsByTagName("head")[0];
    HtmlElement scriptElement = webBrowser1.Document.CreateElement("script");
    IHTMLScriptElement domScriptElement = (IHTMLScriptElement)scriptElement.DomElement;
    domScriptElement.text = "function applyChanges(){ $('body >').hide(); $('#dex1').show().prependTo('body');}";
    headElement.AppendChild(scriptElement);
    
    // Call the nextline whenever you want to execute your code
    webBrowser1.Document.InvokeScript("applyChanges");
    

    这也是假设 jquery 可用,因此您可以进行简单的 DOM 操作。

    javascript 代码只是将所有子项隐藏在主体上,然后将“#dex”div 附加到主体上,使其位于顶部且可见。

    【讨论】:

    • 我可以把这一切写成 Web 浏览器的 Document Completed 事件吗?
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签