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

Macros et VBA Excel Discussion :

[Excel 2013] Lire des données en provenance du web


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 524
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 524
    Par défaut [Excel 2013] Lire des données en provenance du web
    Bonjour,

    J'essaye de lire la page web suivante:
    https://finalfantasy.fandom.com/wiki...al_Fantasy_VI)
    En particulier, obtenir les données dans le pavé "Stats".

    J'ai écrit le code suivant:
    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
    Public Sub RetrieveData()
    On Error GoTo Error
        Const Url As String = "https://finalfantasy.fandom.com/wiki/Wererat_(Final_Fantasy_VI)"
     
        Dim Ie As SHDocVw.InternetExplorer
        Set Ie = New SHDocVw.InternetExplorer
     
        Ie.Visible = True
        Ie.Navigate2 Url
        While Ie.readyState <> READYSTATE_COMPLETE
            DoEvents
        Wend
        Dim Document As MSHTML.HTMLDocument
        Set Document = Ie.Document
     
        Dim Nodes As MSHTML.IHTMLDOMChildrenCollection
            '// Recherche du niveau (level)
        Set Nodes = Document.querySelectorAll("#mw-content-text > div.mw-parser-output > div:nth-child(10) > aside > section:nth-child(1) > div > section:nth-child(1) > section:nth-child(2) > section.pi-smart-group-body.pi-border-color > div:nth-child(1)")
     
        Dim Node As MSHTML.HTMLHtmlElement
        Set Node = Nodes.Item(0)
     
        Ie.Quit
    Exit Sub
    Resume
    Error:
        Stop
        Ie.Quit
    End Sub
    Malheureusement, l'objet Node reste éternellement à Nothing.

    Notes:
    J'ai obtenu le selecteur CSS à donner à la méthode querySelectorAll via l'outil de développement de MS Edge.

  2. #2
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 247
    Par défaut
    Hello,
    en pilotant Edge par CDP en VBA voir ici j'arrive à récupérer les infos de Stats avec ce code :
    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
    Sub TestCDP_deedo()
    Dim objBrowser As New CDPBrowser
    Dim elem As CDPElement
        On Error GoTo ErrHandler
        'on lance MS EDGE
    1   objBrowser.Start "edge", cleanActive:=True, reAttach:=True ', _
                  ' addArgs:="--headless --disable-gpu"
        ' on peut cacher le navigateur
        'objBrowser.hide
    2    objBrowser.navigate "https://finalfantasy.fandom.com/wiki/Wererat_(Final_Fantasy_VI)"
    3    Debug.Print objBrowser.getElementByQuery("#mw-content-text > div.mw-parser-output > div > aside > section").innerText
    4   objBrowser.quit
         Set elem = Nothing: Set objBrowser = Nothing
         Exit Sub
    ErrHandler:
         Debug.Print "Erreur ligne " & Erl: objBrowser.quit: Set elem = Nothing: Set objBrowser = Nothing
     
     
     
     
    End Sub
    Résultat :
    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
    Stats
    LV
    HP
    MP
    4
    24
    0
    Attack
    Magic
    Defense
    13
    0
    100
    Magic Defense
    Magic Evasion
    Agility
    150
    0
    30
    Hit Rate
    Evasion
    EXP
    100
    0
    21
    Gil
    22
    Affinities and resistances
    Weak elements
     Fire
    Status immunities
     Darkness, Sleep
    [EDIT] finalement on y arrive aussi avec Internet Explorer (le seul souci apparemment c'est la fermeture d'Internet Explorer)
    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
    Public Sub RetrieveData()
        Const Url As String = "https://finalfantasy.fandom.com/wiki/Wererat_(Final_Fantasy_VI)"
        Dim Ie As SHDocVw.InternetExplorer
        Set Ie = New SHDocVw.InternetExplorer
        On Error GoTo Error
        Ie.Visible = True
        Ie.Navigate2 Url
        While Ie.ReadyState <> READYSTATE_COMPLETE
            DoEvents
        Wend
        Dim Document As MSHTML.HTMLDocument
        Dim Stats As Object, Infos As Object, Info As Object
        Set Document = Ie.Document
        Set Stats = Document.querySelector("#mw-content-text > div.mw-parser-output > div > aside > section")
        Set Infos = Stats.querySelectorAll("div.pi-smart-data-value")
        For Each Info In Infos
           Debug.Print Info.getAttribute("data-source"), " : ", Info.innerText
        Next Info
        Ie.quit
        Exit Sub
        Resume
    Error:
        Stop
        Ie.quit
    End Sub
    Résultat :
    level : 4
    hp : 24
    mp : 0
    attack : 13
    mp : 0
    defense : 100
    magic defense : 150
    magic evasion : 0
    speed : 30
    hit rate : 100
    evasion : 0
    exp : 21
    gil : 22
    Ami calmant, J.P

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 524
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 524
    Par défaut
    Merci.

    Notes:
    Cette librairie est terriblement bavarde.
    Un peut dommage qu'elle ne génère ni code erreur de retour, ni ne lance d'exception (ou si peut).
    IE à l'air assez instable, pas exploitable.

  4. #4
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 247
    Par défaut
    Hello,
    Citation Envoyé par deedolith Voir le message
    Cette librairie est terriblement bavarde.
    Pour ceci voir à la fin du message de mon lien ce qui est indiqué pour la rendre "muette".
    Et pout faire en CDP ce que j'ai fait en I.E :
    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
    Sub TestCDP_deedo()
    Dim objBrowser As New CDPBrowser
    Dim Stats As Object, Infos As Object, Info As Object
        On Error GoTo ErrHandler
        'on lance MS EDGE
    1   objBrowser.Start "edge"  ', cleanActive:=True, reAttach:=True ', _
                  ' addArgs:="--headless --disable-gpu"
        ' on peut cacher le navigateur
        'objBrowser.hide
    2    objBrowser.navigate "https://finalfantasy.fandom.com/wiki/Wererat_(Final_Fantasy_VI)"
    3    Set Stats = objBrowser.getElementByQuery("#mw-content-text > div.mw-parser-output > div > aside > section")
    4    Set Infos = Stats.getElementsByQuery("div.pi-smart-data-value")
          For Each Info In Infos
    5        Debug.Print Info.getAttribute("data-source"), " : ", Info.innerText
          Next Info
    6    objBrowser.quit
    7    Set Stats = Nothing: Set Infos = Nothing: Set Info = Nothing: Set objBrowser = Nothing
    8    Exit Sub
    ErrHandler:
         Debug.Print "Erreur ligne " & Erl: objBrowser.quit: Set elem = Nothing: Set objBrowser = Nothing
    End Sub
    Ami calmant, J.P

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Besoin d'aide sous Excel 2013 pour des formules dans des tableaux.
    Par michelb2 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/01/2018, 18h20
  2. Comment lire des parties d'une page web
    Par Whombat dans le forum Visual Studio
    Réponses: 0
    Dernier message: 17/10/2009, 06h14
  3. [Excel] Comment lire des fichiers excel avec php?
    Par dear_rihab dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 02/11/2007, 12h38
  4. [Excel] Lire des données de excel avec php
    Par Eisy dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 09/03/2006, 17h00
  5. Réponses: 3
    Dernier message: 25/07/2005, 09h40

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