Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

ACCÉDER AU CONTENU HTML D'UNE PAGE COMPORTANT DES FRAMES !!! (BIS)


Information sur la source

Catégorie :Réseaux & Internet Source .NET ( DotNet ) Classé sous : html, page, frame Niveau : Expert Date de création : 24/05/2005 Vu : 11 328

Note :
10 / 10 - par 3 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note

Description

Toujours pour Visual Studio 2005 béta...

Suite au source laissé, qui comporte le même titre...

Cette fois, j'ai trouvé la solution 100% C# et sans utiliser un contrôle supplémentaire de type InetClass (Internet Transfer).
Seul le contrôle WebBrowser et le nom de la frame dont on souhaite récupérer le contenu sont nécessaires.

Cette solution utilise quand même la DLL COM mshtml.dll et non son pendant .NET.
Mais ça marche mieux...

Alors voici le code correspondant !

A bientôt.

 

Source

  • // Les using obligatoires pour le code
  • using mshtml;
  • using System;
  • using System.Windows.Forms;
  • // ...
  • // ... déclarations, classes ou tout autre code propres à votre application
  • // ...
  • // Méthode récupérant le document correspondant à une frame souhaitée.
  • // Paramètres : wb : Contrôle WebBrowser pour lequel on veut le contenu d'une des frames.
  • // nomFrame : nom de la frame dont on veut récupérer le contenu.
  • public IHTMLDocument2 recupererDocumentFrame(WebBrowser wb, string nomFrame)
  • {
  • // Transformer le document du WebBrowser en IHTMLDocument2
  • IHTMLDocument2 doc = (IHTMLDocument2)wb.Document.DomDocument;
  • if (doc != null)
  • {
  • IHTMLWindow2 windowFrame = (IHTMLWindow2)doc.frames;
  • if (windowFrame != null)
  • {
  • // Récupération de la collection de frames
  • IHTMLFramesCollection2 framescol;
  • framescol = windowFrame.frames;
  • if (framescol != null)
  • {
  • string strFrame = nomFrame;
  • object objName = (object)strFrame;
  • object obj;
  • obj = framescol.item(ref objName);
  • if (obj != null)
  • {
  • // Récupération et renvoi du document IHTMLDocument2 de la frame du nom souhaité
  • IHTMLWindow2 windowFmain = (IHTMLWindow2)obj;
  • IHTMLDocument2 docFmain = WindowFmain.document;
  • return docFmain;
  • }
  • }
  • }
  • }
  • return null;
  • }
  • // Méthode récupérant l'élément body d'une frame souhaitée
  • // Paramètres : wb : Contrôle WebBrowser pour lequel on veut le contenu d'une des frames.
  • // nomFrame : nom de la frame dont on veut récupérer le contenu.
  • public IHTMLElement recupererElementFrame(WebBrowser wb, string nomFrame)
  • {
  • // Récupération du document de la frame souhaité
  • IHTMLDocument2 doc = recupererDocumentFrame(wb, nomFrame);
  • if (doc != null)
  • // Retour du body du document de la frame
  • return doc.body;
  • return null;
  • }
  • // Méthode de récupération du contenu HTML d'une frame
  • public string GetHtml()
  • {
  • string strContenu = "";
  • // monWebBrowser : nom du contrôle WebBrowser pour lequel on souhaite le contenu d'une des frames
  • // nomFrame : nom de la frame pour laquelle on veut le contenu HTML (nom visible quand on affiche la source du code HTML dans le navigateur Internet)
  • IHTMLElement elem = recupererElementFrame(monWebBrowser, "nomFrame");
  • if( elem != null )
  • strContenu = elem.innerHTML;
  • return strContenu;
  • }
  • // ...
  • // ... suite des déclarations, classes ou tout autre code propres à votre application
  • // ...
// Les using obligatoires pour le code
using mshtml;
using System;
using System.Windows.Forms;

// ...
// ... déclarations, classes ou tout autre code propres à votre application
// ...

