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

Lazarus Pascal Discussion :

Récupération de données sur une page Web [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 89
    Par défaut Récupération de données sur une page Web
    Bonjour,

    J'aimerai récupérer les données d'une page web (un tableau en l’occurrence) pour les mettre dans un fichier.

    Le site est le suivant : https://www.enex.it/en/calculator/

    J'aimerai pouvoir importer les données dans les trois champs concernés et récupérer les données du tableau du dessous... Je ne sais pas si utiliser Lazarus est la meilleure solution, j'ai vu qu'il existait un composant TWebBrowser mais je ne sais absolument pas comment ça marche et si ça me permettrait de récupérer ce tableau...

    Nom : donnees.png
Affichages : 1021
Taille : 28,6 Ko

    Merci à ceux qui ont déjà effectué un travail de ce style de partager leur expérience et conseils.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 138
    Par défaut
    Bonjour.

    J'ai souvent utilisé Lazarus pour développer un programme me permettant de récupérer des données sur un site web. La stratégie est la suivante :
    1. récupérer le code source
    2. l'analyser pour trouver les données souhaitées



    1ère étape : j'ai utilisé deux méthodes différentes suivant le cas : enregistrement de toute la page (avec clic droit) dans un fichier (c'est donc du texte) que je lis et traite ligne à ligne. Ou, si seulement une petite partie de la page concernée, sélection de la zone concernée puis copie, ensuite coller dans un listbox puis analyse de chaque ligne

    2ème étape : spécifique au site analysé suivant le code source, exemple avec votre site : la ligne contient-elle "Water OUT=" ? Si oui, la donnée que je recherche est comprise entre cette sous-chaîne et le premier caractère "C" qui suit

    Espérant avoir été clair.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 138
    Par défaut
    Comme je l'ai indiqué, l'analyse du code source dépend de la manière dont le site a été développé et est plus ou moins délicate, parfois impossible.

    J'ai jeté un coup d’œil à celui qui vous intéresse, cela semble difficile de trouver les données en raison de l’utilisation de jquery et ajax ...

    En revanche, une simple copie du tableau permet de récupérer les données (vous pouvez les coller dans le bloc-note pour le vérifier).

  4. #4
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 797
    Par défaut
    À chaque fois c'est la même chose (que ce soit le langage et les bibliothèques) : il faut trouver le pont (*) entre le langage/ plateforme (ici Pascal/ Lazarus) et JavaScript de la page

    Je ne connais pas Lazarus, mais en gros il faut :
    1) Afficher ta page dans un TWebBrowser. Mais si ta page est codée en jQuery/ ajax, cela peut coincer. Il faut voir la capacité de TWebBrowser et déjà se documenter s'il supporte HTML 5 et au moins CSS 2.0
    2) Et ensuite se documenter sur TWebBrowser, pour savoir s'il supporte JavaScript et comment les créateurs de ce composant ont codé le pont (*)

    Apparemment, How to call JavaScript functions in a TWebBrowser from Delphi (<- lien en anglais)
    • De Lazarus, tu peux surcharger l'évènement OnComplete TForm1.WebBrowser1DocumentComplete
    • De Lazarus, tu peux exécuter un script JavaScript HTMLWindow.execScript
    • De Lazarus, tu peux parser ta page comme en JavaScript (**)


    ** :
    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
    function GetElementIdValue(WebBrowser: TWebBrowser;
      TagName, TagId, TagAttrib: string):string;
    var
      Document: IHTMLDocument2;
      Body: IHTMLElement2;
      Tags: IHTMLElementCollection;
      Tag: IHTMLElement;
      I: Integer;
    begin
      Result:='';
      if not Supports(WebBrowser.Document, IHTMLDocument2, Document) then
        raise Exception.Create('Invalid HTML document');
      if not Supports(Document.body, IHTMLElement2, Body) then
        raise Exception.Create('Can''t find <body> element');
      Tags := Body.getElementsByTagName(UpperCase(TagName));
      for I := 0 to Pred(Tags.length) do begin
        Tag:=Tags.item(I, EmptyParam) as IHTMLElement;
        if Tag.id=TagId then Result := Tag.getAttribute(TagAttrib, 0);
      end;
    end;

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 496
    Par défaut
    salut

    ou alors faire une sorte de reverse engine et regarder le code source de la page

    on y trouve des chose fort interesant comme ceci

    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
     
    ...				
    	 		  var $TempWaterOUT		= jQuery("#TempWaterOUT").val();
    	 		  var $TempWaterIN		= jQuery("#TempWaterIN").val();
    	 		  var $TempAirColdSide	= jQuery("#TempAirColdSide").val();
    	 		  var $TempWaterINColdSide	= jQuery("#TempWaterINColdSide").val();
    			  var $CalcAir 			= jQuery('input[name=CalcAir]').is(':checked');
    			  var $CalcWater 		= jQuery('input[name=CalcWater]').is(':checked');
     
    			  var $data = "TempWaterOUT="+$TempWaterOUT+"&TempWaterIN="+$TempWaterIN+"&TempAirColdSide="+$TempAirColdSide+"&TempWaterINColdSide="+$TempWaterINColdSide+"&CalcAir="+$CalcAir+"&CalcWater="+$CalcWater;
     
    			  jQuery.ajax ({
    				  type: "POST",
    				  url:"/soap_enex",
    				  data: $data,
    				  dataType:"html",
    				  success: function(data){
    					jQuery('#responseContainer').html(data);
    					jQuery("#submit").prop('disabled', false);
    				  },
    		...
    	});
    et là au miracle il font du soap et il te donne en plus les paramètre a passer sont plutot cool les mec
    le plus simple serais donc de trouver les element pour faire du soap plutot que te prendre la tete a parser la page Html qui peut changer a tout moment
    mais si tu veut vraiment te prendre la tete il faut que tu cherche #responseContainer

  6. #6
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 797
    Par défaut
    Citation Envoyé par anapurna Voir le message
    le plus simple serais donc de trouver les element pour faire du soap plutot que te prendre la tete a parser la page Html qui peut changer a tout moment
    Ce n'est pas un peu lourd pour l'application d'avoir un navigateur (pour l'affichage) et un [mini-]serveur (pour intercepter la requête envoyée)

    En règle générale (et c'est ce que je dis ) on s'attend que les composants Web ont des ponts pour la communication application - page

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 253
    Par défaut
    hello,
    Citation Envoyé par Manusm Voir le message
    J'aimerai récupérer les données d'une page web (un tableau en l’occurrence) pour les mettre dans un fichier.
    J'aimerai pouvoir importer les données dans les trois champs concernés et récupérer les données du tableau du dessous... Je ne sais pas si utiliser Lazarus est la meilleure
    voici ce que je te propose grâce à Anapurna qui a trouvé où étaient récupérées les données dans la page.
    - On va utiliser FPHTTPClient.SimpleFormPost pour récupérer les données en imitant le Post que faisait la requête ajax :
    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
    implementation
    uses fphttpclient;
    {$R *.lfm}
    { TForm1 }   
    procedure TForm1.Bt_GoClick(Sender: TObject);
    var
      FPHTTPClient: TFPHTTPClient;
      SL: TStringList;
      Str: String;
    begin
      FPHTTPClient := TFPHTTPClient.Create(nil);
      try
        FPHTTPClient.AllowRedirect := True;
        SL := TStringList.Create;
        try
          SL.Add('TempWaterOUT=' + IntToStr(50));
          SL.Add('TempWaterIN=' + IntToStr(12));
          SL.Add('TempAirColdSide=' + intToStr(-5));
          SL.Add('TempWaterINColdSide=');
          SL.Add('CalcAir=' + 'true');
          SL.Add('CalcWater=' + 'false');
          try
            Str := FPHTTPClient.SimpleFormPost('https://www.enex.it/soap_enex', SL);
            HtmlViewer1.LoadFromString(WideString(str));
          except
            on E: exception do
              ShowMessage(E.Message);
          end;
        finally
          SL.Free;
        end;
      finally
        FPHTTPClient.Free;
      end;
    end;
    le THTMLViewer du paquet HTMLViewer n'est pas forcément nécessaire, c'est seulement pour visualiser le résultat qui est en HTML. Sinon il faut utiliser un parser Html pour extraire les données de la page HTML récupérée.
    voici le résultat :
    Nom : LazRecup Data.png
Affichages : 933
Taille : 16,2 Ko

    Ami calmant, J.P

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 89
    Par défaut
    Alors la merci beaucoup, c'est vraiment super sympa d'avoir mis le code vous ne savez pas à quel point vous m'enlevez une épine du pied !

    Merci beaucoup !

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

Discussions similaires

  1. Envoi de donnée sur une page web en post
    Par sleeg dans le forum C#
    Réponses: 1
    Dernier message: 04/07/2013, 22h30
  2. [PHP 5.3] Récupération d'information sur une page web avec identification.
    Par vindkald dans le forum Langage
    Réponses: 4
    Dernier message: 14/05/2011, 09h23
  3. récupération de données sur une page web
    Par tomkiki dans le forum Web & réseau
    Réponses: 2
    Dernier message: 26/10/2009, 09h38
  4. Afficher une image d'une base de données sur une page web
    Par tortuegenie dans le forum ASP.NET
    Réponses: 2
    Dernier message: 10/10/2008, 15h11
  5. Recupération de donnée sur une page web apès authentification
    Par Analfabete dans le forum Réseau/Web
    Réponses: 3
    Dernier message: 02/01/2007, 18h10

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