none
identification d'element IE RRS feed

  • Question

  • Bonjour,

    est ce que quelqu'un peut m'aider ?

    j'ai une fonction c# qui me permet d'avoir un xpath d'un element IE.je veux savoir s'ilya un element dans la page web qui correspend à cet Xpath.je travaille sur un projet class library . merci

    lundi 19 décembre 2011 10:28

Réponses

  • Bonsoir,

    Je vous ai fait un petite exemple avec la logique que vous voulez mettre en place. Dans le code ci-dessous, on charge le document HTML à partir  d'une chaîne de caractères mais vous pouvez très bien charger des fichiers à partir de leurs chemins d'accès avec la méthode Load de la classe HtmlDocument dans l'espace de nom HtmlAgilityPack. N'oubliez pas de référencer la librairie HtmlAgilityPack.dll dans votre projet.

    using System;
    using HtmlAgilityPack;
    
    namespace ConsoleApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                // Load the HTML document
                HtmlDocument htmlDocument = new HtmlDocument();
                htmlDocument.LoadHtml("<html><head></head><body><p>aaaaaaaaa<div id='1'>cccc<p>ccccc</div></body></html>");
    
                // Look for the HTML element
                // Case 1: The html element exists
                HtmlNode node1 = htmlDocument.DocumentNode.SelectSingleNode("//div[@id='1']");
                Console.WriteLine(node1 != null);
    
                // Case 2: The html element doesn't exist
                HtmlNode node2 = htmlDocument.DocumentNode.SelectSingleNode("//div[@id='2']");
                Console.WriteLine(node2 != null);
    
                Console.ReadKey();
            }
        }
    }
    
    

    Vous pouvez aussi télécharger le code source sur codeplex, vous avez pas mal d'exemples dedans.

    Cordialement,

     


    aelassas.free.fr
    lundi 19 décembre 2011 20:50
    Auteur de réponse
  • htmlDocument.LoadHtml("http://www.google.tn/");

    Non, il faut utiliser la méthode Load de la classe HtmlDocument dans l'espace de nom HtmlAgilityPack comme j'ai précisé dans la réponse précédente:

    htmlDocument.Load("http://www.google.tn/");





    aelassas.free.fr
    mardi 20 décembre 2011 11:49
    Auteur de réponse
  • Bonsoir,

    Voici un exemple dans lequel j'affiche toutes les URL de la recherche de MSDN dans Google.

    using System;
    using System.Linq;
    using HtmlAgilityPack;
    
    namespace ConsoleApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                // Load the HTML document
                HtmlWeb htmlWeb = new HtmlWeb();
                HtmlDocument doc = htmlWeb.Load("http://www.google.fr/search?q=msdn");
    
                // Select the elements
                HtmlNodeCollection noAltElements = doc.DocumentNode.SelectNodes(@"//a[@href]");
    
                // Display the URLs
                if (noAltElements != null)
                {
                    foreach (string url in noAltElements.
                        Select(e => e.Attributes["href"].Value).
                        Where(url => url.StartsWith("http://") || url.StartsWith("https://")))
                    {
                        Console.WriteLine(url);
                    }
                }
    
                Console.ReadKey();
            }
        }
    }
    
    

    Cordialement,


    aelassas.free.fr
    mercredi 21 décembre 2011 00:56
    Auteur de réponse

