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"
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
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
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
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
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+
Partager