Impossible d'extraire certaines données

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Avatar du membre
Steelson
Fanatique d'Excel
Fanatique d'Excel
Messages : 14'030
Appréciations reçues : 830
Inscrit le : 13 octobre 2014
Version d'Excel : 2013 FR
Téléchargements : Mes applications

Message par Steelson » 30 décembre 2018, 14:03

En fait la page principale est https://www.airlines-manager.com et elle renvoie une fois logué vers https://www.airlines-manager.com/login_check qui renverra ensuite vers https://www.airlines-manager.com/home si c'est ok

Donc voici la procédure qui devrait te donner les informations par une identification directe sur le site
Sub RELEVER()
Dim texte As String

'login
    'texte = [form_login].Text
    texte = HtmlGet(Cells(1, 2).Value)
    Cells(7, 2) = HiddenInput(texte)

'interro
    'texte = [extrait_web].Text
    texte = HtmlPost(Cells(2, 2).Value, Cells(8, 2).Value)
    For i = 11 To 14
        Cells(i, "G") = ChercheChaine(QuadriSplit(texte, Cells(i, "B"), Cells(i, "C"), Cells(i, "D"), Cells(i, "E")), Cells(i, "F"))
    Next

End Sub

Function HtmlGet(URL As String) As String
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", URL, False
        .Send
        HtmlGet = .responseText
    End With
End Function

Function HtmlPost(URL As String, param As String) As String
    With CreateObject("MSXML2.XMLHTTP")
        .Open "POST", URL, False
        .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
        .Send param
        HtmlPost = .responseText
    End With
End Function

Function DoubleSplit(texte As String, debut As String, fin As String)
    DoubleSplit = Split(Split(texte, debut)(1), fin)(0)
End Function

Function QuadriSplit(texte As String, debut1 As String, fin1 As String, debut2 As String, fin2 As String)
    QuadriSplit = Split(Split(texte, debut1)(1), fin1)(0)
    QuadriSplit = Split(Split(QuadriSplit, debut2)(1), fin2)(0)
End Function

Function ChercheChaine(chaine, pattern)
  Set obj = CreateObject("vbscript.regexp")
  obj.pattern = pattern
  Set a = obj.Execute(chaine)
  If a.Count > 0 Then ChercheChaine = a(0) Else ChercheChaine = ""
End Function

