【问题标题】:Get Selected text in browser programmatically以编程方式在浏览器中获取选定文本
【发布时间】:2010-01-04 15:03:04
【问题描述】:

从我的 Windows 应用程序中,我想检测“Internet Explorer”、Firefox 和任何其他浏览器中的选定文本。

你知道我应该使用什么代码来实现这一点吗?

这个想法不是在 IE 中搜索文本,而是在 IE 中“捕获选定的文本”。顺便说一句,不仅是 IE,还有任何具有焦点的 Windows 应用程序 我能想到的一件事是模拟 ctrl+c 来复制选定的文本然后读取剪贴板,但我也不喜欢这种解决方案。

我几乎可以肯定应该有一种方法可以使用 Windows API 获取选定的文本,我知道使用 EM_GETSELTEXT、WM_GETTEXT、EM_GETSEL 可能有用,但它们在 IE 或任何其他浏览器中不起作用,这是我的问题。 ...

【问题讨论】:

  • 我只是好奇,但你为什么要这样做?
  • 您好 Zee99,只是建议您使用您在对我的回答的评论中发布的信息更新您的问题和标签。谢谢。

标签: c# html cross-browser screen-scraping text-extraction


【解决方案1】:

这是一个相当高的要求。我认为您可能只有很小的机会通过 IE 实现这一目标,您可以将与“外部”浏览器中加载的页面相同的页面加载到 WebBrowser 控件中,并获取选定的文本。据我所知,并根据长期寻求做这种事情的人的建议,没有一种 Firefox 的自动化模型可以让 C# 代码访问而无需付出巨大的努力和风险。

您对页面有任何控制权吗?您可能会考虑注入 jQuery 之类的东西来使用 Ajax 调用发布选择,并设置一个服务器来监听该调用。

【讨论】:

  • ProfK,WatiN CTP 可以让您以编程方式访问 Firefox 浏览器中呈现的网页。
【解决方案2】:

我建议您考虑使用WatiN API 来测试网页是否存在特定字符串。 WatiN 目前支持 IE 6、7 和 8,并且存在一个 CTP version 用于测试 Firefox 2.x 和 3.x。这个article 描述了如何使用WatiN 在网页中搜索一段文本,并且在WatiN 站点上有描述how to call WatiN from your application 的文档。

您的代码的初始起点是:

using System;
using WatiN.Core;

public static class WatiNExample
{

    public static bool CheckUrlForText(string p_sUrl, string p_sText)
    {
        // Open a new Internet Explorer window and
        // go to the google website.
        IE ie = new IE(p_sUrl);

        try    
        {
            return ie.Text.Contains(p_sText));
        }
        finally
        {
            ie.Close();
        }
    }
}

【讨论】:

  • 感谢MagicAndi 但这个想法不是在IE 中搜索文本,而是在IE 中“捕获所选文本”。顺便说一下,不仅是 IE,还有任何具有焦点的 Windows 应用程序。
【解决方案3】:

VB 脚本是实现这一点的一种方法,但仅限于 IE 中,并且只能在剪贴板中复制(所有网页)。然后,您可以粘贴它并在您喜欢的任何应用程序中操作由此检索到的字符串。

Option Explicit <br>
Dim objShell <br>
Set objShell=CreateObject("WScript.Shell") <br>
objShell.Run "iexplore.exe http://www.google.com" ' or whatever page you need to copy from <br>
WScript.Sleep 7000 ' just to wait IE to load the page <br>
objShell.SendKeys "^a" ' selects all <br>
objShell.SendKeys "^c" ' copy into clipboard <br>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多