Schrift
[thread]10564[/thread]

Forum abschicken mit WWW::Mechanize

Leser: 4


<< |< 1 2 3 4 >| >> 35 Einträge, 4 Seiten
jogi
 2007-10-11 21:33
#100699 #100699
User since
2007-07-25
55 Artikel
BenutzerIn
[default_avatar]
Hallo!

Ich kapier es nicht!

Hier der relevante Teil des Formulars.

Code: (dl )
1
2
<form action="http://rs208.rapidshare.com/files/47486343/PowerOptions.pdf" method="post">
<input type="submit" name="dl.start" value="PREMIUM"></td><td align="center"><input type="submit" name="dl.start" value="Free">


Hier das Skript.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/perl -w
use strict;
use diagnostics;
use Data::Dumper;
use WWW::Mechanize;

my $mech = WWW::Mechanize->new;
$mech->add_header( 'accept-language' => 'de');
$mech->get('http://www.rapidshare.com/files/47486343/PowerOptions.pdf');


$mech->click_button( name => "dl.start",
                     value => "Free"
);

print $mech->content;


Hier das (falsche) Ergebnis.

http://ssdf80923kl.ss.funpic.de/ziel1.html <- zu dieser Seite gelangt man wenn man auf den PREMIUM Button klickt.

http://ssdf80923kl.ss.funpic.de/ziel2.html <-- zu dieser Seite sollte man gelangen, wenn man den Free Button klickt.

Ich bin seit einer Stunde am probieren. Wer kann mir sagen was da nicht stimmt.

Gruß,
Jogi
jogi
 2007-10-11 22:17
#100702 #100702
User since
2007-07-25
55 Artikel
BenutzerIn
[default_avatar]
Hier die Ausgabe von mech-dump. Hilft mir aber nicht wirklich weiter.

E:\perl>mech-dump http://www.rapidshare.com/files/47486343/PowerOpti...
POST http://rs208.rapidshare.com/files/47486343/PowerOp...
dl.start=PREMIUM (submit)
dl.start=Free (submit)
jogi
 2007-10-11 22:25
#100704 #100704
User since
2007-07-25
55 Artikel
BenutzerIn
[default_avatar]
So geht's:

Code: (dl )
$mech->click_button( number => "2" );


Aber fragt mich nicht wieso. Das einzige was mir auffällt ist die Subdomain bei form action.
jogi
 2007-10-11 23:19
#100707 #100707
User since
2007-07-25
55 Artikel
BenutzerIn
[default_avatar]
Ich hab schon wieder ein Problem.

Code (perl): (dl )
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
#!/usr/bin/perl -w
use strict;
use diagnostics;
use Data::Dumper;
use WWW::Mechanize;

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

$mech->proxy(['http', 'ftp'], '81.29.249.17:3128');

$mech->add_header( 'accept-language' => 'de');

$mech->get("http://www.rapidshare.com/files/47486343/PowerOptions.pdf");

$mech->click_button( number => "2" );

my $content = $mech->content;

if ( $content =~ /\(\w+\s\w+\s(.*)\s\w+\)/i ) {
        print "warte $1 Minute(n).";
}
 
elsif ( $content =~ /Kein Premium-User/i ) {
        print "Kein Premium-User.\n";
}
elsif ( $content =~ /Zu viele Benutzer laden gerade Dateien runter/i ) {
        print "Zu viele Benutzer laden gerade Dateien runter."
}
else { print "Unknown error"; }


Die Proxy-Zeile produziert folgende Fehlermeldung.

