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 :

Rechercher un élément dans une page web


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Trader / Formateur / Développeur Options CBOE
    Inscrit en
    Septembre 2018
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afrique Du Sud

    Informations professionnelles :
    Activité : Trader / Formateur / Développeur Options CBOE
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2018
    Messages : 86
    Par défaut Rechercher un élément dans une page web
    Bonjour,
    J'essaie de retrouver un taux d'intérêt disponible sur une page web (https://www.global-rates.com/interes...overnight.aspx)
    J'ai codé un petit projet WinForm avec la fonction suivante qui prend l'addresse dans un TextBox "WebAddress" et qui remplit ensuite un autre "WebResponse".

    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
     
    Dim webStream As Stream
            Dim req As HttpWebRequest
            Dim res As HttpWebResponse
     
            WebResponse.Text = ""
     
            If WebAddress.Text = "" Then
                MessageBox.Show("Enter a web address!")
                Exit Sub
            End If
            Try
                req = CType(WebRequest.Create(WebAddress.Text), HttpWebRequest)
                req.Method = "GET" ' Method of sending HTTP Request(GET/POST)
                res = CType(req.GetResponse(), HttpWebResponse) ' Send Request
                webStream = res.GetResponseStream() ' Get Response
     
                Dim SR As New StreamReader(webStream)
                Dim Doc As IHTMLDocument2
     
                Doc = New HTMLDocumentClass  ' mshtml properties Embeded Interop type must be set to FALSE
                Doc.write(SR.ReadToEnd())
     
                webStream.Close()
     
                Dim sb As New Text.StringBuilder
     
                For i As Integer = 0 To Doc.all.length - 1
                    Dim hElm As IHTMLElement = DirectCast(Doc.all.item(i), IHTMLElement)
                    If hElm.innerText <> "" Then
                        If InStrRev(hElm.innerText, "tabledata1", Microsoft.VisualBasic.CompareMethod.Text) > 0 Then
                            sb.Append(hElm.innerText & vbCrLf)
                        End If
                    End If
                    sb.Append(i.ToString & vbCrLf)
                Next
                Doc.close()
                WebResponse.Text = sb.ToString
            Catch ex As Exception
                WebResponse.Text = ex.ToString
            End Try
    Mais le bloc html
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      <tr class="tabledata1">
      <td>&nbsp;october 26 2018</td>
      <td align="center">2.17675&nbsp;%</td>
      </tr>
    N'est pas détecté (je cherche en fait à récupérer le taux 2.17675.
    Ce genre de requête marche pourtant très bien dans Excel, d'où la question subsidiaire: est il possible d'utiliser une Web Query provenant de Excel directement dans VB.NET ?

    Merci par avance
    Bruno

  2. #2
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bonjour,

    Sans doute que je n'ai sans rien compris à ta question, mais voici quand même le résultat d'un test vite fait.
    Il y a 2 TextBox (WebAddress et WebRecherche), ainsi qu'un Button (BCherche) et un WebBrowser (WebBrowser1) non utilisé.
    Pour faire le test, j'ai donné l'URL de la page du forum qui contient ta question et j'ai fait la recherche de "ton" pourcentage 2.17675.
    Voici le code suivi de 2 illustrations.
    J'espère que ceci t'aidera ...
    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
    45
    46
    Imports System.Net.HttpWebRequest
    Imports System.Net.HttpWebResponse
    Imports System.Net
    Imports System.IO
     
    Public Class Form1
     
        Private Sub BCherche_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles BCherche.Click
            Dim webStream As Stream
            Dim req As HttpWebRequest
            Dim res As HttpWebResponse
     
            WebReCherche.Text = ""
     
            If WebAddress.Text = "" Then
                MessageBox.Show("Enter a web address!")
                Exit Sub
            End If
            Try
                req = CType(WebRequest.Create(WebAddress.Text), HttpWebRequest)
                req.Method = "GET" ' Method of sending HTTP Request(GET/POST)
                res = CType(req.GetResponse(), HttpWebResponse) ' Send Request
                webStream = res.GetResponseStream() ' Get Response
     
                ' La ligne suivante provoque des erreurs de scripts mais affiche quand même la page du site si on autorise
                ' Mais cette ligne de code n'est pas nécessaire pour effectuer la recherche
                '''' WebBrowser1.DocumentStream = webStream 
     
                Dim SR As New StreamReader(webStream)
                Dim S As String
     
                While SR.Peek > -1
                    S = SR.ReadLine()
                    If S.IndexOf(WebReCherche.Text) > -1 Then
                        MessageBox.Show("Trouvé")
                        Exit Sub
                    End If
                End While
     
                SR.Close()
                SR.Dispose()
            Catch
            End Try
        End Sub
     
    End Class
    Nom : WebCherche1.jpg
Affichages : 204
Taille : 33,4 Ko
    Nom : WebCherche2.jpg
Affichages : 214
Taille : 24,6 Ko

    Suite ...
    Je viens d'essayer avec l'URL que tu fournis (https://fr.global-rat...ets-overnight.aspx) (en l'utilisant complète) et j'ai aussi trouvé le 2.17675 !!!
    Bonne soirée,

  3. #3
    Membre confirmé
    Homme Profil pro
    Trader / Formateur / Développeur Options CBOE
    Inscrit en
    Septembre 2018
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afrique Du Sud

    Informations professionnelles :
    Activité : Trader / Formateur / Développeur Options CBOE
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2018
    Messages : 86
    Par défaut
    merci Phil, je vais essayer ce soir.
    En fait je cherchais comme dans le code et annotations mentionnés plus haut de détecter la classe "tabledata1" et ensuite chercher le taux dans le bloc.

  4. #4
    Membre confirmé
    Homme Profil pro
    Trader / Formateur / Développeur Options CBOE
    Inscrit en
    Septembre 2018
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afrique Du Sud

    Informations professionnelles :
    Activité : Trader / Formateur / Développeur Options CBOE
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2018
    Messages : 86
    Par défaut
    Hello Phil,
    Je n'ai pas réussi à répliquer ton code (SR.Peek jette une exception). J'ai donc bricolé (pas très joli mais bon...) après avoir enfin remarqué que Requête et Réponse ne sont pas identiques si déclarées respectivement en HttpWebRequest et HttpWebResponse et non pas WebRequest et WebResponse (la différence m'échappe).
    Bref, j'en suis venu à bout en lisant le contenu du bloc HTML:

    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
     
    Dim rt As String = ""
            Dim wRequest As HttpWebRequest
            Dim wResponse As HttpWebResponse
            Dim SR As StreamReader
            wRequest = Create(wAdd)
            wResponse = wRequest.GetResponse()
     
            SR = New StreamReader(wResponse.GetResponseStream)
            Dim i As Integer = 0
            Dim s As String = ""
            While SR.Peek() > -1
                S = SR.ReadLine()
                If s.IndexOf("october 26 2018") > -1 Then
                    i = 1
                End If
                If i > 0 Then i = i + 1
                If i = 3 Then
                    Dim p As Integer = InStr(s, ">")
                    Dim q As Integer = InStr(s, "&")
                    MessageBox.Show(s)
                    rt = Mid(s, p + 1, q - p - 1)
                End If
            End While
     
            SR.Close()
    Il y a certainement une manière plus élégante et plus robuste.
    Encore merci de m'avoir mis sur la bonne voie.
    Bruno

Discussions similaires

  1. recherche dans une page web
    Par ftouhk dans le forum Débuter
    Réponses: 1
    Dernier message: 29/05/2014, 21h34
  2. BeautifulSoup - Recherche de données dans une page web
    Par Okidor12 dans le forum Réseau/Web
    Réponses: 8
    Dernier message: 24/07/2012, 10h36
  3. recherche d'un mot dans une page web
    Par fraisa1985 dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 23/10/2008, 15h59
  4. champ recherche dans une page Web
    Par ALIAS200 dans le forum Général Conception Web
    Réponses: 7
    Dernier message: 28/01/2008, 16h36
  5. Réponses: 1
    Dernier message: 17/08/2007, 15h19

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