[..] Extraire une valeur en JS par class d'une page html

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
lexave
Niveau 1
Niveau 1
Messages : 12
Enregistré le : jeu. 03 déc. 2015 21:49
Status : Hors ligne

[..] Extraire une valeur en JS par class d'une page html

#1

Message par lexave »

Bonjour :D

Je peine à mort j'ai besoin de récupérer le prix de vente de l'argent en euros à zurich (dernière ligne case verte) disponible à cette adresse :


https://or.bullionvault.fr/view_market_ ... ketWidth=3

en inspectant l’élément (mis en rouge dans le code que je vous ai joint )je vois que c'est un <div > class que je n'arrive pas à récupérer par la commande _IeGetObjetByName ou _IeGetObjetById
(j’espère au moins que vous me comprenez :mrgreen: )

Au bout de plus d'une semaine de recherche je dois m'avouer vaincu si quelqu'un peut m'aider je
vous en serai très reconnaissant.

J'aimerai aussi comprendre pourquoi c'est si dur de récupérer une valeurs depuis une page si elle ne dispose pas d'un "id" ou de "name"


Merci à l'avance du temps que vous perdrez à me lire

Code : Tout sélectionner


<div class="price best">
	<div class="price">
	<b>428&nbsp;€</b><br><span class="priceBoxQty">45,000</span><span class="priceBoxSymbol">kg</span>

</div><b>[color=#FF0000]429[/color]&nbsp;€</b><br><span class="priceBoxQty">49,990</span><span class="priceBoxSymbol">kg</span>

</div>
Saleté de cheval à peine prend il la bonne habitude de ne plus manger , qu'il décide de crever!
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] extraire une valeur en JS par class d'une page htm

#2

Message par mikell »

Dans le code source de ta page, je ne retrouve pas les éléments que tu mentionnes (ils sont générés dynamiquement donc pas faciles à attraper) mais par contre il y a un champ JSON bienvenu où figurent les valeurs affichées qui t'intéressent, et on peut facilement trier ces données avec le regex qui va bien

Code : Tout sélectionner

$txt = BinaryToString(InetRead("https://or.bullionvault.fr/view_market_header.do?marketWidth=3", 1))
;Filewrite("page.txt", $txt) ; verif code source
$res = StringRegExpReplace($txt, _ 
        '(?is).*marketBackbone\.parse.*?AGXZU.*?quantity":([\d.]+),"limit":(\d+).*', _ 
        "$1" & @crlf & "$2" )
Msgbox(0,"", $res)
 
Si tu dois faire un check régulier attention, en bas du code source on trouve ça écrit : "Vous avez excédé la fréquence de rafraichissement" :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
lexave
Niveau 1
Niveau 1
Messages : 12
Enregistré le : jeu. 03 déc. 2015 21:49
Status : Hors ligne

[R] extraire une valeur en JS par class d'une page html

#3

Message par lexave »

Merci!Merci!Merci!Merci!Merci!Merci!Merci!Merci!Merci!Merci!Merci!Merci!Merci!Merci!Merci!Merci!Merci!Merci!Merci!Merci!Merci!Merci!Merci!Merci! 1000x

Je n'ai pas encore trouvé le champs JSON bienvenu dont tu parle je vais continuer à chercher ....
Il faut quand même avouer que j"espérais comprendre un peu la réponse le début passe encore
mais à partir de

$res = StringRegExpReplace($txt, _
'(?is).*marketBackbone\.parse.*?AGXZU.*?quantity":([\d.]+),"limit":(\d+).*', _
"$1" & @crlf & "$2" )
Msgbox(0,"", $res)

Ça deviens très très flou ,si un jours tu as 5 minutes à perdre pour tenter de m'éclairer , j'en serai ravi.

Encore merci
Saleté de cheval à peine prend il la bonne habitude de ne plus manger , qu'il décide de crever!
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] extraire une valeur en JS par class d'une page htm

#4

Message par mikell »