// Méthode récupérant le document correspondant à une frame souhaitée.
// Paramètres : wb : Contrôle WebBrowser pour lequel on veut le contenu d'une des frames.
//              nomFrame : nom de la frame dont on veut récupérer le contenu.
public IHTMLDocument2 recupererDocumentFrame(WebBrowser wb, string nomFrame)
{
  // Transformer le document du WebBrowser en IHTMLDocument2
  IHTMLDocument2 doc = (IHTMLDocument2)wb.Document.DomDocument;
  if (doc != null)
  {
    IHTMLWindow2 windowFrame = (IHTMLWindow2)doc.frames;
    if (windowFrame != null)
    {
      // Récupération de la collection de frames
      IHTMLFramesCollection2 framescol;
      framescol = windowFrame.frames;
      if (framescol != null)
      {
        string strFrame = nomFrame;
        object objName = (object)strFrame;
        object obj;
        obj = framescol.item(ref objName);
        if (obj != null)
        {
          // Récupération et renvoi du document IHTMLDocument2 de la frame du nom souhaité
          IHTMLWindow2 windowFmain = (IHTMLWindow2)obj;
          IHTMLDocument2 docFmain = WindowFmain.document;
          return docFmain;
        }
      }
    }
  }
  return null;

}

// Méthode récupérant l'élément body d'une frame souhaitée
// Paramètres : wb : Contrôle WebBrowser pour lequel on veut le contenu d'une des frames.
//              nomFrame : nom de la frame dont on veut récupérer le contenu.
public IHTMLElement recupererElementFrame(WebBrowser wb, string nomFrame)
{
  // Récupération du document de la frame souhaité
  IHTMLDocument2 doc = recupererDocumentFrame(wb, nomFrame);
  if (doc != null)
    // Retour du body du document de la frame
    return doc.body;
  return null;
}

// Méthode de récupération du contenu HTML d'une frame
public string GetHtml()
{

  string strContenu = "";

  // monWebBrowser : nom du contrôle WebBrowser pour lequel on souhaite le contenu d'une des frames
  // nomFrame : nom de la frame pour laquelle on veut le contenu HTML (nom visible quand on affiche la source du code HTML dans le navigateur Internet)
  IHTMLElement elem = recupererElementFrame(monWebBrowser, "nomFrame");

  if( elem != null )
     strContenu = elem.innerHTML;

  return strContenu;

}

// ...
// ... suite des déclarations, classes ou tout autre code propres à votre application
// ...

Commentaires et avis

signaler à un administrateur
Commentaire de zobyone le 12/01/2007 21:30:23

Ce code fonctionne parfaitement. Il est tres utile et claire. En revanche, je me demande comment faire pour acceder a une Iframe.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Récuperer mail dans une page html [ par Kain13 ] Bonjour,Comment vérifier si lors d'un traitement d'un formulaire, l'utilisateur a bien mis une adresse mail valide : Pseudo@FAI.comJe sais le faire en Detaguer une page html et obtenir un simple texte [ par ttornade ] Bjr la liste,je convertir une page html en format txt. Mon objectif serait de "nétoyer" tout ce qui est script, option *.css ect. Par exple: <html& problème en DotNet pour rècupèrer le contenu d'une page html complète [ par ttornade ] Bjr la liste,Existe-t'il un moyen ave les outils .Net de faire la requete HttpWebRequest d'un site(dont la page est construite avec des frames) et rec savoir le titre d'une page html [ par Fildomen ] Saluten utilisant le Navigateur Web Microsoft , comment savoir le titre d'une page?http://www.devportail.tk Récupérer code html page web [ par moihenry ] Bonjour, quelle est le moyen le plus rapide pour récupérer le code html d'une page web ? MerciC# top!! Créer une page html avec un editeur de texte format RTF [ par astuces_jeux ] Bonjour, je cherche comment créer une page de format RTFplus d'info : créer un editeur de texte sur une page HTML avec format RTF ( [application console] lancer une page html [ par engelho ] Bonjour,Je viens de faire migrer une partire d'un projet. Une page html est devenue une application console. Bien évidement, la fonction "server. Convertir une page format html en format texte [ par ttornade ] Bjr le monde,je voudrais developper en C sharp ou visualBun programme qui devra recevoir une page html et restituer en sortie un fichier format texte afficher une page html [ par Fildomen ] salutquel composant on utilise si on veut afficher(dans la winform pas appeler l'explorer pour le faire) une page html depuis son adresse?http://www.d RegEx [ par Bidou ] Bonjour,J'ai une question pas très compliquée sur les expressions régulières, mais voilà je ne connais pas tellement ce sujet


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 1,326 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.