Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
[perl] Récupéré les données d'un formulaire html
Envoyé par: Doldz

Bonjour, à tous je crois que le titre est pas mal explicite.
Donc voilà mon but est de faire un script en perl qui met permette à partir du dump d'une variable qui contient la source d'un site en html de récupéré les donné des formulaires. mais je ne sais pas par ou commencé.

Poste le Tuesday 17 June 2008 06:01:37
Répondre     Citer    
Re: [perl] Récupéré les données d'un formulaire html
Envoyé par: AlSim

Les données entrées dans un formulaire sont dans les requêtes (GET/POST), pas dans le code HTML d'une page...
Je ne saisis pas exactement ce que tu veux faire mais à mon avis tu devrais t'intéresser aux CGI Perl.

[catwell.info]

Poste le Tuesday 17 June 2008 14:26:24
Répondre     Citer    
Re: [perl] Récupéré les données d'un formulaire html
Envoyé par: Doldz

Merci à toi ALSim de t'interressé à mon cas. Mais cherche pas trop loin, j'ai le code source d'une page html (tu sais clique droit visualiser la source, bah c'est la même chose que j'ai, j'ai pas les $_POST['nom']... ou les get) donc ce code est dans un gros string ( genre du 46 :-)) au moins ) et moi je voudrais récupéré un tit string qui se trouve entre deux chaine de caractére qui sont toujours les mêmes. Typiquement: (comme dirait mon prof de réseau)

<td>Nom du forum : </td>
<td><input name="phorum_challenge" value="Développement" type="text"></td>
</tr>

(Ce code vous l'avez en faisant clique droit affiché la source, et c'est pareille ce que j'ai, sauf que value n'est pas rempli je sais pas pourquoi mais de toute façon c'est pas mon cas quand je récupére la source de ma page à traité)

Donc, je veux récupérer "Développement" sachant que devant "Développement on aura toujours "name="phorum_challenge" value=" et derriére " type="text" vous voyez ce que je veux dire ?

Poste le Tuesday 17 June 2008 14:59:36
Répondre     Citer    
Re: [perl] Récupéré les données d'un formulaire html
Envoyé par: Doldz

Au passage là dans mon code y a quoi qui fait que j'ai deux fois le code HTML de ma page dans le dump, j'ai pas trop compris ça.

my $m = WWW::Mechanize->new;
$m->get("url");
my @top_links = @{$m->links};

for my $top_link_num (0..$#top_links)
{
        next unless $top_links[$top_link_num][0] =~ /^http:/; 
        $m->follow_link( n=>$top_link_num ) or die "can't follow $top_link_num";
}

print Dumper(@);

Poste le Tuesday 17 June 2008 15:55:24
Répondre     Citer    
Re: [perl] Récupéré les données d'un formulaire html
Envoyé par: AlSim

Aucune idée pour le texte en double, je ne connais pas WWW::Mechanize autrement que de nom. Sinon, pour récupérer les variables comme il faut dans une hash-table par exemple, en supposant que ta string soit dans $_ (tu adapteras) :

my %vals;
$vals{$1} = $2 if m/<input name="(.+?)" value="(.+?)" type="text">/;

[catwell.info]

Poste le Tuesday 17 June 2008 18:27:20
Répondre     Citer    
Re: [perl] Récupéré les données d'un formulaire html
Envoyé par: Doldz

j'ai pas trop compris (.+?) si tu pouvais m'éclairer ça va les mettre dans $_ ? et je met ou mon grosse string la dedans ? et pourquoi déclaré un tableau associatif ? tu pourrais me préciser un peu plus.

Poste le Wednesday 18 June 2008 01:11:17
Répondre     Citer    
Re: [perl] Récupéré les données d'un formulaire html
Envoyé par: AlSim

(.+?) matche tout type de caractère, + veut dire "1 ou plus" et ? "non-gourmand" (s'arrêter dès que possible).

Ce qu'il y a après le "if" (le match) est éxécuté en premier, sur $_ (que j'ai supposé contenir ta chaîne). Si ta chaîne est dans une autre variable $chaine, tu peux faire ça plutôt :

my %vals;
$vals{$1} = $2 if $chaine =~ m/<input name="(.+?)" value="(.+?)" type="text">/;
Après l'évaluation du if, s'il est faux (pas de match) on ne fait rien, s'il est vrai ce qui est matché par le premier (.?+) est stocké automatiquement dans $1 par Perl et idem pour le second dans $2. On affecte alors à la clé référencée par $1 de la hash-table %vars (qui est créée si elle n'existait pas) la valeur de $2.

Au final, tu te retrouves avec %vals rempli tel que dans ton exemple :

$vals{'phorum_challenge'} == "Développement"
et de même pour les autres champs.

[catwell.info]

Poste le Wednesday 18 June 2008 13:56:47
Répondre     Citer    
Re: [perl] Récupéré les données d'un formulaire html
Envoyé par: Doldz

J'y suis pas arrivé, j'ai fais mon code de cette façon:

#!/usr/bin/perl

use strict;
use WWW::Mechanize;
use File::Basename;
use Data:grinning smileyumper;
use HTML::TagReader;
use HTML::Element;
use HTML::Tree;
use LWP;


my $m = WWW::Mechanize->new;

$m->get("[www.exemple.com"]winking smiley;
my @top_links = @{$m->links};

for my $top_link_num (0..$#top_links)
{
        next unless $top_links[$top_link_num][0] =~ /^http:/;
        $m->follow_link( n=>$top_link_num ) or die "can't follow $top_link_num";
}

my $tmp = Dumper($m);
#print $tmp;

my %vals;
$vals{$1} = $2 if $tmp =~ m/<input name="(.+?)" type="text" value="(.+?)" id="txtNom" class="input_text" />

print $vals{'TxtNom'};

donc comme tu peux le voir je récupére le code source de ma page dans $tmp et là j'ai donc des ligne semblable à

<input name="(.+?)" type="text" value="(.+?)" id="txtNom" class="input_text" />

et quand j'essaie d'afficher la valeur donc ça ne marche pas, (Je suis encore novice en perl comme tu aura pus le constaté, je sais faire des petit script et comprendre un peu certain autre, du coup je t'avoue que j'ai un peu de difficulté à comprendre pourquoi ça ne marche pas.)

Poste le Wednesday 18 June 2008 15:53:34
Répondre     Citer    
Re: [perl] Récupéré les données d'un formulaire html
Envoyé par: AlSim

Il faudrait mieux comprendre ce qu'il y a dans ta variable pour le dire... Fais-en un print, essaie de voir comment sont gérés les retours à la ligne, etc.

Là le code que tu as écrit ne matchera au mieux que la première ligne qui correspond au motif, il faudrait donc probablement l'exécuter pour chaque ligne de ta variable (à stocker préalablement dans un tableau avec split() par exemple). À toi de chercher un peu smiling smiley

En tout cas une expression régulière de ce type sera la base de ta solution, et [www.perl.com] ta référence.

[catwell.info]

Poste le Wednesday 18 June 2008 20:49:07
Répondre     Citer    
Re: [perl] Récupéré les données d'un formulaire html
Envoyé par: Doldz

Finalement j'ai mis la ligne que je récupére dans un tit tableau à partir duquel je récupére la valeur qui se trouve toutjours au même endroit donc perfect. Merci AlSim

Poste le Saturday 21 June 2008 03:10:00
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
[perl] Récupéré les données d'un formulaire html
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons