[Perl / JS] [contourné] récupérer le contenu d'une variable JS

récupérer le contenu d'une variable JS [Perl / JS] [contourné] - Perl - Programmation

Marsh Posté le 29-03-2011 à 22:48:51    

Bonjour,
 
Je voudrais faire un script Perl pour récupérer le temps de parcours entre 2 adresses, calculé par le site mappy.
Mon script génère l'url en fonction du trajet, par exemple :
[url]http://fr.mappy.com/itinerary#d[]=Bourg-en-Bresse,+01000&d[]=Laon,+02000&ipv=carcom[/url]
(tiens, l'url ne passe pas si il y a des crochets dedans)
 
Le résultat (ici 4h35) est fournit par une variable {time} utilisée dans une fonction javascript : http://v3.x.mappy.com/static/js/addons_mappy_v3.js?pSm. Lorsqu'on regarde le code de la page, on voit pas la durée en clair.
 
Comment puis-je la récupérer dans mon script ?
 
Mes recherches m'ont conduit vers WWW::Mechanize, WWW::Scripter et WWW::Scripter::Plugin::JavaScript, mais je ne sais pas trop comment les utiliser pour récupérer cette donnée.  
(Je découvre le Perl depuis quelques jours)
 
Pourriez vous me donner des indications, s'il vous plaît ?
Je vous remercie


Message édité par Mazzhe le 03-04-2011 à 08:39:42
Reply

Marsh Posté le 29-03-2011 à 22:48:51   

Reply

Marsh Posté le 03-04-2011 à 08:48:40    

Bonjour,
 
En attendant de l'aide, j'ai continué à chercher.  
Je n'ai pas trouvé la solution, mais j'ai réussi à contourner le problème... Pour ceux que cela intéresserait, voilà l'idée :
J'utilise WWW::Mechanize::Firefox, mais comme je n'arrive pas à acceder aux variables JS (et dans le code Mappy, j'ai un peu du mal à trouver ce qu'il faut utiliser !), j'enregistre la page dans un fichier temporaire :  

$navigateur->save_content('/tmp/itineraire.html');


 
La sauvegarde enregistre le texte tel qu'il apparaît à l'écran. Après, il ne me reste qu'à chercher la bonne portion de texte dans le fichier temporaire, et c'est bon.
 
Ca prend un peu de temps, mais j'arrive à extraire un tableau d'adresses et à le classer par éloignement (en temps de parcours) d'un point...

Reply

Marsh Posté le 03-04-2011 à 14:36:00    

J'ai jeté un oeil à WWW::Mechanize::Firefox, mais il m'a fallu
1) le compiler et l'installer sur mon PC (avec cpan, mais ça a pris pas mal de temps)
2) Installer le module MozRepl (béta) sur Mozilla
3) Lancer Mozilla, puis depuis la section Outils démarrer le service MozRepl
4) Tester ce script:

 
Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4.  
  5. use WWW::Mechanize::Firefox;
  6. my $mech = WWW::Mechanize::Firefox->new();
  7. my $url = 'http://fr.mappy.com/itinerary#d[]=Bourg-en-Bresse,+01000&d[]=Laon,+02000&ipv=carcom';
  8. $mech->get($url);
  9. my @errors = map {$_->{message}} $mech->js_errors();
  10.  if (@errors) {
  11.      die "Found errors on page: @errors";
  12.  };
  13. my ($value, $type) = $mech->eval_in_page('{time}');
  14. print "value = $value, type = $type \n";
 

Pour voir qu'on se choppait des erreurs.

 

Le js dans les pages, ça a toujours été un des pbs avec Mechanize.
Bon, j'ai pas trop testé depuis au moins 6 mois, ça marche peut être mieux ces temps ci.

 


A+,


Message édité par gilou le 03-04-2011 à 14:40:49

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed