Bonjour,
j'ai fait un script Perl qui remplit automatiquement un formulaire sur internet grâce au module WWW::Mechanize. Pour ce faire, j'ai principalement suivie l'articles suivant :
http://articles.mongueurs.net/magazines/linuxmag58.html
Le script que j'ai fait me permets de remplir automatiquement le formulaire, de suivre le lien qui renvoie à la page de résultats et de copier cette page dans un fichier local.
Je l'ai fait de la manière suivante :
Ce script marche bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68 #!/usr/bin/perl -w #================================================================================ # Interrogation et recuperation automatique des donnees sur le site L2L # ATTENTION : Ne pas oublier de creer le dossier /Tmp/All_results_L2L_CX avant de lancer l'analyse. #================================================================================ use strict; use diagnostics; use WWW::Mechanize; use Data::Dumper; use vars qw($opt_h $opt_f $opt_p $opt_c); use Getopt::Std; ##recuperation des arguments - initialisation getopts("hf:p:c:") or die("erreur(s) de saisie dans les options. Faire -h pour obtenir l'aide\n"); if (defined($opt_h)) { &help; exit; } elsif (!defined($opt_f) || !defined($opt_p) || !defined($opt_c)) { die("erreur : parametre manquant, -f, -p et -c doivent etre definis. Faire -h pour obtenir de l'aide\n"); } my $url = 'http://depts.washington.edu/l2l/'; my $bot = WWW::Mechanize->new(); open(LOG, ">>/Users/mathilde/Dossier_partage_VM/LocaFT/logs/analyse_L2L_c$opt_c.log") or die("Impossible d'ouvrir analyse_L2L_c$opt_c.log"); foreach my $type ('gobiol', 'gomole', 'l2lmdb') { print "\nAnalyse $type\n"; $bot->get($url); $bot->form_number(1); #remplissage du formulaire $bot->set_fields(dataname => $opt_f, datafile => $opt_p, libmenu => 'hugo', listmenu=> $type); $bot->submit(); die $bot->res->status_line unless $bot->success; $bot->follow_link(text => 'results'); open(RES, ">/Users/mathilde/Dossier_partage_VM/LocaFT/resultats/analyse_L2L/All_results_L2L_C$opt_c/L2L_$opt_f"."_$type.html") or die("Impossible d'ouvrir ../resultats/analyse_L2L/All_results_L2L_C$opt_c/L2L_$opt_f"."_$type.html\n"); print(RES Dumper $bot->content()); close(RES); } close(LOG); sub help { print qq{ analyse_auto_L2L.pl va sur le site L2L, rempli le formulaire avec les parametres passes en argument, et print les resultats Parametres : -f : nom du fichier contenant la liste des genes product -p : chemin d'acces au fichier a traiter. -c : contrainte. }; }
La page de résultat que je récupère est en fait un tableau contenant un certain nombre d'infos, dont des liens vers d'autres pages pour avoir des infos complémentaire.
Actuellement, si je clique sur ces liens dans le fichier que j'ai copié en local, je n'obtiens rien puisque je n'ai pas copié les pages correspondant à ces liens.
Donc maintenant je voudrais améliorer mon script pour que les certains liens du fichier de résultats soient préservé en copiant aussi les pages correspondantes.
Pour faire ça, je pensais parcourir mon fichier de résultats, suivre les liens qui m'intéressent avec, copier la page correspondante, et revenir à la page de résultats pour suivre le lien d'après etc...
Code : Sélectionner tout - Visualiser dans une fenêtre à part $bot->follow_link(text=>'monText')
Mais j'ai pas trouvé de méthode permettant de revenir à la page précédente. Donc avant de me lancer tête baissée dans le code, je voulais savoir s'il existait une méthode permettant de revenir à la page précédente (à la manière du backward du navigateur)?
A moins qu'il y ait une autre manière de faire plus simple/efficace?
Toute suggestion serait la bienvenue
Partager