Pour le JSON, si tu décommentes le Filewrite ça te fait une copie du code source de la page
Dans ce code tu trouveras une partie bourrée d'accolades (le JSON) qui contient les données qui sont reprises pour l'affichage dynamique ("marketBackbone.parse"). Le bout qui t'intéresse est comme ça
► Afficher le texte
La partie "hiéroglyphe" de mon code c'est une fonction qui permet d'extraire certains éléments du texte avec une expression régulière, et donc d'éviter d'avoir à utiliser une ribambelle de fonctions String*
Si tu n'as besoin que de la valeur en euros, on peut la faire plus simple :mrgreen:

Code : Tout sélectionner

$res = StringRegExpReplace($txt, '(?is).*marketBackbone\.parse.*?AGXZU.*?limit":(\d+).*', "$1")
Msgbox(0,"", $res)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] extraire une valeur en JS par class d'une page htm

#5

Message par jchd »

Vois quand même si tu ne peux pas t'en tirer avec un balayage de la collection d'objets identifiés par IEGet*Collection pour récupérer un ID ou autre, mais je ne suis absolument pas spécialiste de ces bidules cosmétiques.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] extraire une valeur en JS par class d'une page htm

#6

Message par mikell »

jc, c'est la première chose que j'ai regardée, mais avec un affichage javascript dynamique c'est plutôt problématique :?
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] extraire une valeur en JS par class d'une page htm

#7

Message par jchd »

Ah, ça m'apprendra à répondre au pif sans creuser la question. Mauvais réflexe dont je suis coupable.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
lexave
Niveau 1
Niveau 1
Messages : 12
Enregistré le : jeu. 03 déc. 2015 21:49
Status : Hors ligne

Re: [..] extraire une valeur en JS par class d'une page htm

#8

Message par lexave »

:shock:


JC : merci pour la suggestion j'ai tenté ce que j'ai pus rien n'y à fait :(

Je planche à mort pour essayer de comprendre MIKELL il me fallait en effet seulement le prix de l'argent
en trifouillant ton code je pense que j'y serai arrivé en supprimant ;

& @crlf & "$2"= saut de ligne +affiche var2($2) si je suis bien..?

Pour le champ JSON j'étais carrément à coté de la plaque (le terme "champ" m’a dérouté)
Du coup je me suis penché sur le script j'ai remarqué que la partie script est elle même dans la partie: head (tete)
la ou moi je cherchais dans la partie :bodie (corp)



Cela ne peut pas être un coïncidence n'est pas ? du coup je suis tenté de penser que le corps c"est ce que l'on vois
la tête sa pense et qu'à l'avenir si je dois récupérer d'autres variables en JS c'est dans la partie head script?


Auquel cas je ne serai plus trop loin de comprendre pourquoi je n'y étais pas du tout.
Pitié dites moi que je chauffe!!!
Il resterai plus qu 'a élucider les hiéroglyphes :P !!!


Tout cela à l'air passionnant j'aimerai comprendre les "/d+" et autres subtilités de l'Au.3
(z' auriez pas une idée à me conseiller pour une entrée en matière plutôt pédagogie
pour les -de 5ans ,un tuto ? ou mieux .....une vidéo!! ??)





Quoi qu'il en soit encore merci pour tout :wink:
Saleté de cheval à peine prend il la bonne habitude de ne plus manger , qu'il décide de crever!
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Extraire une valeur en JS par class d'une page htm

#9

Message par orax »

Le machin qui suit StringRegExpReplace est une expression régulière ou expression rationnelle, également abrégé regex ou regexp. Ce n'est pas vraiment une subtilité d'AutoIt, d'autres langages et logiciels permettent de les utiliser.
Pour les tester facilement tu peux utiliser par exemple le site https://regex101.com/
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] extraire une valeur en JS par class d'une page htm

#10

Message par mikell »

