Accéder au contenu html d'une page comportant des frames !!! (bis)

Contenu du snippet

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 / Exemple :


// 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
// ...

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.