Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1429 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [VB.NET] Intéraction avec page Web

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VB.NET] Intéraction avec page Web

n°2236972
kyoku59
Posté le 04-09-2014 à 08:59:59  profilanswer
 

Bonjour,
 
J'arrive bien a récupérer des infos sur une page web mais pas sur toutes.
Le soucis est que sur certaines pages pour moi arriver aux données, il faut cliquer sur un bouton tout simple mais derrière celui-ci c'est du javascript... Sur le "code source" de la page, mes données n'y sont pas.
 
Est-ce que quelqu'un aurait une piste pour me dépatouiller de cette galère ?
 
 :bounce: Merci  :bounce:  
 
Ps : Je ne sais pas si j'ai bien réussi à me faire comprendre lol ^^

mood
Publicité
Posté le 04-09-2014 à 08:59:59  profilanswer
 

n°2236996
rufo
Pas me confondre avec Lycos!
Posté le 04-09-2014 à 13:47:55  profilanswer
 

Piloter un navigateur web avec des sendkey (envoi de touche clavier) afin d'arriver aux données souhaitées ? Après, une récupération de la page HTML et une analyse de son contenu pour extraire ce qui t'intéresse ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2236999
Devil'sTig​er
Posté le 04-09-2014 à 16:05:20  profilanswer
 

Tout dépend de ce que tu veux exactement faire, surtout de l'environnement dans lequel tu évolues.
 
Si l'environnement n'est pas définit (tu installes sur n'importe quel type de plateforme), effectivement la solution des touches clavier, voir de IE embarqué est certainement la meilleure.
 
Si tu es dans un environnement connu (cad tous les utilisateurs ont le même navigateur), tu peux obtenir de bien meilleure solution, notamment via par exemple html5 WebDriver:
https://dvcs.w3.org/hg/webdriver/ra [...] -spec.html
 
Ou encore, tu peux tenter de piloter une version un peu plus ancienne (puisque WebDriver est inspiré de Selenium), via Selenium WebDriver...
 
Tu peux aussi avoir accès à des controles activeX pour certains navigateurs.
Il y a aussi l'embed comme je disais, par exemple sous Java tu as http://www.teamdev.com/jxbrowser ou sous Node.JS http://phantomjs.org/, ou sous vb.net http://msdn.microsoft.com/fr-fr/li [...] 10%29.aspx
 
Tu as encore une troisième catégorie que sont les "faux clients" comme beautiful soup sous python: http://www.crummy.com/software/BeautifulSoup/
 
Bref il y a de quoi faire, décrit si possible un peu plus ce qu'il y a autour du code: version du .NET, tes contraintes techniques (un seul programme ? Plusieurs languages possibles ?), et si tu as des specs détaillées sur les utilisateurs...

n°2237038
kyoku59
Posté le 05-09-2014 à 06:00:14  profilanswer
 

Je vais regarder plus en détail ces liens MERCI
 
En faite je dois récupérer le relevé de compteur d'impression sur mes imprimantes. Le soucis c'est que je dois en avoir 130 et la solution était de rentrer sur chacune des adresse IP et copier/coller le résultat dans un documents...
Sur les machine de type Lexmark je n'ai aucun problème car c'est une page HTML très simple, sur celle de type Ricoh ou OKI ba les codes sources sont inexploitable  :pfff:  
 
J’opère actuellement comme ceci :
Le code ne doit pas être optimisé car je suis en phase de test  :jap:  
 
Fonction pour vérifier si l'imprimante est allumée

Code :
  1. Public Function TestAdresse(ByVal URL As String) As Boolean
  2.         Try
  3.             Dim request As WebRequest = WebRequest.Create(URL)
  4.             Dim response As WebResponse = request.GetResponse()
  5.         Catch ex As Exception
  6.             Return False
  7.         End Try
  8.         Return True
  9.     End Function


Fonction pour récupérer le compteur

Code :
  1. Private Function ReleveLexmark(ip As String, modele As String) As Integer
  2.         Dim adresse As String = ""
  3.         Select Case modele
  4.             Case "T640"
  5.                 adresse = "http://" & ip & "/cgi-bin/dynamic/config/reports/devicestatistics.html"
  6.             Case "T650"
  7.                 adresse = "http://" & ip & "//cgi-bin/dynamic/printer/config/reports/devicestatistics.html"
  8.         End Select
  9.         If TestAdresse(adresse) = True Then
  10.             Dim webRequest As WebRequest
  11.             Dim webResponse As WebResponse
  12.             webRequest = HttpWebRequest.Create(adresse)
  13.             webResponse = webRequest.GetResponse()
  14.             Using stream As StreamReader = New StreamReader(webResponse.GetResponseStream())
  15.                 Dim pageHtml As String
  16.                 pageHtml = stream.ReadLine
  17.                 Dim i As Integer = 0
  18.                 Dim ligne As String = ""
  19.                 Do While Not pageHtml Is Nothing
  20.                     If i = 56 Then
  21.                         ligne = pageHtml
  22.                         Exit Do
  23.                     End If
  24.                     'Lecture de la ligne suivante
  25.                     pageHtml = stream.ReadLine
  26.                     i = i + 1
  27.                 Loop
  28.                 'Fermeture du fichier
  29.                 stream.Close()
  30.                 'Découpage de la ligne en 2 parties
  31.                 Dim listLigne() As String
  32.                 listLigne = Split(ligne, "<p>" )
  33.                 'Le relevé commence juste après <p> et dans tout les cas, la ligne fini par 9 caractères (</p></td> )
  34.                 Dim compteur As Integer = 0
  35.                 compteur = CInt(Trim(listLigne(1).Substring(0, listLigne(1).Length - 9)))
  36.                 Return compteur
  37.             End Using
  38.         Else
  39.             Return 0
  40.         End If
  41.     End Function


Bouton

Code :
  1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
  2.         MsgBox(ReleveLexmark("172.26.35.42", "T640" ))
  3.     End Sub

n°2237060
rufo
Pas me confondre avec Lycos!
Posté le 05-09-2014 à 10:50:06  profilanswer
 

Question bête : tu peux pas faire une requête de type SNMP pour récupérer la MIB qui contient le compteur de l'imprimante :??:
 
Ca serait quand même plus pro... :o


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2237065
kyoku59
Posté le 05-09-2014 à 11:16:43  profilanswer
 

Oui tu as raison mais la DSI de ma boîte ne me donne pas les billes pour moi faire ce genre de chose sur le réseau  :??:  
 
Sinon j'ai réussi a intercepter les URL des pages en questions avec les données que je voulais  :sol:  
Le code derrière est vraiment moche :pfff:  
 - Pas de "name"
 - Pas d'Id
 - Rien pour distinguer le bon champs  
 
Il faut que je trouve la bonne ligne dans mon code source et faire un bon découpage pour récupérer mon compteur lol
du genre :

Code :
  1. 'Le relevé commence juste après <p> et dans tout les cas, la ligne fini par 9 caractères (</p></td> )
  2.                 Dim compteur As Integer = 0
  3.                 compteur = CInt(Trim(listLigne(1).Substring(0, listLigne(1).Length - 9)))


 
Si il y'a une solution, je veux bien mais je suis un peu sceptique  :??:  
 
En tout cas MERCI de vous êtes penchés sur mon problème.
 
J'attendrai demain pour mettre mon post en [RÉSOLU] si toute fois il y'a un moyen de faire ça plus proprement.

n°2237068
rufo
Pas me confondre avec Lycos!
Posté le 05-09-2014 à 11:43:42  profilanswer
 

Tu devrais plutôt utiliser le parser XML de l'activeX IE. Pour manipuler le DOM (HTML, c'est du XML à peu de chose près), ça serait plus pratique et moins hasardeux que de faire un simple découpage de chaîne...
 