Function HiddenInput(texte As String) ' parametres POST
Dim entrees() As String, noms, valeurs, i, chaine
    chaine = ""
    avant = "<input type=""hidden"""
    apres = ">"
    entrees = Split(texte, avant)
    For i = 1 To UBound(entrees) ' le 0 est avant le début, donc ne pas tenir compte !
        noms = DoubleSplit(entrees(i), "name=""", """")
        valeurs = DoubleSplit(entrees(i), "value=""", """")
        chaine = chaine & "&" & noms & "=" & valeurs
    Next
    HiddenInput = chaine
End Function
get puis post avec login.mazneoo.xlsm
(22.66 Kio) Téléchargé 3 fois
mazneoo a écrit :
30 décembre 2018, 09:44
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
Aïe aïe aïe aïe ! non pas ça !! ah non je ne suis pas au top !
Impossible de savoir comment facebook transmet les informations de connexion !! de plus (j'ai essayé) les identifiants via fb ne sont pas utilisables pour une connexion directe. Là on atteind les limites
Capture d’écran (338).png

O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸ O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸
PI = 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510 58209 74944 59230 78164 06286 20899 86280

( ͡• ͜ʖ ͡• )
Avatar du membre
Steelson
Fanatique d'Excel
Fanatique d'Excel
Messages : 14'030
Appréciations reçues : 830
Inscrit le : 13 octobre 2014
Version d'Excel : 2013 FR
Téléchargements : Mes applications

Message par Steelson » 30 décembre 2018, 14:08

mazneoo a écrit :
26 décembre 2018, 10:53
En gros lorsque j'extrait la donnée avec Power Query il m'extrait seulement ça :

Kind Name Text
Element HTML
Une question pour ne pas bâcher trop vite ... comment fais-tu avec PowerQuery sur ce site (et même s'il ne te donne que cela !). Comment es-tu identifié ?

O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸ O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸
PI = 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510 58209 74944 59230 78164 06286 20899 86280

( ͡• ͜ʖ ͡• )
m
mazneoo
Membre habitué
Membre habitué
Messages : 59
Inscrit le : 18 mai 2015
Version d'Excel : 2010

Message par mazneoo » 30 décembre 2018, 16:08

Quand je vais sur Excel

Données -> A partir du web -> je copie colle le lien -> il ouvre une fenêtre ou j'ai 2 onglets "Affichage table" et "Affichage web"

Dans table j'ai ce que je t'ai copié collé et dans web la page.

Sauf que pour me connecter j'ai utilisé une vielle extraction que j'avais sur un ancien fichier, qui date d'avant Excel 2016 qui n'avait pas Power Query.

Du coup j'imagine qu'Excel a gardé en mémoire mes cookies.
Je te joins l'ancien fichier si tu veux sur l'onglet DataPrixBillet tu auras la connexion d'active
Air_SFO-2016 2.xlsm
(981.4 Kio) Téléchargé 2 fois
Avatar du membre
Steelson
Fanatique d'Excel
Fanatique d'Excel
Messages : 14'030
Appréciations reçues : 830
Inscrit le : 13 octobre 2014
Version d'Excel : 2013 FR
Téléchargements : Mes applications

Message par Steelson » 31 décembre 2018, 05:46

Le fichier m'indique une erreur sur
Sheets("ROI").Activate
car la feuille ROI n'existe pas.

Je ne pense pas que ce soit important ... sauf si cette page contenait une macro permettant de s'identifier (mais même du reste je ne vois pas comment elle fonctionnerait !

Je reste donc perplexe, car rien ne permet de s'identifier dans Module1.

J'ai aussi compléter le minisite pour faire appel aux cookies. Quelque soit le navigateur utilisé pour "déposer" le cookie, excel ne permet pas la lecture d'une page qui le récupérerait, que ce soit via
PowerQuery,
QueryTables.Add,
CreateObject("MSXML2.XMLHTTP")
ou encore WebBrowser1.Navigate

sauf ...
La seule méthode est CreateObject("InternetExplorer.Application") à partir d'excel.

O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸ O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸
PI = 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510 58209 74944 59230 78164 06286 20899 86280

( ͡• ͜ʖ ͡• )
Avatar du membre
Steelson
Fanatique d'Excel
Fanatique d'Excel
Messages : 14'030
Appréciations reçues : 830
Inscrit le : 13 octobre 2014
Version d'Excel : 2013 FR
Téléchargements : Mes applications

Message par Steelson » 31 décembre 2018, 05:58

Steelson a écrit :
31 décembre 2018, 05:46
La seule méthode est CreateObject("InternetExplorer.Application") à partir d'excel.
Donc si la connexion reste active via Internet Explorer, tu peux récupérer la page affichée comme ceci :
- l'URL est indiquée dans Sheets("Feuil1").Range("A1").Value
- les informations d'afficheront dans Sheets("Feuil2")
Sub Demo()

    Sheets("Feuil2").Select

    With CreateObject("InternetExplorer.Application")
        .Visible = True
        .Navigate Sheets("Feuil1").Range("A1").Value
        Do Until .ReadyState = 4 And .Busy = False:  DoEvents:  Loop
        With .Document
            Do: Loop Until .ReadyState = "complete"
            Debug.Print "ok"
        End With
        SendKeys "^a"
        SendKeys "^c"
        Application.Wait Now + TimeValue("0:00:01")
        .Quit
    End With
    Sheets("Feuil2").Paste
    
End Sub

O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸ O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸
PI = 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510 58209 74944 59230 78164 06286 20899 86280

( ͡• ͜ʖ ͡• )
m
mazneoo
Membre habitué
Membre habitué
Messages : 59
Inscrit le : 18 mai 2015
Version d'Excel : 2010

Message par mazneoo » 31 décembre 2018, 10:42

Je te remercie Steelson.

En fait, tu n'avais pas besoin de lancer la macro en te mettant sur la cellule A1 tu faisais clique droit, actualisé et ça te mettait à jour l'extraction.

Mais si tu n'as pas le cookie dans ton PC en effet il doit falloir se connecter au moins une fois, mais avec le navigateur intégré dans Excel tu peux le faire très facilement puisque tu arrives sur la page de connexion si cookie non actif, tu mets tes logs et hop c'est ok.

En version VBA c'est le code ci-dessous :
With ActiveSheet.QueryTables.Add(Connection:= _
        "URL;https://www.airlines-manager.com/aircraft/show/23651824" _
        , Destination:=Range("$A$1"))
        .Name = "DataCoutRevenuAux"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlOverwriteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .WebSelectionType = xlEntirePage
        .WebFormatting = xlWebFormattingNone
        .WebPreFormattedTextToColumns = True
        .WebConsecutiveDelimitersAsOne = True
        .WebSingleBlockTextImport = False
        .WebDisableDateRecognition = False
        .WebDisableRedirections = False
        .Refresh BackgroundQuery:=False
    End With

Sauf que j'ai une mise en forme toute moche et pas super fonctionnelle que je suis obligé de retraiter pour que ça me fasse des datas exploitables.

Mais bon tant pis ça fera l'affaire, j'espère juste que cette méthode ne va pas disparaitre vu que c'est en lien avec IE et probablement qu'un jour MS le supprimera...

Merci pour le code qui extrait une page, en l'état je m'en servirai pas pour le besoin d'extraction de mes avions, mais je vais pouvoir récupérer d'autres infos avec les liens HTML qui m'indique le numéro incrémenté à chaque fois qu'un joueur achète un avion :)

En tout cas merci pour ton aide.

Je te souhaite un bon réveillon !
Avatar du membre
Steelson
Fanatique d'Excel
Fanatique d'Excel
Messages : 14'030
Appréciations reçues : 830
Inscrit le : 13 octobre 2014
Version d'Excel : 2013 FR
Téléchargements : Mes applications

Message par Steelson » 31 décembre 2018, 11:07

mazneoo a écrit :
31 décembre 2018, 10:42
En fait, tu n'avais pas besoin de lancer la macro en te mettant sur la cellule A1 tu faisais clique droit, actualisé et ça te mettait à jour l'extraction.
merci, j'ai au moins appris une chose !
mazneoo a écrit :
31 décembre 2018, 10:42
Mais si tu n'as pas le cookie dans ton PC en effet il doit falloir se connecter au moins une fois, mais avec le navigateur intégré dans Excel tu peux le faire très facilement puisque tu arrives sur la page de connexion si cookie non actif, tu mets tes logs et hop c'est ok.
Je reste perplexe car sur mon minisite il ne tient pas compte du cookie ... je vais continuer mes investigations !
Est-ce que cela veut dire qu'une fois logué via fb tu as accès aux informations ?
mazneoo a écrit :
31 décembre 2018, 10:42
En tout cas merci pour ton aide.
de rien, je ne pense pas avoir relevé le défi à 100% mais si cela a fait avancer le schmilblick
de mon côté cela m'a permis de progresser
mazneoo a écrit :
31 décembre 2018, 10:42
Je te souhaite un bon réveillon !
idem, pas d'excès

O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸ O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸
PI = 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510 58209 74944 59230 78164 06286 20899 86280

( ͡• ͜ʖ ͡• )
m
mazneoo
Membre habitué
Membre habitué
Messages : 59
Inscrit le : 18 mai 2015
Version d'Excel : 2010

Message par mazneoo » 31 décembre 2018, 11:46

Non mais je ne me log pas via FB, mais en connexion normale avec un compte via le site, juste avec mon @mail et mon mdp
Avatar du membre
Steelson
Fanatique d'Excel
Fanatique d'Excel
Messages : 14'030
Appréciations reçues : 830
Inscrit le : 13 octobre 2014
Version d'Excel : 2013 FR
Téléchargements : Mes applications

Message par Steelson » 31 décembre 2018, 12:14

donc ceci doit fonctionner alors viewtopic.php?p=720209#p720209 moyennant peut-être quelques réglages !

O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸ O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸
PI = 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510 58209 74944 59230 78164 06286 20899 86280

( ͡• ͜ʖ ͡• )
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message