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

本文关键字:控件 Webbrowser 检索 文本 中的 net | 更新日期: 2023-09-27 17:47:49

我一直在想如何在我的网络浏览器控件中检索用户选择的文本,但在挖掘msdn和其他资源后运气不佳,所以我想知道是否有办法真正做到这一点。也许我只是错过了什么。

我感谢任何有关这方面的帮助或资源。

感谢

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

您需要使用文档。WebBrowser控件的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);
        }
    }

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

  • 演练:从C#访问DHTML DOM

  • IHTMLDocument2接口参考

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

private string GetSelectedText()
{
    dynamic document = webBrowser.Document.DomDocument;
    dynamic selection = document.selection;
    dynamic text = selection.createRange().text;
    return (string)text;
}

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

//将所选文本复制到剪贴板

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

//从剪贴板获取所选文本

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

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

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