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

C++Builder Discussion :

Recuperer source page web


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 103
    Par défaut Recuperer source page web
    bonjour
    je n'arrive pas a faire fonctionner le code décrit dans la faq pour récupérer la source d'un page web.
    je souhaite l'affichez dans un doc pour voir ce qu'il recupere mais mon doc reste vide.
    avez vous une idée de mon erreur? merci

    mon code :

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    // fonction non modifiée de la faq
    AnsiString __fastcall GetSource (TCppWebBrowser * browser)
    {
       IHTMLDocument3 *html = NULL;
       IHTMLElement *element = NULL;
       BSTR string = L"";
     
       try
       {
          if (browser->Document != NULL)
          {
             OleCheck(browser->Document->QueryInterface(IID_IHTMLDocument3,(LPVOID*)&html));
             OleCheck(html->get_documentElement(&element));
             OleCheck(element->get_outerHTML(&string));
          }
       }
       catch (EOleSysError &eOSE)
       {
          if (element != NULL)
          {
             element->Release();
          }
          if (html != NULL)
          {
             html->Release();
          }
          throw eOSE;
       }
       return (AnsiString) string;
    }
     
    // un bouton pour la tester
     
    void __fastcall TForm3::Button7Click(TObject *Sender)
    {
    GetSource (Form2 -> CppWebBrowser1);
    }
     
    // affichage sous word
     
    void __fastcall TForm3::Button2Click(TObject *Sender)
    {
     
    WideString source;
    //txt = VarToStr(aContenuHTML);
    source = string.c_str();
     
        Variant vFileName, vReadOnly, vWDocuments, vWDocument;
        vFileName = "c:\\test.doc";
        Variant vMSWord;
    try
            {
     
        vMSWord = Variant::CreateObject("Word.Application");
            }
    catch(...)
            {
        vMSWord = Variant::CreateObject("Word.Application");
            }
        vMSWord.OlePropertySet("Visible", true);
        vReadOnly = false; // lecture seule
     
        vWDocuments = vMSWord.OlePropertyGet("Documents");
        vWDocument = vWDocuments.OleFunction("Open", vFileName,vReadOnly);
        vMSWord.OlePropertyGet("Selection").OleProcedure("TypeText",source);
    }

  2. #2
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    Merci de mieux lire la FAQ avant de poster
    l'article mentionné est parfaitement fonctionnel, mais il faut parfois le lire dans son entier
    cdlt
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  3. #3
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Salut manworms2
    DjmSoftware a raison il faut lire correctement les exemples fournis, et prendre le temps de reflechir, les codes fournis demandent toujours a etre adaptes
    Sur la Form un TButton pour ouvrir la page Web et un CppWebBrowser pour l'affichage, un TButton pour copier le CppWebBrowser dans word
    le .cpp
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include "Unit1.h"
    #include <mshtml.h>
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma link "SHDocVw_OCX"
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    TVariant vFlags = {0}, vTargetFrameName={0}, vPostData={0}, vHeaders={0};
    CppWebBrowser1->Navigate((TVariant)"<a href="http://www.site.com/page.html" target="_blank">http://www.site.com/page.html</a>", &vFlags, &vTargetFrameName, &vPostData, &vHeaders);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    AnsiString aContenuText = "";
    AnsiString aContenuHTML = "";
    Variant vDocument = CppWebBrowser1->ControlInterface->Document;
    if (((IDispatch *)vDocument) != NULL)
    {
       Variant vBody = vDocument.OlePropertyGet("Body");
       Variant vContenuText = vBody.OlePropertyGet("InnerText");
       Variant vContenuHTML = vBody.OlePropertyGet("InnerHTML");
       aContenuText = vContenuText;
       aContenuHTML = vContenuHTML;
    }
        Variant vFileName, vReadOnly, vWDocuments, vWDocument;
        Variant vMSWord;
    try
            {
        vMSWord = Variant::CreateObject("Word.Application");
            }
    catch(...)
            {
        vMSWord = Variant::CreateObject("Word.Application");
            }
        vMSWord.OlePropertySet("Visible", true);
        vReadOnly = false; // lecture seule
        vWDocuments = vMSWord.OlePropertyGet("Documents");
     vWDocument = vWDocuments.OleFunction("Add");
        vMSWord.OlePropertyGet("Selection").OleProcedure("TypeText",WideString(aContenuText));
    }
    //---------------------------------------------------------------------------

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 103
    Par défaut
    merci pour vos réponses
    blondelle j'ai essayer ton code mais il ne récupère pas la source, seulement le texte de la page.

    j'ai l'erreur lors de la compilation:
    "unresolved external Tform3 Get source referenced from UNIT3.OBJ"

    merci

  5. #5
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Dans la chaine de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    vMSWord.OlePropertyGet("Selection").OleProcedure("TypeText",WideString(aContenuText));
    remplacer " aContenuText " par " aContenuHTML " pour recuperer le code HTML
    pour l'erreur soit tu a cree une Form non defini dans les autres Forms ou tu a enleve de ton code une Form sans effacer completement ses references dans les autres Forms

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 103
    Par défaut
    merci pour ta réponse , seulement la fonction que tu mentionne ne récupère que 1/3 du code source de la page.

  7. #7
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Etonnant mais bon, essaye avec le code que tu avait propose
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
     
     
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include "Unit1.h"
    #include <mshtml.h>
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma link "SHDocVw_OCX"
    #pragma link "SHDocVw_OCX"
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    TVariant vFlags = {0}, vTargetFrameName={0}, vPostData={0}, vHeaders={0};
    CppWebBrowser1->Navigate((TVariant)"<a href="http://www.site.com/page.html" target="_blank">http://www.site.com/page.html</a>", &vFlags, &vTargetFrameName, &vPostData, &vHeaders);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    AnsiString aContenuText = "";
    AnsiString aContenuHTML = "";
    Variant vDocument = CppWebBrowser1->ControlInterface->Document;
    if (((IDispatch *)vDocument) != NULL)
    {
       Variant vBody = vDocument.OlePropertyGet("Body");
       Variant vContenuText = vBody.OlePropertyGet("InnerText");
       Variant vContenuHTML = vBody.OlePropertyGet("InnerHTML");
       aContenuText = vContenuText;
       aContenuHTML = vContenuHTML;
    }
        Variant vFileName, vReadOnly, vWDocuments, vWDocument;
        Variant vMSWord;
    try
            {
        vMSWord = Variant::CreateObject("Word.Application");
            }
    catch(...)
            {
        vMSWord = Variant::CreateObject("Word.Application");
            }
        vMSWord.OlePropertySet("Visible", true);
        vReadOnly = false; // lecture seule
        vWDocuments = vMSWord.OlePropertyGet("Documents");
     vWDocument = vWDocuments.OleFunction("Add");
        vMSWord.OlePropertyGet("Selection").OleProcedure("TypeText",WideString(aContenuHTML));
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
       IHTMLDocument3 *html = NULL;
       IHTMLElement *element = NULL;
       BSTR string = L"";
       try
       {
          if (CppWebBrowser1->Document != NULL)
          {
             OleCheck(CppWebBrowser1->Document->QueryInterface(IID_IHTMLDocument3,(LPVOID*)&html));
             OleCheck(html->get_documentElement(&element));
             OleCheck(element->get_outerHTML(&string));
          }
       }
       catch (EOleSysError &eOSE)
       {
          if (element != NULL)
          {
             element->Release();
          }
          if (html != NULL)
          {
             html->Release();
          }
          throw eOSE;
       }
    //   return (AnsiString) string;
        Variant vFileName, vReadOnly, vWDocuments, vWDocument;
        Variant vMSWord;
    try
            {
        vMSWord = Variant::CreateObject("Word.Application");
            }
    catch(...)
            {
        vMSWord = Variant::CreateObject("Word.Application");
            }
        vMSWord.OlePropertySet("Visible", true);
        vReadOnly = false; // lecture seule
        vWDocuments = vMSWord.OlePropertyGet("Documents");
     vWDocument = vWDocuments.OleFunction("Add");
        vMSWord.OlePropertyGet("Selection").OleProcedure("TypeText",WideString(string));
    }
    //---------------------------------------------------------------------------
    J'ai juste ajoute un TButton

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 103
    Par défaut
    merci blondelle mais j'ai toujours le même problème , il ne récupère que environ 1/3 de la page , il est vrai que la source est importante , 1/3 prend déjà 9 pages word.
    dans un premier temps , je souhaiterais récupérer un array nommé "var TabVersion" dans la source. j'ai cherché mais je ne sais pas comment utiliser OlePropertyGet .

    merci

  9. #9
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Peut etre en passant par un TMemo, plutot quand passant par uune string
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Memo1->Lines->Add(vContenuText);
    ou
    Memo1->Lines->Add(vContenuHTML);
    ou
    Memo1->Lines->Add(string);
    pour le TMemo mettre sa propriete " ScrollBars " a " ssVertical "

  10. #10
    Membre très actif Avatar de Argol_Medusa
    Homme Profil pro
    Ingénieur Radiofréquences
    Inscrit en
    Août 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Radiofréquences
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 208
    Par défaut
    Citation Envoyé par blondelle Voir le message
    Peut etre en passant par un TMemo, plutot quand passant par uune string
    Heu je dis ça de tête mais il n'y a pas une limitation en lignes dans un TMemo ?
    Du genre 65536 lignes ?

    Vérifiez ce point, c'était peut-etre sur le builder 6 seulement.

    Vérifiez aussi le aContenuHTML, mais ça peut fort bien expliquer cette limite rencontrée dans la lecture de la page web.


    Sinon autre possibilité : faire directement un download du fichier, puis le traiter en suite sans passer par le composant CppWebBrowser, c'est encore plus simple.

  11. #11
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    Heu je dis ça de tête mais il n'y a pas une limitation en lignes dans un TMemo ?
    Du genre 65536 lignes ?
    cette limitation n'a plus lieu depuis NT4
    cdlt
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

Discussions similaires

  1. winsock source page web différente
    Par PoZZyX dans le forum Windows
    Réponses: 5
    Dernier message: 24/05/2007, 12h05
  2. recuperer une page web
    Par openWorld dans le forum Langage
    Réponses: 5
    Dernier message: 19/05/2007, 11h11
  3. recuperer une page web
    Par Liiscar dans le forum Documents
    Réponses: 1
    Dernier message: 10/01/2007, 18h29
  4. Recuperer une page Web sous Windows
    Par tmanta7 dans le forum Réseau
    Réponses: 7
    Dernier message: 22/05/2006, 23h21

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