[Perl] Capturer un élément avec Selenium

Patrice Karatchentzeff patrice.karatchentzeff at gmail.com
Jeu 2 Mai 08:57:56 CEST 2024


Merci à tous pour votre aide.

Une grosse partie de mes difficultés, outre que je n'avais pas bien
compris que le xpath était un truc à part, est que j'ai piqué un bout
de programme là

https://en.perlzemi.com/blog/20211119124656.html

pour démarrer et que j'ai oublié que le gars avait figé la recherche en div :

$driver->default_finder('css');

et du coup, je pouvais toujours faire des tests avec le xpath :(

Pour l'utf-8, j'ai eu des tas de soucis... D'après ce que j'ai
compris, le module Selenium met un peu le bronx (je suppose que cela
vient du fait de devoir gérer des tas de navigateurs sur des tas
d'environnements). Du coup, j'ai viré le pragma use utf8 et je gère
avec encode/decode_utf8 les chaînes que j'envoie/reçois du
navigateur... Moyennant cela, tout fonctionne nickel. Mais bon, j'ai
un peu l'impression de coder comme il y a 25 ans :)

Bon, pour l'apprentissage du xpath, je déconseille de commencer par la
page de recherche de Google :)

Pas réussi à faire fonctionner la recherche du xpath avec $x sous
Chromium, mais cela marche nickel avec Firefox. Comme toujours, chaque
outil à ses trucs plus ou moins bien par défaut et la recherche du
xpath sous Chromium est assez pourrie et bien élaborée sous FF...
alors que la page d'inspection est plutôt meilleure dans le sens
contraire.

PK


Le jeu. 25 avr. 2024 à 13:56, Patrice Karatchentzeff
<patrice.karatchentzeff at gmail.com> a écrit :
>
> Merci pour la réponse : je commence à piger. En fait, je n'avais pas
> compris qu'il y avait une syntaxe spécifique externe à Perl et je ne
> comprenais pas la logique...
>
> J'ai trouvé cela qui décortique :
>
> https://www.freeformatter.com/xpath-tester.html
>
> Je vais tester tout cela. Merci beaucoup.
>
> PK
>
> Le jeu. 25 avr. 2024 à 03:03, Alex Garel <alex at garel.org> a écrit :
> >
> >
> > Le 24/04/2024 à 09:24, Patrice Karatchentzeff a écrit :
> >
> > ...
> > Par exemple, tiré d'une page de recherche Google (qui fait tout pour
> > rendre son code source imparsable)
> >
> > <h3 aria-hidden="true"><div class="GNJvt ipz2Oe"><span
> > class="kQdGHd"><span class="OTvAmd z1asCe QFl0Ff"><svg
> > focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24
> > 24"><path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6
> > 6-6z"></path></svg></span></span><span class="RVQdVd">Plus de
> > résultats</span></div></h3>
> >
> > Je veux sélection h3 aria-hidden="true" pour pouvoir ensuite récupérer
> > l'enfant span « Plus de résultats ».
> >
> > Je sais sélectionner tous les h3, pas ceux avec cette propriété
> > seulement. J'ai essayé
> >
> > $driver->find_elements("//h3[aria-hiden='true']")
> >
> > Vu que la doc dit que find_elements prend du XPath par défaut. https://metacpan.org/pod/Selenium::Remote::Driver#find_elements
> >
> > Je suppose que c'est du XPath que tu veux faire, mais dans ce cas il faut un @ devant le nom de ta propriété, et il faut deux "d" à hidden
> >
> > $driver->find_elements('//h3[@aria-hidden="true"]')
> >
> > J'ai mis des '' en extérieur de l'expression pour éviter à avoir à banaliser le @
> >
> > Tu peux tester le XPath dans la console de firefox en utilisant $x("//expression-xpath")
> >
> > Si je comprends bien la doc, tu peux aussi aller sur du CSS si tu es plus à l'aise (et là c'est $$() dans la console firexfox):
> >
> > $driver->find_elements('h3[aria-hidden="true"]', "css")
> >
> > Je te laisse tester et voir si ça marche :-)
> >
> > ++Alex
> > _______________________________________________
> > Perl mailing list
> > Perl at mongueurs.net
> > http://listes.mongueurs.net/mailman/listinfo/perl
> > Attention, les archives sont publiques
>
>
>
> --
>       |\      _,,,---,,_           Patrice KARATCHENTZEFF
> ZZZzz /,`.-'`'    -.  ;-;;,_   mailto:patrice.karatchentzeff at gmail.com
>      |,4-  ) )-,_. ,\ (  `'-'
>     '---''(_/--'  `-'\_)



-- 
      |\      _,,,---,,_           Patrice KARATCHENTZEFF
ZZZzz /,`.-'`'    -.  ;-;;,_   mailto:patrice.karatchentzeff at gmail.com
     |,4-  ) )-,_. ,\ (  `'-'
    '---''(_/--'  `-'\_)


Plus d'informations sur la liste de diffusion Perl