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 :

Récupérer des éléments dans une page internet


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    février 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2005
    Messages : 19
    Points : 11
    Points
    11
    Par défaut Récupérer des éléments dans une page internet
    Bonjour,

    Grâce au très bon tuto de @qwazerty (https://qwazerty.developpez.com/tuto...-et-vba-excel/), j'ai réussi à récupérer pas mal d'informations qui m'intéressait dans la page Internet de mon thermostat Nest (https://home.nest.com/xxxxx).

    Notamment grâce à la "class" de la source comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    'Capture temp cible
       Set HtmlElementStandard = IEDoc.getElementsByClassName("styles--low_L-b styles--active_22w").Item
       Temp_cible = HtmlElementStandard.innerText
     
    'Capture temp actuelle
        Set HtmlElementStandard = IEDoc.getElementsByClassName("styles--backgroundText_9E_").Item
        Temp_Int = HtmlElementStandard.innerText
    Malheureusement, je bloque sur quelques éléments. j'aimerai récupérer le nombre d'éléments (ou Line) dans <g class= “styles--ticks_3il”> ou la valeur de <path class= “ styles--currentTemperatureTick_UEn”>

    Nom : Capture.JPG
Affichages : 38
Taille : 202,3 Ko

    Et en utilisant la technique de "IEDoc.getElementsByClassName", je n'y arrive pas.

    D'avance merci pour vos suggestions
    A+

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    février 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2005
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    Pas moyen de trouver une solution par moi-même. Je charge bien l’objet mais il ne contient pas les données recherchées. Il y a sûrement une subtilité mais pour l’instant, je ne vois pas. Si quelqu’un a des pistes !!

    Valeurs cherchées:
    Nom : Capture.JPG
Affichages : 28
Taille : 26,8 Ko

    Contenu de l'objet "styles--currentTemperatureTick_UEn" par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set HtmlElementStandard = IEDoc.getElementsByClassName("styles--currentTemperatureTick_UEn").Item
       Val_cherchée = HtmlElementStandard.innerText
    Malheureusement, l'espion sur HtmlElementStandard ne me remonte rien d'intéressant !!

    Nom : Capture2.JPG
Affichages : 28
Taille : 73,6 Ko

    Merci d'avance

  3. #3
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    avril 2002
    Messages
    3 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : avril 2002
    Messages : 3 397
    Points : 7 646
    Points
    7 646
    Par défaut
    Salut

    Il est préférable de déclarer la variable dans son type natif pour avoir le plus de chance possible d'avoir accès à l'ensemble des méthodes et propriétés qui lui sont liées.
    Ainsi, essaie de déclarer ta variable comme étant de type SVGPathElement (j'ai vérifié elle est présente dan Escel, y compris dans l'explorateur d'objets (Touche F2)

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP - Dernier et Seul Tutoriel : VBA & Internet Explorer
    L'utilisation de l’éditeur de message

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    février 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2005
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Merci Qwazerty.

    Les premiers tests de cette méthode me donnent l'erreur 91 (https://docs.microsoft.com/fr-fr/off...t-set-error-91)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim Obj_SVGPathElement As SVGPathElement
     
    ....
     
    'On pointe le document
       Set IEDoc = IE.document
     
    'Capture Objet
        Obj_SVGPathElement = IEDoc.getElementsByClassName("styles--currentTemperatureTick_UEn")
    Je continue mes recherches sur cette piste

    PS: Pour reproduire les formes, il est possible utiliser ce site https://codepen.io/pen/?&editable=true (avec Chrome ou Edge) et le code
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 460 460" width="100%" height="100%"><defs><clipPath id="button-separator"><rect x="110" y="370" width="118" height="110" /><rect x="232" y="370" width="166" height="110" /></clipPath></defs><path class="styles--targetTemperatureTick_BtG" d="M 168.319 78.4471 L 144.806 20.6727 L 153.245 17.4333 L 174.429 76.1017 L 168.319 78.4471 Z" /><path class="styles--currentTemperatureTick_UEn" d="M 188.023 63.4484 L 174.767 10.8531 L 183.575 8.81969 L 194.717 61.903 L 188.023 63.4484 Z" /></svg>

  5. #5
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    avril 2002
    Messages
    3 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : avril 2002
    Messages : 3 397
    Points : 7 646
    Points
    7 646
    Par défaut
    Salut

    Je n'ai pas trop le temps de m'y intéresser mais changeons peut-être de cap.
    Si je comprends bien la structure du code Html, à chaque Path correspond un trait, donc le nombre de structure <Path> détermine le nombre de traits, donc la température. Pourquoi ne pas simplement déterminer la température en fonction du nombre de traits _ donc du nombre d'éléments dans child ou children (je confonds toujours les deux)_?

    Pour l'erreur de code, GetElementSbyClassName renvoi un tableau d'éléments, il faut donc en pointer 1, par défaut le 1er mais attention qu'il n'y en ait pas plusieurs sur la page portant le même nom...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Obj_SVGPathElement = IEDoc.getElementsByClassName("styles--currentTemperatureTick_UEn")(0)

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP - Dernier et Seul Tutoriel : VBA & Internet Explorer
    L'utilisation de l’éditeur de message

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    février 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2005
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Mince, j'avais écrit un long message et j'ai eu une erreur donc tout perdu

    Pour résumer, définir la variable en SVGPathElement ne me donne pas plus de détails qu'en HTMLGenericElement.

    Compter les traits (je trouvais les "line stroke-width" de mon 1er message dans All.Item donc je pourrais récupérer les valeurs en X et Y) mais j'ai remarqué des mêmes valeurs pour des températures différentes donc ne me semble pas très précis de la part de Nest.

    Nest s'est fermé au monde en supprimant les API récemment donc j'ai tenté une autre méthode mais j'ai l'impression que c'est un pansement sur une jambe de bois. Je crois qu'il est temps de tester le Netatmo !!!

  7. #7
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    avril 2002
    Messages
    3 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : avril 2002
    Messages : 3 397
    Points : 7 646
    Points
    7 646
    Par défaut
    Salut

    Dans ton message #2, tu montres un bout de l'espion de la variable SVG, tu as regardé dans la section PathSegList?
    Pour ce que j'en ai vu dans le code source un trait = un <Path>.

    Pour le reste je ne connais pas cette technologie, ni les soft en ligne qui l'utilise donc je ne saurais pas en dire plus.

    Bon courage
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP - Dernier et Seul Tutoriel : VBA & Internet Explorer
    L'utilisation de l’éditeur de message

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    février 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2005
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Voici ce qu'il y a dans PathSegList:
    Nom : 2.JPG
Affichages : 13
Taille : 98,1 Ko

  9. #9
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    avril 2002
    Messages
    3 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : avril 2002
    Messages : 3 397
    Points : 7 646
    Points
    7 646
    Par défaut
    Et le 6 correspond à quelque chose? Il est en corrélation avec le nombre de trait affichés à l'écran?

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP - Dernier et Seul Tutoriel : VBA & Internet Explorer
    L'utilisation de l’éditeur de message

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    février 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2005
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Je ne sais pas à quoi il correspond car il y a toujours 6 !

Discussions similaires

  1. Récupérer des éléments d'une page sur internet
    Par patricktoulon dans le forum Général VBA
    Réponses: 50
    Dernier message: 02/02/2012, 19h55
  2. [XL-2003] Récupérer des données d'une page internet avec login
    Par yoyo_l dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 20/08/2009, 23h58
  3. Récupérer des info dans une page html
    Par DORBRITZ dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 06/03/2008, 12h13
  4. [RegEx] Récupérer des données dans une page Web
    Par Pragmateek dans le forum Langage
    Réponses: 8
    Dernier message: 24/05/2006, 20h44
  5. Récupérer des données dans une page HTML
    Par newdelirium dans le forum Langage
    Réponses: 3
    Dernier message: 26/10/2005, 20h18

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