2010-06-17 10 views
1

J'ai une page Web chargée dans un objet WebBrowser. Ce que je veux faire, c'est accéder aux éléments de cette page pour entrer des données. Par exemple, entrez le nom d'utilisateur et le mot de passe et soumettez le formulaire.Puis-je définir des valeurs pour les entrées à l'intérieur de mon contrôle WebBrowser?

Comment est-ce possible? Des idées?

Puis-je utiliser HTMLAgilityPack pour accéder aux éléments et définir leurs valeurs?

+0

Si la forme soumet via GET alors il est juste une question de construire l'URL avec? Name = blabla & password = paramètres blabla, puis tirer l'url. –

+0

Oui John je l'ai fait en effet. Pas grand chose, j'ai trouvé la méthode que j'ai utilisée pour les bots précédents. N'a pas codé en C# depuis près d'un an. –

+0

Sergio Tapia, non ce sont des demandes POST. –

Répondre

0

Il existe de nombreuses solutions. Deux que j'ai utilisé moi-même sont:

WaitN - http://watin.sourceforge.net/ WebAii - apparemment acheté par Telerik? Il y avait une version gratuite, pas sûr s'il y en a plus - http://www.artoftest.com/index.html

Ensuite, il suffit d'utiliser l'automatisation contre le contrôle WebBrowser. Un cadre d'automatisation le rend beaucoup plus simple.

+0

Je me souviens vaguement de WaitiN. Je suis sûr que c'est ce que j'ai utilisé l'année dernière lors de la création d'un bot Web. Je vérifierai. Merci d'avoir rafraîchi ma mémoire. –

+0

Oui, il semble être disponible sur SourceForge. Quand je viens de chercher sur mon ordinateur, j'ai trouvé le fichier .dll. Pas été sur ce PC pendant un moment. Merci encore Paul. –

2

Découvrez cet exemple de la documentation: http://msdn.microsoft.com/en-us/library/system.windows.forms.htmldocument.aspx

Grâce au contrôle du navigateur Web, il y a une propriété de document de type HtmlDocument, ce qui vous donne une certaine capacité d'influer sur la page. Personnellement, je ne sais pas si elle peut faire tout ce que vous voulez, mais ce serait un bon point de départ.

HTH.

0

J'utilise une combinaison de HtmlAgilityPack et Fiddler pour surveiller le trafic. Avec fiddler, vous pouvez voir le message envoyé au serveur et le répliquer. Ensuite, vous pouvez capturer les données de cookie pour enregistrer la session de connexion. De là, c'est normal de naviguer autour du site.

Si vous utilisez un identifiant pour obtenir les données, il peut y avoir un cookie. Si c'est le cas, vous devez le définir dans cookieContainer. C'est un exemple de fonction que j'utilise pour publier des données dans une URL.

private string PostWebRequestContent(Uri uri, string postData) 
    { 
     CookieContainer cookies = LoggedInCookie(); 
     foreach (Cookie c in cookies.GetCookies(uri)) 
     { 
      int i = 0; 
     } 

     HttpWebRequest req = GetWebRequest(uri); 
     req.CookieContainer = cookies; 


     req.Accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-ms-application, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, application/vnd.xfdl; version=7.5.0.51, application/x-shockwave-flash, */*"; 


     req.Method = "POST"; 
     req.Headers.Add("Accept-Language: en-us"); 
     //req.Headers.Add("Accept-Encoding: gzip,deflate"); 
     //req.Headers.Add("Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"); 
     req.KeepAlive = true; 
     req.ContentType = "application/x-www-form-urlencoded"; 

     StreamWriter requestWriter = new StreamWriter(req.GetRequestStream()); 
     requestWriter.Write(postData); 
     requestWriter.Close(); 


     string sid = ""; 

     try 
     { 
      using (HttpWebResponse res = (HttpWebResponse)req.GetResponse()) 
      { 
       using (StreamReader sr = new StreamReader(res.GetResponseStream())) 
       { 
        sid = sr.ReadToEnd().Trim(); 
       } 
      } 
     } 
     catch (WebException e) 
     { 
      Console.WriteLine(e.Message); 
     } 

     return sid; 
    } 

fonction de session Cookie

private CookieContainer GetSessionCookie(Uri uri) 
    { 
     HttpWebRequest req = GetWebRequest(uri); 

     CookieContainer cookies = new CookieContainer(); 
     req.CookieContainer = cookies; 

     req.GetResponse().Close(); 

     return cookies; 
    }