Et pour la DSI, faut pas déconner, qq requêtes SNMP de temps en temps ne va pas plomber leur réseau :sarcastic: En plus, en bande-passante, c'est moins couteux du SNMP que d'appeler pleins de pages html... :o


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2237075
kyoku59
Posté le 05-09-2014 à 12:31:38  profilanswer
 

As tu sous le coude un exemple de cette utilisation car je ne l'ai jamais fait et je ne trouve pas exactement sur le net mise a part des plugins pour IE

n°2237077
Devil'sTig​er
Posté le 05-09-2014 à 12:44:21  profilanswer
 

Hum je rejoint rufo, le parsing HTML est pas forcément la meilleur solution...
 
Sinon, si cela peut t'aider sous Java il existe un truc que j'ai utilisé, un time saver de dingue: jsoup.
Et bingo sous .NET il existe un portage NSoup (jamais testé, mais si c'est un portage ca devrait être aussi fiable je pense):
http://www.developerfusion.com/project/98472/nsoup/
 
Ca te donne quelque chose de proche de jQuery. Cad tu peux faire:
 
"table tr p a span" et il va te sortir tous les trucs qui trouvent en relation avec ce path dans le DOM...
 
Pour snmp il y en a des pelles, mais souvent en anglais:
http://www.snmpsharpnet.com/?page_id=105

n°2237197
kyoku59
Posté le 08-09-2014 à 07:10:41  profilanswer
 

Yeap merci Devil sTiger !
Dans un premier temps je vais resté sur mon découpage car je ne vais pas avoir le temps d'étudier cette solution mais je l'ai mis dans mes note pour une prochaine appli.
 
La chance que j'ai actuellement est que mes imprimantes OKI et Ricoh ont une page web bien structurées avec des Id là ou il faut et qui vont bien.
J'ai tout simplement fait une fonction part marque.
 
En tout cas un grand merci :jap: :jap: :jap:

mood
Publicité
Posté le 08-09-2014 à 07:10:41  profilanswer
 

n°2237206
rufo
Pas me confondre avec Lycos!
Posté le 08-09-2014 à 10:47:58  profilanswer
 

Le pb, c'est que le jour où y'a un update du firmware d'une des imprimantes qui vient à chanegr la structure de ta page web ou si ton parc compte une imprimante d'une autre marque/modèle qui n'a pas cette page web, t'es dans la merde :/ Une solution à base de SNMP serait beaucoup moins hasardeuse et plus pérenne dans le temps (et plus facile à maintenir aussi)...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [VB.NET] Intéraction avec page Web

 

Sujets relatifs
Largeur de page en XMLNoob: Comment ouvrir un popup au chargement d'une page?
[Résolu] Lien href qui remplace une page affichée via un includeAfficher bannière et ses boutons en allant la chercher sur autre page
Récupèrer des informations sur un page web(.Net) Mono Cecil & Réfection Consctrutor
[VB.NET] .ToArray & LambdaBackground / Fond de page HTML sous Blue Griffon
Avec IE8, mes données avec AJAX disparaissent d'une page à l'autre ! 
Plus de sujets relatifs à : [VB.NET] Intéraction avec page Web


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR