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++/CLI Discussion :

Récupérer le source d'une page web


Sujet :

C++/CLI

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2002
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 38
    Par défaut Récupérer le source d'une page web
    Bonjour,
    J'essaie de récupérer le source d'une page web, avec un webbrowser (Visual Studio 2013).

    J'ai donc un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String^ contenu = this->webBrowser1->DocumentText;
    Mais ça ne récupère qu'un morceau de ma page, et au debug, je ne peux visualiser qu'en lecture .txt

    Les autres modes me disent que les balises ne sont pas fermées, ou refusent de lire quoi que ce soit.

    Je suppose qu'il faudrait peut-être un tableau de String^, plutôt qu'un String^ ?

    Merci pour votre aide.
    Le C++/CLI rajoute une couche...

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Je ne saurais pas trop dire, personnellement je passerais plutôt par une HttpWebRequest que par un WebBrowser... À moins qu'il y ait des histoires de Javascript modifiant le DOM. Auquel cas, cette question sur SO pourrait t'aider.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre averti
    Inscrit en
    Juin 2002
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 38
    Par défaut
    Je me suis mal exprimé au 1é post : ma page test s'affiche correctement dans le webBrowser.
    En revanche, je ne peux récupérer que environ le quart du code source de la page, dans une String^.

    A l'exec, le programme me dit que "la valeur de la propriété "$" est null ou non définie, pas un objet Function", 2 fois à la même ligne.

    Code: 0

    Puis le prog me dit que "l'objet ne gère pas la propriété ou la méthode "reduce".

    Toujours Code: 0

    Dans le String^, j'aurai récupéré le source de la page jusqu'à la ligne de l'erreur propriété "$" est null ou non définie.


    J'ai essayé une bidouille avec un httpWebRequest.

    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
     
     
    			String^ PATH = "file:///C:/C++/test/ressources/page_test.htm";
    			WebRequest^ Request = WebRequest::Create(PATH);
    			HttpWebResponse^ Response = dynamic_cast<HttpWebResponse^>(Request->GetResponse());
     
    			Request->Credentials = CredentialCache::DefaultCredentials;
    			Response = dynamic_cast<HttpWebResponse^>(Request->GetResponse());
    			Stream^ Stream1 = Response->GetResponseStream();
    			StreamReader^ SReader = gcnew StreamReader(Stream1);
    			String^ Responsestring = SReader->ReadToEnd();
     
    			SReader->Close();
    			Stream1->Close();
    			Response->Close();

    Ce code génère à l'exec l'erreur "An unhandled exception of type 'System.NullReferenceException' occured in Project1.exe

    Additionnal information: La référence d'objet n'est pas définie à une instance d'un objet.

    Je suis en train d'essayer d'installer libcurl, mais c'est tout sauf simple, ce machin, pour celui qui bidouille une fois tous les 6 mois ...

    Merci d'avance pour tout éclairage.
    C'est quand même bizarre que le webBrowser puisse afficher la page, mais soit infoutu de récupérer son code source !!!

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 487
    Par défaut
    Je ne comprends pas votre démarche.

    Si c'est pour comprendre pourquoi il y a des erreurs JavaScript, bin, faut déboguer le JavaScript, pas faire une usine à gaz pour récupérer le code de la page Web.

    Des outils dans le navigateur (F12 pour IE) ou à part comme Fiddler2 permettent de facilement voir le contenu des fichiers chargées par le navigateur, qui sont largement plus nombreux que la page web elle-même.

    Ce code génère à l'exec l'erreur "An unhandled exception of type 'System.NullReferenceException' occured in Project1.exe
    Bin, pourquoi n'utilisez-vous pas tout simplement le débogueur pour savoir d'où ça vient ?
    Mais, bon, je pense que ce code est totalement inutile si vous prenez les outils adéquate, je pense.

    P.S.: votre code est très étrange (Webrequest sur un "file:" ?,2 GetResponse ???) et peu sûr (la gestion des "Continue" status 100 de HTTP ?)

    Je suis en train d'essayer d'installer libcurl, mais c'est tout sauf simple, ce machin, pour celui qui bidouille une fois tous les 6 mois ...
    Si vous pouvez basculer sur une code libcurl, autant utiliser des outils dédiées et pas réinventer la roue (et un client HTTP, c'est une putain de roue cosmique).

    C'est quand même bizarre que le webBrowser puisse afficher la page, mais soit infoutu de récupérer son code source !!!
    Le WebBrowser, c'est juste un wrapper autour d'un composant COM "Navigateur" et il faut bien plus qu'un simple fichier "htm" pour afficher une page de nos jours (les .css, les IFRAME, les .scripts, <IMG>, les <OBJECT>, etc...)
    Le chargement d'une "page web", c'est très souvent plusieurs dizaines de fichiers téléchargés, très souvent avec des pages qui s'incluent dans d'autres pages qui s'incluent dans d'autres etc...
    Une page qui contient des IFRAME qui contient des scripts => le code n'est pas dans le "code source" de la page mais dans le code source d'une page script "incluse" d'une page HTML (l'IFRAME) qui est "incluse" dans la page initiale.

    Donc, vous prenez pas la tête à refaire une roue et utilisez des outils adaptés.

  5. #5
    Membre averti
    Inscrit en
    Juin 2002
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 38
    Par défaut
    Merci d'avoir pris le temps de me répondre.

    Citation Envoyé par bacelar Voir le message
    Je ne comprends pas votre démarche.

    Si c'est pour comprendre pourquoi il y a des erreurs JavaScript, bin, faut déboguer le JavaScript, pas faire une usine à gaz pour récupérer le code de la page Web.
    Les erreurs javascript de la page, ça m'est égal. C'est un extrait du texte de la page qui m'intéresse, sachant que des pages comme ça, il y en aura 200 ou 300 à charger et à exploiter (donc, CTRL+U de firefox, on oublie).

    Citation Envoyé par bacelar Voir le message
    votre code est très étrange (Webrequest sur un "file:" ?,2 GetResponse ???) et peu sûr (la gestion des "Continue" status 100 de HTTP ?)
    C'est un code que j'ai récupéré sur un forum (stackoverflow, ou similaire), donné par google + C++ + httpwebrequest + get page
    Je ne me suis pas posé de questions.

    Citation Envoyé par bacelar Voir le message
    Le chargement d'une "page web", c'est très souvent plusieurs dizaines de fichiers téléchargés, très souvent avec des pages qui s'incluent dans d'autres pages qui s'incluent dans d'autres etc...
    Effectivement, il manque pleins d'images et autres jolis boutons, sur la page chargée dans le webBrowser, mais j'ai l'essentiel dans le webB : le texte de la page.

    Or, ce texte, il en manque les 3/4dans ma String^.

    L'idée de récupérer libcurl, pareil : google.

    Je me dis naïvement que si le texte qui m'intéresse s'affiche dans le webBrowser, c'est que la page source html est déchiffrée au moins correctement jusqu'à ce stade.

    Je suis d'accord, pour l'invention de la roue et de l'eau chaude.
    Les outils dédiés, j'ai probablement pas fait la bonne recherche avec google, mais je suis preneur d'une piste ...

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Ton problème, c'est qu'une partie du contenu de la page peut avoir en fait été généré côté client par le javascript. Et un code qui ne récupère que la source HTML initiale n'aura pas ça.

    Edit: D'ailleurs, une bonne expérience peut être d'ouvrir ledit site avec le javascript désactivé. Si tu as firefox, l'extension QuickJava permet d'activer/désactiver javascript (et pas mal d'autres choses) en un clic.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. [iOS] Récupérer le code source d'une page web
    Par aliasc dans le forum Objective-C
    Réponses: 6
    Dernier message: 12/01/2011, 12h03
  2. Récupérer le code source d'une page web
    Par hassine dans le forum C#
    Réponses: 6
    Dernier message: 08/11/2010, 11h46
  3. Récupérer la source d'une page web
    Par Pooch dans le forum C#
    Réponses: 5
    Dernier message: 13/08/2010, 21h52
  4. Réponses: 0
    Dernier message: 09/01/2010, 23h07
  5. Récupérer le code source d'une page web
    Par glRaZ dans le forum C++Builder
    Réponses: 4
    Dernier message: 08/12/2004, 09h16

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