以编程方式在浏览器中获取所选文本

时间:2010-01-04 15:03:05

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

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

你知道我应该用什么代码来实现这个目标吗?

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

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

3 个答案:

答案 0 :(得分:1)

这是一个相当高的命令。我认为你可能只有很少的机会通过IE实现这一点,你可以将“外部”浏览器中加载的页面加载到WebBrowser控件中,并获取所选文本。据我所知,以及长期以来一直寻求做类似事情的人的建议,没有适用于C#代码的Firefox自动化模型,而且没有庞大的工作量和风险。

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

答案 1 :(得分:1)

我建议您考虑使用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();
        }
    }
}

答案 2 :(得分:0)

VB Script是一种实现这一目标的方法,但仅限于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>