Impossible d'extraire certaines données

Bonjour tout le monde,

Tout d'abord bonnes fêtes à vous.

Ma question est simple, la réponse le sera peut-être moins.

Je cherche à extraire certaines données Web d'un site (Airlines Manager, il vous faudra un compte si vous souhaitez faire des tests)

Ci-joint une capture d'écran de la page en question

En gros lorsque j'extrait la donnée avec Power Query il m'extrait seulement ça :

Kind Name Text

Element HTML

Sur d'autres pages ça fonctionne très bien, mais pas sur celle-ci, parce que j'imagine qu'un format tableau n'a pas été utilisé sur la programmation du site en question.

Sur d'anciens fichiers, je faisais ce type d'extraction mais Excel n'utilisait pas Power Query, du coup ma question, peut-on désactiver le module Power Query d'Excel ? Parce que si j'utilise l'ancien extracteur, je n'ai en effet pas un beau format de sorti mais la donnée est tout de même exploitable.

Dans l'attente de votre retour.

Cordialement,

capture

Bonjour,

Sur d'autres pages ça fonctionne très bien, mais pas sur celle-ci, parce que j'imagine qu'un format tableau n'a pas été utilisé sur la programmation du site en question.

Sur d'anciens fichiers, je faisais ce type d'extraction mais Excel n'utilisait pas Power Query, du coup ma question, peut-on désactiver le module Power Query d'Excel ? Parce que si j'utilise l'ancien extracteur, je n'ai en effet pas un beau format de sorti mais la donnée est tout de même exploitable.

En effet, PowerQuery ne fonctionnera que si la site est correctement structuré. Il ne pourra pas prendre en compte les div hidden, les données javascript, et autres éléments ...

D'autres solutions sont possible : getelementbyXXX, ScriptControl, voire simplement le décodage de responseText ...

Si tu pouvais nous passer (en mp si nécessaire) le fichier source texte de la page je pourrais y jeter un œil ...

Merci Steelson pour ta réponse.

Ci-joint le fichier texte

Les solutions proposées : getelementbyXXX, ScriptControl , responseText c'est du VBA ça non ?

Cordialement,

Les solutions proposées : getelementbyXXX, ScriptControl , responseText c'est du VBA ça non ?

Oui

Ci-joint le fichier texte

heu, je pense qu'il manque quelque chose !

Je te l'envoie par MP il n'accepte pas que je l'envoie sur le forum

Ah en MP on peut pas non plus du coup je le partage avec mon compte OneDrive

Quelles sont les données qu'il faudrait récupérer ?

Les données en sont pas du tout organisées en "table" (sens html), mais dans des div subdivisées en span

