我想导航到一个特定的网站,然后我希望在网络浏览器中只显示网站的一部分,该网站以:
开头<div id="dex1" ...... </div>
我知道我需要通过id获取元素,但首先我尝试写这个:
string data = webBorwser.Document.Body.OuterHtml;
因此,从数据中我需要获取该内容“id”并显示它,其余部分将被删除。
对此有什么想法吗?
答案 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添加到正文中,使其位于顶部且可见。