IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

WebBrowser et autres solutions


Sujet :

VB.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 71
    Points : 54
    Points
    54
    Par défaut WebBrowser et autres solutions
    Bonjour à vous et merci de vos contributions,

    J'accéde à un site web dont la page d'accueil intégre une fonction recherche.
    J'interagis avec cette page en donnant:
    le nom du champs : "pattern" contenant le code à rechercher: FR0000050809
    la fonction à éxecuter pour lancer la recherche: "$$event_minisearch"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    ' creation du controle, mise en place du hanndler pour détecter la fin de reception d'une page
    	page_info = New System.Windows.Forms.WebBrowser
            AddHandler page_info.DocumentCompleted, New WebBrowserDocumentCompletedEventHandler(AddressOf page_recue)
     
     
    ' pour ce site définir l'url, le champs contenet la donnée à rechercher, le nom de l'évènement à activer
            page_info.Navigate("https://www.mon_serveur.fr/")
            champs_recherche = "pattern"
            evenement_execute = "$$event_minisearch"
     
     
    ' placer la demande page pour ce site, attendre la fin de la réception
            page_info_completed = False
            nb_tentatives = 0
            Navigation()
     
    ' si le handler a détecté la fin de réception de la page, page_info_completed = True
            While page_info_completed = False And nb_tentatives < nb_time_slice_for_web_request
                nb_tentatives = nb_tentatives + 1
                System.Threading.Thread.Sleep(time_slice_for_web_request)
                Application.DoEvents()
            End While
     
     
    ' sortie en échec, message d'erreur, abandon de le recherche
            If nb_tentatives = nb_time_slice_for_web_request Then
                MessData(0) = serveur
                Afficher_le_Message("erreur80111erreur, impossible d'accéder au serveur ##")
            Else
     
     
    ' sinon, charger le champs recherche avec le code ISIN, executer la recherche
                page_info.Document.GetElementById(champs_recherche).InnerText = code_isin_recherche
                For Each element As HtmlElement In page_info.Document.GetElementsByTagName("input")
                    If element.Name = evenement_execute Then
                        element.InvokeMember("click")
                        Exit For
                    End If
                Next
     
    	End if
     
    ' la page est reçue, les données attendues sont extraites, OK
    Par contre cette solution est trés lente, alors que je ne visualise pas la page et ne navigue pas, d'où le souhait de ne plus utiliser WebBrowser mais HttpWebRequest, de lire le stream recu, de le transformer en document....



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
            ' données utilisées par la demande et le décodage de la page html, du cours et de sa date 
            Dim Demande As System.Net.HttpWebRequest, Reponse As System.Net.HttpWebResponse, url As String
            Dim iDocument As MSHTML.IHTMLDocument2 = New MSHTML.HTMLDocumentClass
     
     
            ' pour ce site définir l'url, le champs contenet la donnée à rechercher, le nom de l'évènement à activer
            url = "https://www.mon_serveur.fr/"
            champs_recherche = "pattern"
            evenement_execute = "$$event_minisearch"
     
            ' faire la demande de page
            While nb_tentatives < nb_max_tentatives
                Demande = WebRequest.Create(url)
                Demande.Timeout = 20000
     
                ' lecture de la page reçue
                Reponse = Demande.GetResponse()
                If Reponse.StatusCode = HttpStatusCode.OK Then
                    Dim reader As New StreamReader(Reponse.GetResponseStream())
     
                    ' de la chaîne de caratéres reçues, établir l'HTML
                    iDocument.open()
                    iDocument.write(reader.ReadToEnd)
     
                    reader.Close()
                    Reponse.Close()
                    Exit While
                End If
            End While
     
            '  charger le champs recherche avec le code ISIN, executer la recherche
            iDocument.getElementById(champs_recherche).innerText = code_isin_recherche
            For Each element As HtmlElement In iDocument.getElementsByTagName("input")
                If element.Name = evenement_execute Then
                    element.InvokeMember("click")
                    Exit For
                End If
            Next
    la page est bien reçue, le champs "pattern" semble trouvé (? pas de message d'erreur, le document récupéré) par contre impossible d'effectuer la recherche per getElementByTagName

    voici le message d'erreur reçu:

    Impossible d'effectuer un cast d'un objet COM de type 'System_ComObject' en type de classe 'Sytem.Windows.Forms.HtmlElement. Les instances de type qui représentent les composants COM ne peuvent pas être castées en type différents représentant des composants COM; toutefois, elles peuvent être castées en interfaces tant que le composant COM sous-jacent prend en charge les appels QueryInterface pour l'ID de.....

    et voilà pourquoi votre fille est muette!!

    Comment accéder à la page avec les performances de HttpRequest, accéder à sa forme Document pour pouvoir carger des données et exécuter du code contenu dans cette page.

    Un grand merci pour votre aide

    A+

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 71
    Points : 54
    Points
    54
    Par défaut un petit pas pour.......
    Bonjour,

    en changeant:
    For Each element As HtmlElement In iDocument.getElementsByTagName("input")
    par:
    For Each element As IHTMLInputElement In iDocument.getElementsByTagName("input")
    j'ai bien la recherche de tous les tag "input" qui fonctionne et donc le test est positif, par contre:

    element.InvokeMember("click")
    n'est pas un membre de element donc:

    Comment faire un clic sur ce bouton?

    si je ne suis pas sur le forum le plus approprié, n'hésitez pas à me passer un MP MERCI

Discussions similaires

  1. Webbrowser: lent. Autres solutions?
    Par gabuzomeu1 dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 18/11/2014, 19h14
  2. Réponses: 9
    Dernier message: 01/06/2006, 23h34
  3. [Tkinter] faire disparaitre un label ou autre solution
    Par thierry_b dans le forum Tkinter
    Réponses: 3
    Dernier message: 06/01/2006, 17h22
  4. Etat : fond de page ou autre solution ?
    Par Mulele dans le forum IHM
    Réponses: 3
    Dernier message: 11/11/2005, 20h15
  5. Autre solution que IBEvents
    Par aallal dans le forum Bases de données
    Réponses: 3
    Dernier message: 17/10/2005, 13h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo