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

Web & réseau Delphi Discussion :

Récupérer le contenu d'une page web générée par javascript


Sujet :

Web & réseau Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de Higgins
    Inscrit en
    Juillet 2002
    Messages
    539
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 539
    Par défaut Récupérer le contenu d'une page web générée par javascript
    Bonjour,
    J'échange des données avec un fournisseur dans un process semi-automatique. En cas d'anomalies, je reçois par mail une url vers une page qui détaille les problèmes rencontrés.
    Le processus est un peu fastidieux: il faut s'identifier, rechercher dans la liste la transaction en erreur et enfin cliquer dessus pour visualiser le détail et je voudrais automatiser la récupération des infos par script.
    En utilisant le composant TRestRequest, j'arrive à transmettre mes identifiants, récupérer les cookies de session puis accéder à la page qui liste les transactions.
    Le problème est que les données sont générées par du javascript et ne figurent pas dans le corps de la page (restrequest.response.content)

    Sur le site web, lorsque je fais afficher le code source de la page, j'ai juste le nom des scripts
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <html lang="en">
    <head>
      <meta charset="utf-8">
      <title>Ma page</title>
      <base href="/pageliste/">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <link rel="icon" type="image/x-icon" href="favicon.png">
    <link rel="stylesheet" href="styles.css"></head>
    <body>
      <app-root></app-root>
    <script src="scriptt1.js" type="module"></script><script src="script2.js" type="module"></script><script src="script3.js" defer></script><script src="script4.js" type="module"></script><script src="script5.js" type="module"></script></body>
    </html>
    Je retrouve la même chose dans restrequest.response.content

    Pour avoir un résultat "interprété", je pense qu'il faudrait utiliser un TWebBrowser mais je ne vois pas comment lui transmettre les données d'identifications et le cookie de session associé
    7 fois à terre, 8 fois debout

  2. #2
    Membre éclairé
    Avatar de Higgins
    Inscrit en
    Juillet 2002
    Messages
    539
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 539
    Par défaut
    J'ai trouvé comment renseigner le formulaire d'authentification dans TWebBrowser mais le résultat final est le même :
    (webbrowser1.Document as IHTMLDocument2).body.innerHTML me renvoie la même chose que le composant httprequest

    Est-ce que quelqu'un saurait comment récupérer le code HTML après "render"?
    P.S:
    (webbrowser1.Document as IHTMLDocument2).body.outerHTML renvoie la même chose
    7 fois à terre, 8 fois debout

  3. #3
    Membre expérimenté
    Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 468
    Par défaut
    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
    uses
      SHDocVw, MSHTML;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      WebBrowser1.Navigate('https://exemple.com/pageJS');
    end;
     
    procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant);
    var
      Doc: IHTMLDocument2;
      HTML: string;
    begin
      Doc := WebBrowser1.Document as IHTMLDocument2;
      HTML := Doc.documentElement.outerHTML;  // ou .body.innerHTML
      Memo1.Text := HTML;
    end;
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.
    Ce n’est pas un bogue - c’est une fonctionnalité non documentée.

  4. #4
    Membre éclairé
    Avatar de Higgins
    Inscrit en
    Juillet 2002
    Messages
    539
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 539
    Par défaut
    Comme indiqué précédemment, outerhtml me renvoie exactement la même chose que innerhtml à savoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <html lang="en">
    <head>
      <meta charset="utf-8">
      <title>Ma page</title>
      <base href="/pageliste/">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <link rel="icon" type="image/x-icon" href="favicon.png">
    <link rel="stylesheet" href="styles.css"></head>
    <body>
      <app-root></app-root>
    <script src="scriptt1.js" type="module"></script><script src="script2.js" type="module"></script><script src="script3.js" defer></script><script src="script4.js" type="module"></script><script src="script5.js" type="module"></script></body>
    </html>
    Ce que je cherche à avoir, c'est la "grille" de données affichée après que les scripts présents dans le body ont été exécutés. Je pense que le problème est lié à ma version de TWebBrowser (Delphi 10.4.2) car lorsque j'active la compatibilité IE11 dans la base de registre, j'ai des erreurs javascript à l'ouverture de la page. Je vais attendre l'installation d'Athens pour voir le comportement avec TEdgeBrowser
    7 fois à terre, 8 fois debout

  5. #5
    Membre éclairé
    Avatar de Higgins
    Inscrit en
    Juillet 2002
    Messages
    539
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 539
    Par défaut
    J'essayais d'avancer en parallèle avec python.
    La solution est arrivée de ce côté-là, je mets le lien vers la discussion
    https://www.developpez.net/forums/d2...ee-javascript/
    7 fois à terre, 8 fois debout

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/07/2025, 17h23
  2. Lire le contenue d'une page web généré par Ajax
    Par icb3a dans le forum Web & réseau
    Réponses: 7
    Dernier message: 26/07/2010, 23h46
  3. [JSP][WEB] recuperer le contenu d'une page web
    Par ypikahe dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 14/03/2008, 10h10
  4. copier le contenu d'une page web dans un fichier texte
    Par wassila dans le forum C++Builder
    Réponses: 30
    Dernier message: 28/08/2005, 22h27
  5. Réponses: 2
    Dernier message: 16/07/2004, 09h30

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