none
Problème Contrôle d'internet Explorer RRS feed

  • Question

  • Bonjour a tous,

    J'aimerais bien remplir un formulaire sur une page internet explorer et pas avec un webbrowser !

    Je suis sous vb 2010

    J'ai essayé plusieurs méthode (Voici une qui fonctionne presque :D) :

    Public Class Form1
    
    
        Private Property ie As Object
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
    
            ie = CreateObject("internetexplorer.application")
    
            ie.visible = True
            ie.navigate("http://mapage/")
    
            Do While ie.readyState
                If ie.ReadyState = 4 Then
                    ie.DOCUMENT.all("username").Value = "Mon Nom"
                    ie.DOCUMENT.all("password").Value = "Mon Mot De Passe"
                    ie.DOCUMENT.all("submit").Click()
    
                End If
            Loop
    
        End Sub
    
    End Class
    

    Les champs username et password sont bien remplis, mais le click ne se fait pas :(

    Vous avez une idée du problème ?

     

    Merci beaucoup

     

    Maxigolo

    dimanche 11 septembre 2011 14:59

Réponses

  • Bonjour Maxigolo,

    Pour soumettre le formulaire, utilisez la méthode submit(), remplacez :

    ie.DOCUMENT.all("submit").Click()

    par :

    ie.DOCUMENT.Forms(1).submit()
    


    Attention à trouver le bon index (ou nom) du formulaire, ici il s'agit du deuxième de la page.

    Bonne soirée.


    N'hésitez pas à poser des questions si un problème subsiste ou quelque chose n'est pas clair. Dans l'autre cas, veuillez indiquer que le problème est résolu. Cordialement - Best Regards. Contact

    dimanche 11 septembre 2011 15:47
  • Bonjour,

    Merci pour vos réponse

    Je pense avoir trouvé le problème

     

    Do While ie.readyState
                If ie.ReadyState = 4 Then
                    ie.DOCUMENT.all("username").Value = "Mon Nom"
                    ie.DOCUMENT.all("password").Value = "Mon Mot De Passe"
                    ie.DOCUMENT.all("submit").Click()
    
                End If
            Loop

     

     

    Il clic sur le submit en boucle et la page et se bloque, j'ai testé avec un timer et le formulaire est bien envoyé !

    Vous m'avez proposez de me connecter avec un webclient ou un httpWebRequest vous pouvez m'éclairer sur le sujet ? j'ai fait quelques recherche, mais sans trop de résultat. (mise a par téléchargement de page web)

     



     




    • Modifié Maxigolo vendredi 16 septembre 2011 05:13
    • Marqué comme réponse TroxsaEditor lundi 19 septembre 2011 11:14
    vendredi 16 septembre 2011 04:32

Toutes les réponses

  • Bonjour Maxigolo,

    Pour soumettre le formulaire, utilisez la méthode submit(), remplacez :

    ie.DOCUMENT.all("submit").Click()

    par :

    ie.DOCUMENT.Forms(1).submit()
    


    Attention à trouver le bon index (ou nom) du formulaire, ici il s'agit du deuxième de la page.

    Bonne soirée.


    N'hésitez pas à poser des questions si un problème subsiste ou quelque chose n'est pas clair. Dans l'autre cas, veuillez indiquer que le problème est résolu. Cordialement - Best Regards. Contact

    dimanche 11 septembre 2011 15:47
  • Merci de votre réponse, mais j'ai des retour d'erreurs après le test de l'application.

    Voici mon formulaire (html) :

     

    <form id="fm1"  action="/mapage/" method="post">
    			    
    <input id="username" name="username" class="required" tabindex="1" accesskey="i" type="text" value="" size="25" autocomplete="false"/>
    						
    <input id="password" name="password" class="required" tabindex="2" accesskey="m" type="password" value="" size="25" autocomplete="off"/>
                        
    <input class="btn-submit" name="submit" accesskey="l" value="SE CONNECTER" tabindex="4" type="submit" />
                   
    </form>
    

    J'ai utilisé:

     

    ie.DOCUMENT.Forms("submit").submit()

    ie.DOCUMENT.Forms("fm1").submit()

    Merci bueacoup


    • Modifié Maxigolo dimanche 11 septembre 2011 16:26
    dimanche 11 septembre 2011 16:15
  • Bonjour,

    Quelles "retour d'erreurs" obtenez vous ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    dimanche 11 septembre 2011 16:29
    Modérateur
  • Quelle est l'erreur qui survient ?

    Avez vous essayé :

    ie.Document.Forms(0).submit() ?

    N'hésitez pas à poser des questions si un problème subsiste ou quelque chose n'est pas clair. Dans l'autre cas, veuillez indiquer que le problème est résolu. Cordialement - Best Regards. Contact
    dimanche 11 septembre 2011 16:34
  • Pour

    ie.DOCUMENT.Forms("submit").submit()

    Variable objet ou variable d'un bloc With non définie.

     

    Et

    ie.DOCUMENT.Forms("fm1").submit()

    Exception de HRESULT : 0x80020101

     

    Et quand j'utilise le .click() aucune erreur n'ai trouvé, mais ne marche pas

    Merci beaucoup

     

    EDIT: Je suis désoler je n'est pas vu votre réponse

    pour ie.Document.Forms(0).submit() :

    J'ai l'erreur

    Exception de HRESULT : 0x80020101

     

     


    • Modifié Maxigolo dimanche 11 septembre 2011 16:42
    dimanche 11 septembre 2011 16:37
  • Bonjour,

    Essayez :

    ie.Document.GetElementById("submit").InvokeMember("click")
    

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    dimanche 11 septembre 2011 16:53
    Modérateur
  • J'obtien également une erreur :

    Le membre public 'InvokeMember' du type 'DBNull' est introuvable.

     

    dimanche 11 septembre 2011 16:59
  • Bonjour,

    Est-ce un message du compilateur ? Pouvez-vous nous montrer le code VB .NET complet où vous souhaitez appeler le bouton.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    dimanche 11 septembre 2011 17:01
    Modérateur
  • Le code complet est sur mon premier message il sagit juste d'une page avec un bouton

    dimanche 11 septembre 2011 17:17
  • Bonjour,

    Je n'avez pas fait attention que vous utilisez le contrôle ActiveX Internet Explorer

    Pourquoi n'utiliseriez vous pas le contrôle WebBrowser ?

    Dim ie As WebBrowser
    ie = new WebBrowser()
    ie.NavigateTo("...")
    

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    dimanche 11 septembre 2011 18:53
    Modérateur
  • Bonjour,

    Le problème est peut-être que "submit" n'est PAS le id du bouton (vérifier que le GetElementById retourne bien qq chose). Si vous avez le contrôle sur le code HTML, ajouter l'id manquant.

    Ou encore en utilisant WebClient ou httpWebRequest pour envoyer directement des requêtes HTTP au serveur sans passer par un navigateur.

    Comme souvent avoir une idée plus générale de ce que vous essayez de faire pourrait aider. Ce site web ne dispose pas d'une API sous forme de service web ? Si il est sous votre contrôle, il serait peut-être préférable d'exposer les fonctionnalités que vous voulez sous forme de services web.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    lundi 12 septembre 2011 08:06
    Modérateur
  • Bonjour, Maxigolo,

    Est-ce que vous avez pu avancer en utilisant les informations fournies par Gilles, Patrice et Michel ? Merci de tenir la communauté informée sur la suite de vos démarches.

     

    Cordialement,

    Cipri


    Suivez MSDN sur Twitter   Suivez MSDN sur Facebook


    Ciprian DUDUIALA, MSFT  
    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

    mercredi 14 septembre 2011 06:08
  • Bonjour,

    J'ai essayé et le code pour moi fonctionne, je n'ai pas les erreurs
    Par contre pour vous aidez récupérer les bonnes propriétés de l'objet je vous conseil d'ajouté (voir ci dessous)

    Dim doc As HtmlDocument = ie.Document 
    Cela sera plus facile pour vous :)

     


    Cordialement,
    Xavier TALOUR
    Alias Troxsa SendMail
    Voir le profil de Xavier TALOUR sur LinkedIn
    mercredi 14 septembre 2011 09:43
    Auteur de réponse
  • Bonjour,

    Merci pour vos réponse

    Je pense avoir trouvé le problème

     

    Do While ie.readyState
                If ie.ReadyState = 4 Then
                    ie.DOCUMENT.all("username").Value = "Mon Nom"
                    ie.DOCUMENT.all("password").Value = "Mon Mot De Passe"
                    ie.DOCUMENT.all("submit").Click()
    
                End If
            Loop

     

     

    Il clic sur le submit en boucle et la page et se bloque, j'ai testé avec un timer et le formulaire est bien envoyé !

    Vous m'avez proposez de me connecter avec un webclient ou un httpWebRequest vous pouvez m'éclairer sur le sujet ? j'ai fait quelques recherche, mais sans trop de résultat. (mise a par téléchargement de page web)

     



     




    • Modifié Maxigolo vendredi 16 septembre 2011 05:13
    • Marqué comme réponse TroxsaEditor lundi 19 septembre 2011 11:14
    vendredi 16 septembre 2011 04:32
  • Merci de votre réponse.

    J'ai un petit problème j'ai essayé les requête et j'arrive bien a me connecter a un site mais pas sur un autre !

    pour cette requête pas de problème :

    auth_key=880ea6a14ea49e853634fbdc5015a024&referer=http%3A%2F%2Fmillenium-servers.com%2FForumMillenium2%2Findex.php%3F&ips_username=" & username & "&ips_password=" & password & "&rememberMe=1

    car il y a juste un username et un password.

    Grâce a ce code :

     

     

     Dim postData As String = "auth_key=880ea6a14ea49e853634fbdc5015a024&referer=http%3A%2F%2Fmillenium-servers.com%2FForumMillenium2%2Findex.php%3F&ips_username=" & username & "&ips_password=" & password & "&rememberMe=1"
            Dim tempCookies As New CookieContainer
            Dim encoding As New UTF8Encoding
            Dim byteData As Byte() = encoding.GetBytes(postData)
    
            Dim postReq As HttpWebRequest = DirectCast(WebRequest.Create("http://millenium-servers.com/ForumMillenium2/index.php?app=core&module=global&section=login&do=process"), HttpWebRequest)
            postReq.Method = "POST"
            postReq.KeepAlive = True
            postReq.CookieContainer = tempCookies
            postReq.ContentType = "application/x-www-form-urlencoded"
            postReq.Referer = "http://millenium-servers.com/ForumMillenium2/index.php?app=core&module=global&section=login&do=process"
            postReq.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.3) Gecko/20100401 Firefox/4.0 (.NET CLR 3.5.30729)"
            postReq.ContentLength = byteData.Length
    
            Dim postreqstream As Stream = postReq.GetRequestStream()
            postreqstream.Write(byteData, 0, byteData.Length)
            postreqstream.Close()
            Dim postresponse As HttpWebResponse
    
            postresponse = DirectCast(postReq.GetResponse(), HttpWebResponse)
            tempCookies.Add(postresponse.Cookies)
            logincookie = tempCookies
            Dim postreqreader As New StreamReader(postresponse.GetResponseStream())
    
            Dim thepage As String = postreqreader.ReadToEnd
    
    
            My.Computer.Clipboard.SetText(thepage)
    
    
            If thepage.IndexOf("Déconnexion") > 0 Then
                Console.WriteLine(intro & "Vous êtes maintenant connecté")
                Console.ReadLine()
            Else
                Console.WriteLine(intro & "Nom d'utilisateur ou mot de passe incorrect.")
                Console.ReadLine()
    
            End If
    

     

     

    J'ai voulu tester un autre site ou je possède un compte

     

    Et la requête est :

    username=" & username & "&password=" & password & "&lt=" & resultat & "&_eventId=submit&submit=LOGIN

    resultat est une sorte de clé pour pouvoir se connecter au site donc il faudrait :

     

    - Ouvrir pour récuperer le resultat (la genre de clé) elle se trouve dans le code source de la page et elle change tout le temps !

    - Et envoyer la requête avec le username le password et la clé pour validé la connexion

     

    je récupère la clé grâce a cette méthode :

           Dim postReq As HttpWebRequest = HttpWebRequest.Create("https://cas.scolastance.com/cas-alsace/login?service=http://lpotheodoredeck.entea.scolastance.com/scop/Modules/Accueil/Accueil.aspx")
            webResponse = postReq.GetResponse()
    
            Using stream As StreamReader = New StreamReader(WebResponse.GetResponseStream())
                Dim pageHtml As String
    
                pageHtml = stream.ReadToEnd()
    
                Dim x As Integer
    
                x = InStr(1, pageHtml, "_c") + 1
    
                find = InStr(x, pageHtml, "_c")
    
                resultat = Mid(pageHtml, find, 76)
    
                Console.WriteLine(resultat)
    
            End Using

     

    Vous pouvez m'aider ?


    • Modifié Maxigolo samedi 17 septembre 2011 10:38
    samedi 17 septembre 2011 10:35
  • Bonjour,

    Afin de dissocier les réponses au problèmes que vous rencontrez, il serait préférable de faire un nouveau message avec votre nouveau problème.

     

    A bientôt

     


    Cordialement,
    Xavier TALOUR
    Alias Troxsa SendMail
    Voir le profil de Xavier TALOUR sur LinkedIn
    lundi 19 septembre 2011 11:23
    Auteur de réponse