Ce programme doit pouvoir extraire les données (merci PierreP56 : http://tatiak.canalblog.com/), mais sans mise en forme

Sub Lire()
Dim site As String
Dim oHtml As New HTMLDocument
Dim Elem1 As Object, Elem2 As Object
Dim lig As Long, col As Integer, S As Variant
Dim T As Variant

site = "__________"

    oHtml.body.innerHTML = HTML(site)
    lig = 1
    ReDim T(1 To 10, 1 To lig)
    For Each Elem1 In oHtml.getElementsByTagName("div")
        lig = lig + 1
        ReDim Preserve T(1 To 10, 1 To lig)
            col = 0
            For Each Elem2 In Elem1.getElementsByTagName("span")
                col = col + 1
                T(col, lig) = Elem2.innerText
            Next Elem2
    Next Elem1

    T = Application.Transpose(T)
    Cells.ClearContents
    Range("A2").Resize(UBound(T, 1), UBound(T, 2)) = T

End Sub

Function HTML(URL As String) As String
    With CreateObject("WINHTTP.WinHTTPRequest.5.1")
        .Open "GET", URL, False
        .send
        HTML = .responseText
    End With
End Function

Une des solutions serait alors de transformer dans .responseText les div en tr et les span en td pour récupérer un tableau, le coller dans le presse-papier avant de le coller dans une feuille excel mais je ne suis pas sûr à 100% du résultat ! N'ayant pas accès directement au site cela ne m'est pas possible de tester !

Pour la partie qu'il faut récupérer par rapport au Screenshot c'est la partie compte rendu :

La valeur Usé à : 0,34%

La valeur nombre de vols : 1

La valeur Heures de vol : 24

La valeur Check A : 190 214$

Le reste je suis capable de le récupérer sur d'autres pages, mais les données ci-dessus malheureusement n'apparaissent que sur cette page, sachant que derrière je vais faire une boucle pour venir récupérer tous mes avions et ça tous les jours (la donnée varie 1 fois par jour au moment ou l'avion atteri) et ensuite je vais historiser la donnée, afin de pouvoir monter des stats

Si tu veux faire des tests je peux tecommuniquer mes identifiants en MP

Mais auparavant (avant la version 2016), je pouvais extraire la donnée sans passer par Power Querry, c'est étonnant que MS ait fait ça non ?

En tout cas merci pour ton aide.

Cordialement,

Mais auparavant (avant la version 2016), je pouvais extraire la donnée sans passer par Power Querry,

tu es sûr que c'est lié à excel ? je pense plutôt à une évolution du site !

Pour la partie qu'il faut récupérer par rapport au Screenshot c'est la partie compte rendu :

La valeur Usé à : 0,34%

La valeur nombre de vols : 1

La valeur Heures de vol : 24

La valeur Check A : 190 214$

ok, cela doit pouvoir se faire je regarde

Oui oui certain, je t'ai mis des screenshots en PJ, le 1er c'est l'affichage de requête d'Excel et le deuxième c'est le résultat dans Excel

capture 2 capture 3

Bonjour mazneoo

Un essai avec cet outil (j'ai assemblé différentes sous-routines)

Cela fonctionne sur le jeu d'essai ... reste à voir sur le site lui-même (mettre l'URL en B1)

Le principe est de charger la source (en texte), de faire un ciblage d'abord assez large des données, puis un ciblage fin, et enfin d'y prélever les valeurs avec l'aide d'une expression régulière. Tous les paramètres sont dans la feuille principale.

13quadri-split.xlsm (18.44 Ko)

Merci pour ton retour.

Par contre j'ai une petite erreur qui se situe au niveau du .end, mais je pense que c'est normal puisqu'il faut s'authentifier non ?

Function HTML(URL As String) As String

With CreateObject("WINHTTP.WinHTTPRequest.5.1")

.Open "GET", URL, False

.send

HTML = .responseText

End With

End Function

Oui c'est sans doute de là que cela vient !

Est-ce que si tu t'identifies une première fois et que tu lances la macro, tu as accès ? Si cela passe par la lecture des cookies, ce n'est pas sûr du coup ! Si cela passe par un formulaire qui renvoie l'identification en post, il faudrait dans ce cas faire une première requête ... cela devient plus complexe !

Je me suis log sur IE et sur Edge (dans le doute on sait jamais).

Mais ce qui est certain c'est que je passe par un formulaire, celui-ci garde la connexion via un cookie, mais la transition passe par un $_POST sinon j'aurai les variables dans l'URL via $_GET

Mais ce qui est certain c'est que je passe par un formulaire, celui-ci garde la connexion via un cookie, mais la transition passe par un $_POST sinon j'aurai les variables dans l'URL via $_GET

Si tu passes par un post, il garde en mémoire via une "session" sans forcément passer par cookie. Mais il faut lui renvoyer les paramètres en POST.

As-tu le code source de la page formulaire ?

Je reprendrai des sujets que j'ai déjà traités

https://forum.excel-pratique.com/viewtopic.php?p=563130#p563130

https://forum.excel-pratique.com/viewtopic.php?p=564517#p564517

Voici le code source de la partie que tu as besoin je pense :

<form id="showcaseLoginForm" class="loginBox left" action="/login_check" method="post" name="loginForm">
    <div id="rememberBox">
        <img id="rememberCheckBox" src="/images/showcase/interface/check_ok.png?v1.6.11" alt="checkbox image"/>
        <input type="checkbox" id="remember_me" name="_remember_me" checked />
        <label for="remember_me" id="remember_meLabel">Se souvenir de moi</label>
    </div>
    <div class="forgetPassword">
        <a>Mot de passe oublié ?</a>
    </div>

    <input id="username" type="text" name="_username" value="" placeholder="Adresse e-mail"/>

    <input id="password" type="password" name="_password" placeholder="Mot de passe"/>

        <input type="hidden" name="_csrf_token" value="lpRLctCq2d5yaYYGhNC0O7WcPAFc95PqIoN98moFNYg">

    <button id="loginSubmit" type="submit" class="blueButton">CONNEXION</button>

            <a id="loginFbSubmit" href="#" onclick="fb_login();">Connexion</a>
    </form>

                    </nav>

                    <div id="buttonShowMainHeader">CONNEXION</div>
                </header>
                <div class="mainContent">
           

Bonjour,

j'ai 2 questions :

1- que contient cette fonction fb_login(); ?

2- est-ce que l'URL est la même entre l'interrogation du site affichant la connexion et l'interrogation du site affichant les résultats ?

il doit en effet y avoir ouverture d'une "session" php au vu de ceci

<input type="hidden" name="_csrf_token" value="lpRLctCq2d5yaYYGhNC0O7WcPAFc95PqIoN98moFNYg">

je vais en parallèle développer un minisite en php sur serveur et tester l'envoi des valeurs notamment du mot de passe (a fin de voir comment il est crypté) ainsi que le _remember_me (checkbox), du coup cela va me prendre un peu de temps

Merci Steelson tu es top !

1 ) C'est une authentification par Facebook, mais je n'utilise pas cette option, je prends l'authentification basique avec mail et mdp

2 ) Non c'est pas la même URL, voici l'URL lorsqu'on est connecté https://www.airlines-manager.com/home (il y a également une page de chargement (https://www.airlines-manager.com/home/loading), mais je pense qu'on s'en fou c'est juste pour faire patienter

je vais en parallèle développer un minisite en php sur serveur et tester l'envoi des valeurs notamment du mot de passe (a fin de voir comment il est crypté) ainsi que le _remember_me (checkbox), du coup cela va me prendre un peu de temps

Bon ça c'est fait !

La checkbox _remember_me a la valeur on quand elle est checked

Le mot de passe n'est pas plus crypté que par le protocole https

Rechercher des sujets similaires à "impossible extraire certaines donnees"