Internet Explorer Automatisation: comment faire pour supprimer de dialogue Ouvrir et Enregistrer?

Lors du contrôle d'IE exemple par le biais de MSHTML, comment faire pour supprimer des dialogues Ouvrir/Enregistrer pour les non-contenu HTML?

J'ai besoin d'obtenir des données à partir d'un autre système et de l'importer dans notre. En raison des contraintes budgétaires, ni de développement (par exemple, WS) peut être fait sur l'autre côté pour un certain temps, donc ma seule option pour le moment est de faire du web la mise au rebut.

Le site distant est ASP.NET-base, donc du simple HTML demandes ne fonctionne pas -- trop de JS.

J'ai écrit une simple application en C# qui utilise MSHTML et SHDocView pour la commande d'un IE instance. So far So good: je peux effectuer la connexion, accédez à la page désirée, remplir les champs requis et ne soumettre.

Puis-je faire face à quelques problèmes:

Première est que le rapport est en cours d'ouverture dans une autre fenêtre. Je pense que je peut joindre à cette fenêtre par l'énumération des fenêtres IE dans le système.

Deuxième, plus pénible, c'est que le rapport lui-même est fichier CSV, et les déclencheurs de dialogue Ouvrir et Enregistrer. Je voudrais l'éviter et de faire IE sauvegarder le fichier dans l'emplacement donné OU je suis très bien avec par programmation en cliquant sur les boutons des dialogues trop (comment?)

Je suis en fait totalement non-Windows guy (unix/J2EE), et j'espère que quelqu'un avec une meilleure connaissance pourrait me donner une astuce comment effectuer ces tâches.

Merci!

Mise à JOUR

J'ai trouvé le fameux document sur MSDN: http://msdn.microsoft.com/en-ca/library/aa770041.aspx

Contrôler les types de contenu qui est téléchargé et que le Contrôle WebBrowser fait avec eux une fois qu'ils sont téléchargés. Par exemple, vous pouvez empêcher vidéos de jouer, script de s'exécuter, ou de nouvelles fenêtres de s'ouvrir lorsque les utilisateurs cliquent sur des liens, ou de prévenir des contrôles Microsoft ActiveX du téléchargement ou de l'exécution.

Lentement de la lecture à travers...

MISE À JOUR 2: IL EST TRAVAIL, UNE SORTE DE...

Enfin j'ai fait le travail, mais dans une horrible façon. Essentiellement, j'ai enregistrer un gestionnaire "avant de naviguer", ensuite, dans le gestionnaire, si l'URL correspondant à mon fichier cible, je annuler la navigation, mais n'oubliez pas l'URL, et utiliser la classe WebClient pour accéder et de télécharger que temporelle URL directement.

Je ne peux pas copier tout le code ici, il contient beaucoup de déchets, mais ici sont les pièces essentielles:

L'installation de gestionnaire:

_IE2.FileDownload += new DWebBrowserEvents2_FileDownloadEventHandler(IE2_FileDownload);
_IE.BeforeNavigate2 += new DWebBrowserEvents2_BeforeNavigate2EventHandler(IE_OnBeforeNavigate2);

L'enregistrement de l'URL, puis l'annulation de télécharger (et donc de prévenir la boîte de dialogue d'enregistrement s'affiche):

public string downloadUrl;

void IE_OnBeforeNavigate2(Object ob1, ref Object URL, ref Object Flags, ref Object Name, ref Object da, ref Object Head, ref bool Cancel)
{
    Console.WriteLine("Before Navigate2 "+URL);

    if (URL.ToString().EndsWith(".csv"))
    {
        Console.WriteLine("CSV file");
        downloadUrl = URL.ToString();
    }

    Cancel = false;
}

void IE2_FileDownload(bool activeDocument, ref bool cancel)
{
    Console.WriteLine("FileDownload, downloading "+downloadUrl+" instead");
    cancel = true;
}

    void IE_OnNewWindow2(ref Object o, ref bool cancel)
    {
        Console.WriteLine("OnNewWindow2");

        _IE2 = new SHDocVw.InternetExplorer();
        _IE2.BeforeNavigate2 += new DWebBrowserEvents2_BeforeNavigate2EventHandler(IE_OnBeforeNavigate2);
        _IE2.Visible = true;
        o = _IE2;

        _IE2.FileDownload += new DWebBrowserEvents2_FileDownloadEventHandler(IE2_FileDownload);

        _IE2.Silent = true;

        cancel = false;
        return;
    }

Et dans le code appelant à l'aide de la trouvé l'URL de téléchargement direct:

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

        Thread.Sleep(10000);

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

(pilote est un simple wrapper sur IE instance = _IE)

Espère que ça aide quelqu'un.

OriginalL'auteur Vladimir Dyuzhev | 2009-03-18