Websurfer simulieren

Websurfer simulieren

am 09.09.2006 11:49:23 von Martin Kobilha

Hi,

ich würde gerne eine Seite aufrufen, ein Eingabefeld in einem Formular
ausfüllen und auf einen Link klicken um das Formular abzuschicken, und
das Ganze mittels eines Perl-Skripts.

Meine CPAN-Suche lieferte LWP::UserAgent als möglichen Ansatz,
allerdings übergibt dieser die Formulardaten direkt mittels POST an das
angegebene Dokument.

Hier mein Ansatz, der jedoch mit der angegebenen Seite nicht funktionier:


#!/usr/bin/perl

my $URLtoPostTo =
"http://www.telering.at/Content.Node/mobil/wunschrufnummernr echner.php";
my %Fields = ("Snumber" => "1234567");

use strict;

use LWP::UserAgent;
use HTTP::Request::Common;

my $Browser = new LWP::UserAgent;
my $Page = $Browser->request(POST $URLtoPostTo,\%Fields);

my $needle = "Sorry";
my $haystack = $Page->content;

if ($haystack =~ m/$needle/) {
print "number is already in use";
} else {
print "error";
}


Wenn ich die Ausgabe in eine Datei umleite erkennt man, dass das
Formular wie gewünscht ausgefüllt wurde, allerdings wird es nicht
abgesendet. Es würde vermutlich funktionieren, wenn man dem Skript
beibringen könnte auf den Link "Nummer prüfen" zu klicken.

Kann mir bitte jemand dabei helfen das zu korrigieren?

TIA,
Martin.

Re: Websurfer simulieren

am 09.09.2006 15:34:30 von hjp-usenet2

On 2006-09-09 09:49, Martin Kobilha wrote:
> ich würde gerne eine Seite aufrufen, ein Eingabefeld in einem Formular
> ausfüllen und auf einen Link klicken um das Formular abzuschicken, und
> das Ganze mittels eines Perl-Skripts.
>
> Meine CPAN-Suche lieferte LWP::UserAgent als möglichen Ansatz,
> allerdings übergibt dieser die Formulardaten direkt mittels POST an
> das angegebene Dokument.
>
> Hier mein Ansatz, der jedoch mit der angegebenen Seite nicht funktionier:

[Script gesnippt - schaut oberflächlich ok aus.]

> Wenn ich die Ausgabe in eine Datei umleite erkennt man, dass das
> Formular wie gewünscht ausgefüllt wurde, allerdings wird es nicht
> abgesendet.

Das ist ein Irrtum. $Page enthält das Ergebnis des Requests. Wäre die
Abfrage nicht abgesendet worden, könnte es kein Ergebnis geben. Warum
das Ergebnis nicht die gewünschte Auskunft enthält, weiß ich nicht.
Vielleicht musst Du noch ein Cookie mitschicken oder es gibt hidden
fields in der Form oder ähnliches. Vergleiche mit einem Packet-Sniffer
(Ethereal ist recht brauchbar) einen erfolgreichen Request mit einem
fehlgeschlagenen, dann siehst Du wahrscheinlich den Unterschied.

> Es würde vermutlich funktionieren, wenn man dem Skript
> beibringen könnte auf den Link "Nummer prüfen" zu klicken.

Klicken tut man mit der Maus. Damit weist man den Browser an, einen
Request zu schicken. In Deinem Fall gibt es keinen Browser, also wird
Dein Script den Request selber schicken müssen, und dafür ist kein
Mausklick notwendig.

hp



--
_ | Peter J. Holzer | > Wieso sollte man etwas erfinden was nicht
|_|_) | Sysadmin WSR | > ist?
| | | hjp@hjp.at | Was sonst wäre der Sinn des Erfindens?
__/ | http://www.hjp.at/ | -- P. Einstein u. V. Gringmuth in desd

Re: Websurfer simulieren

am 11.09.2006 10:56:54 von Ingo Wiarda

Martin Kobilha schrieb:

> ich würde gerne eine Seite aufrufen, ein Eingabefeld in einem Formular
> ausfüllen und auf einen Link klicken um das Formular abzuschicken, und
> das Ganze mittels eines Perl-Skripts.
>

HTML-Formulare und Perl? =3D> WWW::Mechanize, oder Test::WWW::Mechanize.

use strict;
use WWW::Mechanize;
...
$mech->get("http://www.arbeitsagentur.de"); # Seite abrufen
...
# Login-Formular abschicken:
$mech->submit_form("form_number" =3D> 3,
"fields" =3D> {
"j_username" =3D> $self->user,
"j_password" =3D> $self->pw,
},
"button" =3D> "send"
);

# Ergebnis prüfen;
if ($mech->success() && $mech->content() =3D~ m/Sie sind angemeldet
als/){
warn("Login was successful.\n");
return 1;
}
else{...}


Gruß,
Ingo