Note: Forums will be making significant UX changes to address key usability improvements surrounding search, discoverability and navigation. To learn more about these changes please visit the announcement which can be found HERE.

已答覆 obtenir tous les liens d'une page web

  • mercredi 1 août 2012 09:35
     
     

    Bonjour

    Je cherche à obtenir tous les liens d'une page web

    HtmlElementCollection Liens = webBrowser1.Document.Links;

    ne marche pas, car en éditant les élements de la collection, j'obtiens l'adresse de la page web, et non pas des liens qu'elle contient.

Toutes les réponses

  • mercredi 1 août 2012 11:18
    Modérateur
     
     

    Bonjour,

    Cela me semble pourtant correct et la doc dit bien cela liste les liens notamment créés par A en HTML (cf http://msdn.microsoft.com/fr-fr/library/system.windows.forms.htmldocument.links.aspx).

    Vous faites un foreach et faites un GetAttribute pour récupérer le href de chaque élément récupéré ?


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".



  • mercredi 1 août 2012 14:42
     
     
    Une solution consiste à utiliser le HtmlAgility Pack (http://htmlagilitypack.codeplex.com/) : il converti votre Html en Xml, il ne reste plus ensuite qu'à faire un XPath sur le Xml récupéré.

    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

  • mercredi 1 août 2012 19:45
     
      A du code
    Je ne vois pas à quoi sert le GetAttribute, voilà mon code, rtb2 est un richTextBox.
     private void liensToolStripMenuItem_Click(object sender, EventArgs e)
            { 
               if (webBrowser1.Document != null)
                {
                    HtmlElementCollection Liens = webBrowser1.Document.Links;
                    foreach (HtmlElement lien in Liens)
                    {
                        f2.rtb2.AppendText(webBrowser1.Url.ToString()+lien.InnerText+Environment.NewLine);
                    }
                }
            

  • mercredi 1 août 2012 20:04
     
     
    HtmlAgility Pack trop compliqué pour moi,dommage!
  • mercredi 1 août 2012 22:40
    Modérateur
     
     Traitée A du code

    Bonjour,

    Voilà le code qu'il faut utiliser :

    foreach (HtmlElement lien in Liens)
    {
        f2.rtb2.AppendText(lien.GetAttribute("href") + lien.InnerText + Environment.NewLine);
    }

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

  • jeudi 2 août 2012 08:03
    Modérateur
     
     Traitée

    En complément de la réponse de Gilles :
    - webBrowser1.Url.ToString() récupère l'url de la page et non pas des liens que l'on est train de parcourir d'où le problème
    -
    lien.GetAttribute("href")  récupère l'attribut href du lien que l'on est train de parcourir et donne donc l'info que l'on voulait


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

  • vendredi 3 août 2012 09:15
     
     

    Je ne saisis pas trés bien la différence entre "lien" et "attribut du lien"

    Existe-t-il un tutoriel, trés simple, qui explique ce que sont les attributs?

    Merci.

  • vendredi 3 août 2012 09:38
    Modérateur
     
     Traitée

    Un attribut est juste l'une des "propriétés" d'une balise HTML qui sont exprimées sous la forme nom=valeur.

    Ici, la variable lien est un objet qui représente l'ensemble de la balise que l'on a donc dans le document html par qq chose comme :
    <a href="http://unsite">Du texte</a>

    lien.GetAttribute("href") permet de récupérer la valeur de la propriété "href" (que l'on appelle attribut) donc http://unsite. On peut avoir d'autre attributs :

    http://fr.selfhtml.org/html/reference/attributs.htm#a

    lien.InnerText permet de récupérer le texte présent à l'intérieur de la base (entre <a> et </a>).


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    • Marqué comme réponse soleilnoir vendredi 3 août 2012 10:46
    •  
  • vendredi 3 août 2012 10:46
     
     
    Merci