从.net(C#)中的Webbrowser控件中检索选定的文本

Posted

技术标签:

【中文标题】从.net(C#)中的Webbrowser控件中检索选定的文本【英文标题】:Retrieving Selected Text from Webbrowser control in .net(C#) 【发布时间】:2010-09-18 01:21:48 【问题描述】:

我一直在试图弄清楚如何在我的浏览器控件中检索用户选择的文本,并且在挖掘了 msdn 和其他资源之后没有运气,所以我想知道是否有办法真正做到这一点.也许我只是错过了什么。

感谢您对此提供的任何帮助或资源。

谢谢

【问题讨论】:

【参考方案1】:

您需要使用 WebBrowser 控件的 Document.DomDocument 属性并将其转换为 Microsoft.mshtml 互操作程序集中提供的 IHtmlDocument2 接口。这使您可以访问在 IE 中实际运行的 javascript 可用的完整 DOM。

为此,您首先需要将项目的引用添加到 Microsoft.mshtml 程序集,通常位于“C:\Program Files\Microsoft.NET\Primary Interop Assemblies\Microsoft.mshtml.dll”。可能有多个,请确保选择具有此路径的引用。

然后获取当前的文本选择,例如:

using mshtml;

...

    IHTMLDocument2 htmlDocument = webBrowser1.Document.DomDocument as IHTMLDocument2;

    IHTMLSelectionObject currentSelection= htmlDocument.selection;

    if (currentSelection!=null) 
    
        IHTMLTxtRange range= currentSelection.createRange() as IHTMLTxtRange;

        if (range != null)
        
            MessageBox.Show(range.text);
        
    

有关从 .NET 应用程序访问完整 DOM 的更多信息,请参阅:

Walkthrough: Accessing the DHTML DOM from C#

IHTMLDocument2 Interface reference

【讨论】:

哇,控件比我想象的更强大! 如果您不介意对 IE/mshtml 的依赖,这是一种非常强大且相对简单的方法,可以将 Web 样式的 UI 添加到您的桌面应用程序中。 2路通信和事件也很简单,如果有人感兴趣,请告诉我。 非常感谢。这正是我一直在寻找的。我正在处理的项目使用 HTML,这就是我选择 Web 浏览器控件的原因。我只是想不出一种方法来获取选定的文本。还要感谢来源,他们提供了我刚刚错过的有价值的信息。 谢谢你,Ash,你救了我几个小时的噩梦 :) @Ash,如果我使用 WPF 的 webBrowser 会怎样? WPF的webBrowser没有webBrowser1.Document.DomDocument【参考方案2】:

以防万一有人对不需要添加对 mshtml.dll 的引用的解决方案感兴趣:

private string GetSelectedText()

    dynamic document = webBrowser.Document.DomDocument;
    dynamic selection = document.selection;
    dynamic text = selection.createRange().text;
    return (string)text;

【讨论】:

你接受的答案有有用的信息,这是一个更简单的答案,实际上是 OP 想要的,而不需要对项目添加额外的引用。【参考方案3】:

如果你只是使用下面的技术呢?

//将选中的文本复制到剪贴板

        Clipboard.Clear();
        SendKeys.SendWait("^(c)");

//从剪贴板中获取选中的文本

        string strClip = Clipboard.GetText().Trim();
        Clipboard.Clear();

【讨论】:

【参考方案4】:

我假设您有一个 WinForms 应用程序,其中包含一个可以打开网站的控件。

检查您是否可以在 Web 浏览器控件中注入/运行 JavaScript。使用 JavaScript,您将能够找出选择的内容并将其返回。否则,我怀疑 Web 浏览器控件是否知道其中选择的内容。

【讨论】:

您可以在 Web 浏览器中运行 JavaScript 并与 C# 对话。例如看到这个***.com/questions/305915/…

以上是关于从.net(C#)中的Webbrowser控件中检索选定的文本的主要内容,如果未能解决你的问题,请参考以下文章

.Net 中的缓存和 WebBrowser 控件

如何禁用 .NET WebBrowser 控件中的缓存?

如何从托管 WebBrowser 控件的应用程序调用 WebBrowser 控件查看的页面中的 JavaScript 函数?

VB.NET WebBrowser 控件 OnClick 事件未触发

C# Uwp app webbrowser 控件无法获取设备位置

如何从 webBrowser 控件中的当前选定选项中获取 innerText