Quote
E:\perl>perl proxy3.pl
Use of uninitialized value in hash element at C:/Perl/lib/LWP/Protocol.pm line
55 (#1)
(W uninitialized) An undefined value was used as if it were already
defined. It was interpreted as a "" or a 0, but maybe it was a mistake.
To suppress this warning assign a defined value to your variables.

To help you figure out what was undefined, perl tells you what operation
you used the undefined value in. Note, however, that perl optimizes your
program and the operation displayed in the warning may not necessarily
appear literally in your program. For example, "that $foo" is
usually optimized into "that " . $foo, and the warning will refer to
the concatenation (.) operator, even though there is no . in your
program.

Use of uninitialized value in pattern match (m//) at
C:/Perl/lib/LWP/Protocol.pm line 58 (#1)
Use of uninitialized value in concatenation (.) or string at
C:/Perl/lib/LWP/Protocol.pm line 38 (#1)
Use of uninitialized value in string eq at C:/Perl/lib/LWP/UserAgent.pm line
195 (#1)

Can't call method "find_input" on an undefined value at
C:/Perl/site/lib/WWW/Mechanize.pm line 1586 (#2)
(F) You used the syntax of a method call, but the slot filled by the
object reference or package name contains an undefined value. Something
like this will reproduce the error:

$BADREF = undef;
process $BADREF 1,2,3;
$BADREF->process(1,2,3);

Uncaught exception from user code:
Can't call method "find_input" on an undefined value at C:/Perl/site/lib
/WWW/Mechanize.pm line 1586.
at C:/Perl/site/lib/WWW/Mechanize.pm line 1586
WWW::Mechanize::click_button('WWW::Mechanize=HASH(0x1f6efb8)', 'number',
2) called at proxy3.pl line 17


Kann mir bitte jemand sagen was hier falsch läuft? Wenn ich die Proxy Zeile auskommentiere dann geht's.

Gruß,
jogi
GwenDragon
 2007-10-11 23:39
#100710 #100710
User since
2005-01-17
14761 Artikel
Admin1
[Homepage]
user image
Sollte nicht anstatt
Code: (dl )
$mech->proxy(['http', 'ftp'], '81.29.249.17:3128');
besser
Code: (dl )
$mech->proxy(['http', 'ftp'], 'http://81.29.249.17:3128/');
da stehen?
renee
 2007-10-11 23:43
#100711 #100711
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du musst noch ein Protokoll (also z.B. 'http:///') bei dem Proxy angeben. Siehe auch die Doku zu CPAN:LWP::UserAgent.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
jogi
 2007-10-11 23:50
#100713 #100713
User since
2007-07-25
55 Artikel
BenutzerIn
[default_avatar]
Ne, geht trotzdem nicht :(

Quote
E:\perl>perl proxy3.pl
Can't call method "find_input" on an undefined value at
C:/Perl/site/lib/WWW/Mechanize.pm line 1586 (#1)
(F) You used the syntax of a method call, but the slot filled by the
object reference or package name contains an undefined value. Something
like this will reproduce the error:

$BADREF = undef;
process $BADREF 1,2,3;
$BADREF->process(1,2,3);

Uncaught exception from user code:
Can't call method "find_input" on an undefined value at C:/Perl/site/lib
/WWW/Mechanize.pm line 1586.
at C:/Perl/site/lib/WWW/Mechanize.pm line 1586
WWW::Mechanize::click_button('WWW::Mechanize=HASH(0x1f6e8fc)', 'number',
2) called at proxy3.pl line 15
GwenDragon
 2007-10-12 00:01
#100715 #100715
User since
2005-01-17
14761 Artikel
Admin1
[Homepage]
user image
Schlag mich nich', bin kein WWW-Mech-Profi, aber ich stelle mir gerade die Frage, ob du nicht bei jeder Mechanize-Methode noch ein
Code: (dl )
or die(); 
anfügen solltest! Dann weißt du, wo der Aufruf der Methode fehlschlug.
jogi
 2007-10-12 00:05
#100716 #100716
User since
2007-07-25
55 Artikel
BenutzerIn
[default_avatar]
Dann kommt das gleiche raus wie bei meinem vorigen Post.
jogi
 2007-10-12 00:11
#100717 #100717
User since
2007-07-25
55 Artikel
BenutzerIn
[default_avatar]
Wenn ich Zeile 15 auskommentiere läuft das Programm bis zum Ende.

Wenn ich Zeile 9 auskommentiere läuft das Programm auch bis zum Ende.

Also Zeile 9 oder 15 oder beide führen zum Absturz.
<< |< 1 2 3 4 >| >> 35 Einträge, 4 Seiten



View all threads created 2007-10-11 21:33.