C#打开IE9窗口并附加

时间:2014-02-06 11:59:59

标签: c# internet-explorer com

我有一个使用预安装的IE插件提供安全通信的网站。我无权访问此插件代码,因此如果我想从此服务器解析页面,我必须使用IE进行操作。否则会显示错误消息。

我想创建一个C#程序,它将打开这个网站并获取它的正文。 我试过用IE打开IE InternetExplorer ie = new InternetExplorer(); 不幸的是,这个页面导致没有加载插件或者没有对应该进行重定向的javascript做出反应。

我正在尝试使用http://www.codeproject.com/script/Articles/ViewDownloads.aspx?aid=9683中提供的解决方案。但是有一个问题 - 在创建进程后我无法附加到IE。

          ShellWindows m_IEFoundBrowsers = new ShellWindowsClass();
          foreach(InternetExplorer Browser in m_IEFoundBrowsers) {
              if(Browser.HWND == (int)m_Proc.MainWindowHandle) {
                  _IE = Browser;
                  break;
              }
          }

此代码导致InvalidCastException。当我看一下Process树时​​,我意识到我的应用程序启动了控制台,启动了IE - 据我所知,这就是问题所在。请帮助我附加到新打开的IE窗口...我已经尝试让运行浏览器的进程的父进程,但它失败了......

1 个答案:

答案 0 :(得分:0)

通过查找哪个browser.Document是HTMLDocument以及指定的LocationName或LocationURL来找到浏览器。通过将浏览器强制转换为InternetExplorer,将该浏览器实例附加到InternetExplorer对象。此代码适用于我的系统上的IE 11,并允许与该IE浏览器实例进行交互。

InternetExplorer ie = null
// Launch IE program

// Get all browser objects
ShellWindows allBrowsers = new ShellWindows();
if (allBrowsers.Count == 0)
    throw new Exception("Cannot find IE");

// Attach to IE program process
foreach (InternetExplorer browser in allBrowsers)
{
    if (browser.Document is HTMLDocument && browser.LocationName == "My Test Web Site")
    {
        Console.WriteLine("Found IE browser '" + browser.LocationName + "'");
        ie = (InternetExplorer)browser;
    }
}

if (ie == null)
     throw new Exception("Failed to attach to IE");