刮擦IE窗口

时间:2012-08-04 10:58:13

标签: c# .net interface screen-scraping web-scraping

我正在开发与两个系统接口以加载/存储数据的系统。

  1. 一个古老的终端程序,它使用第三方DLL来桥接.NET和它 系统,发送击键并接收它们。这部分不是 技术问题很明显。

  2. 一个128位的SSL网络应用程序,从网站上自己的窗口启动。它不是在任何类型的Java讨厌内容中运行,只是HTML和一点点JavaScript。

    我想以某种方式抓取此窗口的内容,以便我可以访问其中的可用文档。至少,这将等待用户导航到正确的页面,然后单击我编写的应用程序中的按钮,然后查找正确的窗口,解析当前页面的源并下载文件

    在理想的世界中,它从一开始就是自动化的,只需要从我的应用程序中的用户单击一下即可导航到正确的页面,登录并下载文档。

  3. #2是否可以在任何程度上使用免费组件的商业广告。

2 个答案:

答案 0 :(得分:1)

如果您不针对特定浏览器供应商(如FF或Chrome等),您想要的内容很难实现,甚至更多。

建议:

1)使用System.Net.WebClient直接从网络服务器下载源代码。

2)如果您需要某些自动化代码无法(或您不想)模拟的用户交互,您可以使用 webkitdotnet 等项目,然后您可以创建一个其中有浏览器的WinForm应用程序。您将拥有该浏览器内容的完全访问权限。

Webkitdotnet项目页面:http://sourceforge.net/projects/webkitdotnet/

答案 1 :(得分:0)

如果使用浏览器Internet Explorer(我正在阅读问题标题),只需引用此Microsoft Internet Controls COM库:

Microsoft Internet Controls

然后我像这样进行抓取:

var internetExplorerShells = new SHDocVw.ShellWindows();

string html = null;
foreach (SHDocVw.InternetExplorer ie in internetExplorerShells)
{
    if (ie.Document != null)
    {
        var url = ie.LocationURL;

        // If the Internet Explorer Address contains _configuration.ScrapingUrl
        if (CultureInfo.InvariantCulture.CompareInfo.IndexOf(
            url,
            _configuration.ScrapingUrl,
            CompareOptions.IgnoreCase) >= 0)
        {
            html = ie.Document.Body.OuterHtml;
            if (html != null)
                break;
        }
    }
}

然后只需通过NuGet安装HTMLAgilityPack并开始抓取html:

var htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml(html);