lexave a écrit :Du coup je me suis penché sur le script j'ai remarqué que la partie script est elle même dans la partie: head (tete)
la ou moi je cherchais dans la partie :bodie (corp)
....
Cela ne peut pas être un coïncidence n'est pas ? du coup je suis tenté de penser que le corps c"est ce que l'on vois
la tête sa pense et qu'à l'avenir si je dois récupérer d'autres variables en JS c'est dans la partie head
L'interprétation est originale mais ya de l'idée :mrgreen:
Effectivement le "visible" se trouve dans le champ <body>...</body>, mais d'autres données exploitables peuvent exister dans le code source en dehors du body
Dans le cas présent on a de la chance, ces données existent sous forme de JSON dans une partie javascript présente dans le <head> de la page principale. Mais ce n'est pas toujours le cas et parfois il faut batailler pour récupérer ce JSON (avec WinHttp par exemple mais c'est une autre histoire)
Par exemple sur ce site tu peux ne charger que le JSON si tu as son url (ça permet de simplifier encore plus l'expression régulière)

Code : Tout sélectionner

$url = "https://or.bullionvault.fr/view_market_json.do?marketWidth=3"

$txt = BinaryToString(InetRead($url, 1))
;Filewrite("json.txt", $txt)
$res = StringRegExpReplace($txt, '(?is).*?AGXZU.*?limit":(\d+).*', "$1")
Msgbox(0,"", $res)
Pour les hiéroglyphes :mrgreen: expressions régulières te faire un cours serait trop long, il te faut trouver des tutoriels (y en a plein internet), regarder les sujets de ce forum qui en parlent, faire pas mal d'essais (c.f. ma signature) et ne pas hésiter à poser des questions
Dans l'aide il y a un tutoriel basique ici, et j'en avais commencé un petit
A voir aussi dans l'aide les fonctions StringRegExp et StringRegExpReplace (et leurs exemples)
Pour le code précédent voilà le décryptage de base
► Afficher le texte
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
lexave
Niveau 1
Niveau 1
Messages : 12
Enregistré le : jeu. 03 déc. 2015 21:49
Status : Hors ligne

Re: [..] Extraire une valeur en JS par class d'une page htm

#11

Message par lexave »

orax a écrit :Le machin qui suit StringRegExpReplace est une expression régulière ou expression rationnelle, également abrégé regex ou regexp. Ce n'est pas vraiment une subtilité d'AutoIt, d'autres langages et logiciels permettent de les utiliser.
Pour les tester facilement tu peux utiliser par exemple le site https://regex101.com/



C'était plus un trait d'humour... :P

Je suis déja sur le site : le site https://regex101.com

je l'ajoute en favori merci!!!!!
Saleté de cheval à peine prend il la bonne habitude de ne plus manger , qu'il décide de crever!
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Extraire une valeur en JS par class d'une page htm

#12

Message par orax »

En fait je ne savais pas si tu savais de quoi il s'agissait exactement, c'est pourquoi je t'ai donné différentes nominations qu'on peut rencontrer. En cherchant ces termes dans un moteur de recherches tu devrais pouvoir trouver des tutoriels sur le sujet.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
lexave
Niveau 1
Niveau 1
Messages : 12
Enregistré le : jeu. 03 déc. 2015 21:49
Status : Hors ligne

Re: [..] Extraire une valeur en JS par class d'une page htm

#13

Message par lexave »

orax a écrit :En fait je ne savais pas si tu savais de quoi il s'agissait exactement, c'est pourquoi je t'ai donné différentes nominations qu'on peut rencontrer. En cherchant ces termes dans un moteur de recherches tu devrais pouvoir trouver des tutoriels sur le sujet.

Tu as eu bien raison je ne savais rien de tout cela et pour le moment tout semble compliqué et interprétable
concernant ;https://regex101.com/ je tombe des nus j ' essai de me dépatouillé avec le code de MIKELL
c'est pas évident .
Car malgré le fait que j'ai se que je voulais je n'arrive pas a passer à la suite sans tenter de comprendre comment cela marche...

Encore merci je crois que j'aurai laissé tombé :wink:
Saleté de cheval à peine prend il la bonne habitude de ne plus manger , qu'il décide de crever!
Répondre