将网站的一部分显示到Web浏览器中

时间:2014-08-09 15:45:01

标签: c# string winforms browser document

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

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

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

string data = webBorwser.Document.Body.OuterHtml;

因此,从数据中我需要获取该内容“id”并显示它,其余部分将被删除。

对此有什么想法吗?

2 个答案:

答案 0 :(得分:0)

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操作,这是安德烈的答案。

编辑:只是替换正文标记内的所有内容,如果你是幸运的话,如果他们全部在头脑中没有引用任何丢弃的上下文,那么你可以保留所有必需的样式和脚本。可能会有一些快乐:

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

答案 1 :(得分:0)

因此,您可能需要许多外部资源,如脚本和图像。您可以添加一些自定义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添加到正文中,使其位于顶部且可见。