2012-07-03 2 views
0

Je veux être capable de lancer plusieurs fenêtres de navigateur et d'obtenir le code HTML d'eux et d'interagir avec eux comme je le peux avec le contrôle du navigateur web .net. Le problème est que le contrôle du navigateur Web C# nécessite un thread STA, ce qui rend mon programme plus lent et sujet aux erreurs. Est-ce que c'est un moyen que je peux parler au vrai navigateur IE ou même Chrome, Firefox etc et faire cela? Je sais qu'il y a des solutions tierces payantes et d'autres choses, mais je me demandais si quelqu'un connaissait des bibliothèques gratuites qui sont fiables et fonctionnelles. Je ne peux pas utiliser HttpWebRequest pour ce que je fais, donc ne le suggérez pas s'il vous plaît.Contrôle d'un navigateur Web sans contrôle C# webbrowser

Je serai en cours d'exécution sur Windows et en utilisant C#.

+1

WebKit.NEt est un bon point de départ. –

Répondre

1

Awesomeium est un navigateur basé sur Webkit/Chromium (Chrome) auquel vous pouvez parler via un wrapper .NET, un peu comme le contrôle WebBrowser. Je ne suis pas sûr sur l'exigence de filetage STA cependant. Comme pour STA Threading rendant votre application "plus lente et sujette aux erreurs" - Cela semble étrange, peut-être que vous devriez enquêter pour résoudre ce problème.

+0

Je vais essayer – kyleb

+0

Comment puis-je remplir les champs de formulaire et cliquer sur un bouton de soumission avec ce contrôle? Avec .net navigateur IE je peux dire element.SetAttribute() et element.InvokeMember ('clic'). Quel est l'équivalent de cela dans ce sdk? – kyleb

+0

Je ne l'ai jamais essayé moi-même, mais selon la documentation, vous pouvez exécuter arbitrairement [Javascript] (http://awesomium.com/docs/1_6_4/sharp_api/html/0cb62099-bd17-342a-d988-be8302d611c2.htm) méthodes, cela vous permettrait d'interagir avec la page. Vous pouvez également définir des rappels à partir de Javascript pour permettre à JS de vous informer de manière asynchrone. Je ne suis pas sûr à 100% que vous puissiez directement accéder au DOM en C#, vous devrez peut-être le faire dans JS. –

1

Pour IE (uniquement). Gratuit: Microsoft Internet Controls

using SHDocVw; 

Bibliothèque d'objets Microsoft HTML

using mshtml; 

Avec ces derniers vous pouvez faire des choses comme

foreach (InternetExplorer brIns in _allWindows) 
      { 
       var htmlDoc = brIns.Document as HTMLDocument; 
       if (htmlDoc != null && htmlDoc.all.item(elementName) != null) 
       { 
        var elem = htmlDoc.all.item(elementName) as HTMLInputElement; 
        if (elem != null && attributeName == null) 
        { 
         _ieCurrentDoc = htmlDoc; 
         _currentHtml = htmlDoc.documentElement.outerHTML; 
         return true; 
        } 
        if (elem != null && elem.getAttribute(attributeName) != null) 
        { 
         _ieCurrentDoc = htmlDoc; 
         _currentHtml = htmlDoc.documentElement.outerHTML; 
         return true; 
        } 

       } 
      } 
+0

Ceci utilise le même ActiveX en dessous et nécessite STA semble-t-il. – kyleb

2

Je l'ai utilisé WebKit.NET. C'est gratuit et fonctionne très bien (supporte flash, css, rend correctement, a un moteur javascript). Il peut être ou ne pas être étendu pour ce que vous faites.

http://webkitdotnet.sourceforge.net/

Il y a beaucoup de guides, et la démo a un système d'onglets en fonctionnalités.

EDIT: Je couchait avec elle, et ont introduit une version améliorée de la démo

enter image description here

Questions connexes