Il n’y a pas si longtemps, sur le forum de scripts-seo, j’avais indiqué dans un post qu’il était tout à fait possible de réaliser le traitement des xpath dans Zennoposter. Oui mais comment ?

Zennoposter l’ami des xpath

Pour cela, rien de plus bête: on va déposer dans son projet un module « own code » de type C#. Je vous invite à copier coller le code source suivant :

List<string> data = new List<string>();
Tab tab = instance.MainTab;
if (tab.IsBusy) tab.WaitDownloading();
//recup du doc
Document doc = tab.MainDocument;
//trouver les elements par xpath
HtmlElementCollection heCol = doc.FindElementsByXPath(@"//*[@id='main']/ul/li/h4/a");
for (int i = 0; i < heCol.Count; i++){
 data.Add(heCol.Elements[i].InnerHtml);
}
project.Lists["List1"].AddRange(data);
project.SendErrorToLog("element ["+data.Count+"] ajouté");

 

En complément du module C#, vous devez aussi déposer dans votre projet un élément de type « List », dont on laissera dans notre exemple, dans sa nomination par défaut.

La première ligne sera donc la déclaration de la variable locale de notre module qui contiendra les éléments de réponse de notre xpath.

Les lignes 2 et 3 sont simplement pour se positionner sur la tab du navigateur (fenêtre par défaut ouverte) et on test si cette dernière est encore en activité. Si c’est le cas, on attend gentiment que le chargement se termine :).

Ligne 4 et 5 c’est notre xpath. Notez que le xpath est récupérable depuis Chrome via la touche F12 (après je pense que vous savez faire ^^). Pour tester le xpath, rien de tel que le plugin Chrome « xpath helper ».

Ligne 7 à 9, on parcoure dans la boucle « for » tous les éléments de l’objet « heCol » et dès qu’on trouve ce qu’on veut, on le met dans « data ».

Au final, on dépose « data » dans la List1 du projet zennoposter et on affiche avec fierté dans la log sont contenu, afin de nous rassuré que tout est ok.

Allez plus loin avec les xpath …

L’astuce d’en haut est vraiment sympas, sauf que quand vous allez mettre un xpath de type a/@href, bref tenté de recupérer un attribut de la DOM, ca va planter … meeerr****.

Et bien non, Moise te donne le tips qui va bien ^^

heCol.Elements[i].GetAttribute("href")

 

La méthode GetAttribute permet donc de choper ce qu’on veut

Voici le listing complet (code pouvant être très largement optimisé)

List<string> data = new List<string>();
List<string> datb = new List<string>();
Tab tab = instance.MainTab;
if (tab.IsBusy) tab.WaitDownloading();
//recup du doc
Document doc = tab.MainDocument;
//trouver les elements par xpath
HtmlElementCollection heCol = doc.FindElementsByXPath(@"//*[@id='main']/ul/li/h4/a");
for (int i = 0; i < heCol.Count; i++){
 data.Add(heCol.Elements[i].InnerHtml);
}
project.Lists["List1"].AddRange(data);
project.SendErrorToLog("element ["+data.Count+"] ajouté");
heCol = doc.FindElementsByXPath(@"//*[@id='main']/ul/li/div/p/a[4]"); //.AttributesToString("href");
for (int i = 0; i < heCol.Count; i++){
 datb.Add(heCol.Elements[i].GetAttribute("href")); 
}
project.Lists["List2"].AddRange(datb);
project.SendErrorToLog("element ["+datb.Count+"] ajouté");

Et pour aller encore plus loin…

Pour finir cet article quelques ressources sympas à lire ou utiliser absolument:

Si vous avez des questions ou des tips complémentaires, n’ayez pas peut de réagir en laissant un commentaire 🙂

Share.

About Author

3 commentaires

Leave A Reply