Internet explorer Internet Explorer自动化:如何抑制打开/保存对话框?

Internet explorer Internet Explorer自动化:如何抑制打开/保存对话框?,internet-explorer,automation,mshtml,Internet Explorer,Automation,Mshtml,当通过MSHTML控制IE实例时,如何抑制非HTML内容的打开/保存对话框? 我需要从另一个系统获取数据并将其导入我们的系统。由于预算限制,一段时间内无法在另一端进行开发(例如WS),因此我现在唯一的选择是进行web抓取 远程站点是基于ASP.NET的,因此简单的HTML请求无法工作——JS太多 我编写了一个简单的C#应用程序,它使用MSHTML和SHDocView来控制IE实例。到目前为止还不错:我可以执行登录、导航到所需页面、填充所需字段并提交 然后我面临两个问题: 首先,报告将在另一个窗口

当通过MSHTML控制IE实例时,如何抑制非HTML内容的打开/保存对话框?

我需要从另一个系统获取数据并将其导入我们的系统。由于预算限制,一段时间内无法在另一端进行开发(例如WS),因此我现在唯一的选择是进行web抓取

远程站点是基于ASP.NET的,因此简单的HTML请求无法工作——JS太多

我编写了一个简单的C#应用程序,它使用MSHTML和SHDocView来控制IE实例。到目前为止还不错:我可以执行登录、导航到所需页面、填充所需字段并提交

然后我面临两个问题:

首先,报告将在另一个窗口中打开。我想我也可以通过列举系统中的IE窗口来连接到该窗口

第二,更麻烦的是,报告本身是CSV文件,并触发打开/保存对话框。我想避免它,让IE将文件保存到给定的位置,或者我也可以通过编程方式单击对话框按钮(如何?)

事实上,我完全不是Windows(unix/J2EE)的人,希望有更好的知识的人能给我一个如何完成这些任务的提示

谢谢

更新

我在MSDN上找到了一个很有前途的文档:

控制下载的内容类型以及WebBrowser控件在下载内容后对其执行的操作。例如,当用户单击链接时,可以阻止播放视频、运行脚本或打开新窗口,或者阻止下载或执行Microsoft ActiveX控件

慢慢地读

更新2:让它工作起来,有点…

最后,我成功了,但方式很糟糕。本质上,我在“导航前”注册了一个处理程序,然后,在该处理程序中,如果URL与我的目标文件匹配,我将取消导航,但记住URL,并使用WebClient类直接访问和下载该临时URL

我无法在这里复制整个代码,它包含大量垃圾,但以下是关键部分:

安装处理程序:

_IE2.FileDownload += new DWebBrowserEvents2_FileDownloadEventHandler(IE2_FileDownload);
_IE.BeforeNavigate2 += new DWebBrowserEvents2_BeforeNavigate2EventHandler(IE_OnBeforeNavigate2);
正在录制URL,然后取消下载(从而阻止出现保存对话框):

在调用代码中,使用找到的URL直接下载:

        ...
        driver.ClickButton(".*_btnRunReport");
        driver.WaitForComplete();

        Thread.Sleep(10000);

        WebClient Client = new WebClient();
        Client.DownloadFile(driver.downloadUrl, "C:\\affinity.dump");
(驱动程序是IE实例上的简单包装器=\u IE)


希望这对某人有所帮助。

最简单的方法是在下载系统上调整CSV文件的MIME类型。由于与.CSV文件关联的操作,IE正在尝试下载该文件


我想您可以在Windows资源管理器中通过转到“工具”“文件夹”“选项”“文件类型”来更改此设置。如果将CSV文件与Internet Explorer关联,则CSV文件将在IE中打开。此时,您应该能够使用IE自动化将当前打开的文档保存到文件中。

您无法完全控制浏览器的行为,因为最终用户可以将其浏览器设置为始终打开具有特定内容类型的文件。

我无法以任何方式修改远程系统。我是否可以在整个过程中以编程方式更改IE首选项(即不影响用户设置)?您不必修改远程系统,您需要在执行刮片的系统上更改MIME类型settnigs。对不起,误读了您的第一条语句。不过,我如何从我的应用程序中更改IE的设置?我不想永久更改它们,因为用户(BA)下载了很多报告,其中一些是CSV格式的。
        ...
        driver.ClickButton(".*_btnRunReport");
        driver.WaitForComplete();

        Thread.Sleep(10000);

        WebClient Client = new WebClient();
        Client.DownloadFile(driver.downloadUrl, "C:\\affinity.dump");