Toutes les réponses

  • Bonjour,

    Vous pouvez utiliser Html Agility Pack.

    Cordialement,


    aelassas.free.fr
    lundi 19 décembre 2011 11:56
    Auteur de réponse
  • thanks sinn si je veux le faire sans html Agility Pack comment puis je faire ?

     

    lundi 19 décembre 2011 12:38
  • Bonjour,

    Si c'est du HTML, vous devez passer par les Regex.

    Si c'est du XHTML, vous pouver le faire avec Linq to XML ou XmlDoxument.

    Cordialement,


    aelassas.free.fr
    lundi 19 décembre 2011 14:10
    Auteur de réponse
  • ok merci .

    j'ai voulu essayer avec execScript :

            public void setPage(mshtml.HTMLWindow2Class JSFile)
            {
                win = JSFile;
            }
            public void scriptPrint()
            {
                win.execScript("report_back('Printing complete!')", "JScript");
            }

    il m'affiche l'erreur suivante:

    Error 1 Interop type 'mshtml.HTMLWindow2Class' cannot be embedded. Use the applicable interface instead. 

    lundi 19 décembre 2011 14:31
  • pour le HTML Agility Pack est ce qu'ilya un bon exemple à suivre ?
    lundi 19 décembre 2011 16:15
  • Bonjour,

    Vous aurez toutes les informations qu'il faut dans la documentation qui est téléchargeable sur codeplex: http://htmlagilitypack.codeplex.com/releases/view/44954

    Vous pourriez rencontrez un problème lors de l'ouverture du fichier de documentation *.chm si vous avez un OS Vista ou Seven. Voici la solution.

    Cordialement,


    aelassas.free.fr
    lundi 19 décembre 2011 16:27
    Auteur de réponse
  • Bonsoir,

    Je vous ai fait un petite exemple avec la logique que vous voulez mettre en place. Dans le code ci-dessous, on charge le document HTML à partir  d'une chaîne de caractères mais vous pouvez très bien charger des fichiers à partir de leurs chemins d'accès avec la méthode Load de la classe HtmlDocument dans l'espace de nom HtmlAgilityPack. N'oubliez pas de référencer la librairie HtmlAgilityPack.dll dans votre projet.

    using System;
    using HtmlAgilityPack;
    
    namespace ConsoleApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                // Load the HTML document
                HtmlDocument htmlDocument = new HtmlDocument();
                htmlDocument.LoadHtml("<html><head></head><body><p>aaaaaaaaa<div id='1'>cccc<p>ccccc</div></body></html>");
    
                // Look for the HTML element
                // Case 1: The html element exists
                HtmlNode node1 = htmlDocument.DocumentNode.SelectSingleNode("//div[@id='1']");
                Console.WriteLine(node1 != null);
    
                // Case 2: The html element doesn't exist
                HtmlNode node2 = htmlDocument.DocumentNode.SelectSingleNode("//div[@id='2']");
                Console.WriteLine(node2 != null);
    
                Console.ReadKey();
            }
        }
    }
    
    

    Vous pouvez aussi télécharger le code source sur codeplex, vous avez pas mal d'exemples dedans.

    Cordialement,

     


    aelassas.free.fr
    lundi 19 décembre 2011 20:50
    Auteur de réponse
  • thanks a lot :)
    mardi 20 décembre 2011 10:43
  • bonjour ,

    merci pour la réponse . j'ai essayé de tester tous les exmples possible sur htmlDocument.LoadHtml("http://www.google.tn/");

    mais il ne parvient pas à m'identifier un simple bouton qui a un attribut name='btnK'.

    en plus j'ai l'impression qu'il ne peut pas identidier un element par son xpath :

    please help

    mardi 20 décembre 2011 11:07
  • htmlDocument.LoadHtml("http://www.google.tn/");

    Non, il faut utiliser la méthode Load de la classe HtmlDocument dans l'espace de nom HtmlAgilityPack comme j'ai précisé dans la réponse précédente:

    htmlDocument.Load("http://www.google.tn/");





    aelassas.free.fr
    mardi 20 décembre 2011 11:49
    Auteur de réponse
  • voici ce que j'ai écrit:

    HtmlAgilityPack.HtmlWeb web = new HtmlWeb();
                HtmlAgilityPack.HtmlDocument doc = web.Load(@URL.Text);
                var NoAltElements = doc.DocumentNode.SelectNodes(@"//div[3]/center/input");

                if (NoAltElements != null)
                {

                    foreach (HtmlNode HN in NoAltElements)
                    {
                        MessageBox.Show(HN.XPath + "[" + HN.Attributes["name"].Value + "]");
                        j++;
                    }
                }

     

    sachant que //div[3]/center/input c'est l'xpath du bonton "recherche google" que jé eu par F1 sur IE.

    mardi 20 décembre 2011 12:37
  • Bonsoir,

    Voici un exemple dans lequel j'affiche toutes les URL de la recherche de MSDN dans Google.

    using System;
    using System.Linq;
    using HtmlAgilityPack;
    
    namespace ConsoleApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                // Load the HTML document
                HtmlWeb htmlWeb = new HtmlWeb();
                HtmlDocument doc = htmlWeb.Load("http://www.google.fr/search?q=msdn");
    
                // Select the elements
                HtmlNodeCollection noAltElements = doc.DocumentNode.SelectNodes(@"//a[@href]");
    
                // Display the URLs
                if (noAltElements != null)
                {
                    foreach (string url in noAltElements.
                        Select(e => e.Attributes["href"].Value).
                        Where(url => url.StartsWith("http://") || url.StartsWith("https://")))
                    {
                        Console.WriteLine(url);
                    }
                }
    
                Console.ReadKey();
            }
        }
    }
    
    

    Cordialement,


    aelassas.free.fr
    mercredi 21 décembre 2011 00:56
    Auteur de réponse
  • cette solution me fait apparaitre cette erreur :

    Error 1 'HtmlAgilityPack.HtmlNodeCollection' does not contain a definition for 'Select' and no extension method 'Select' accepting a first argument of type 'HtmlAgilityPack.HtmlNodeCollection' could be found (are you missing a using directive or an assembly reference?) 

    mercredi 21 décembre 2011 08:44
  • Bonjour,

    Vous avez oublié de référencer l'espace de noms System.Linq.

    Cordialement,


    aelassas.free.fr
    mercredi 21 décembre 2011 09:09
    Auteur de réponse
  • merciii :)
    mercredi 21 décembre 2011 10:41
  • Bonjour,

    Est-ce votre question est résolue ?

    Cordialement,


    aelassas.free.fr
    jeudi 22 décembre 2011 01:34
    Auteur de réponse
  • oui dans cet exemple ça marche . mais si j'essai de lui faire entrer doc.DocumentNode.SelectNodes(@"//center/input");

    le resultat est erroné .puisque je verifie le avec F12 de IE .

    jeudi 22 décembre 2011 07:08