Hello Monks,
I've been trying to work up my game with web automation and found the following resource: http://search.cpan.org/dist/WWW-Mechanize/lib/WWW/Mechanize/Examples.pod, where the cpan search routine was the one I tried to model my efforts after. I've not been able to get it to work yet and would like to do so for the sake of thoroughness. Here is the script in question before any alteration:
#!/usr/bin/perl # turn on perl's safety features use strict; use warnings; # work out the name of the module we're looking for my $module_name = $ARGV[0] or die "Must specify module name on command line"; # create a new browser use WWW::Mechanize; my $browser = WWW::Mechanize->new(); # tell it to get the main page $browser->get("http://search.cpan.org/"); # okay, fill in the box with the name of the # module we want to look up $browser->form_number(1); $browser->field("query", $module_name); $browser->click(); # click on the link that matches the module name $browser->follow_link( text_regex => $module_name ); my $url = $browser->uri; # launch a browser... system('galeon', $url); exit(0);
I started by rebuilding it up from nothing, dumping forms, checking returns, and arrived with an intermediate version that gives proper results. The system call reflects my own windows-based platform:
C:\cygwin64\home\Fred\pages2\hunt>perl cpan4.pl WWW::Mechanize module name is WWW::Mechanize url is http://search.cpan.org/search?query=WWW%3A%3AMechanize&mode=all C:\cygwin64\home\Fred\pages2\hunt>type cpan4.pl #! /usr/bin/perl use warnings; use strict; use 5.010; # work out the name of the module we're looking for my $module_name = $ARGV[0] or die "Must specify module name on command line"; say "module name is $module_name"; # create a new browser use WWW::Mechanize; my $browser = WWW::Mechanize->new(); # tell it to get the main page $browser->get("http://search.cpan.org/"); # okay, fill in the box with the name of the # module we want to look up $browser->form_number(1); $browser->field( "query", $module_name ); $browser->click(); my $url = $browser->uri; say "url is $url"; # launch a browser... system( 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe', + $url ); exit(0);
The module name is well-formed; the search is well-formed; the output correctly displays in a browser a list of all modules where WWW::Mechanize was number one. There is but one line to add, and it's where it careens off the rails. This is the terminal output:
C:\cygwin64\home\Fred\pages2\hunt>perl cpan1.pl WWW::Mechanize WWW::Mechanize passed as text_regex is not a regex at cpan1.pl line 24 +. url is http://st.pimg.net/tucs/style.css?3 C:\cygwin64\home\Fred\pages2\hunt>perl cpan1.pl WWW::Mechan WWW::Mechan passed as text_regex is not a regex at cpan1.pl line 24. url is http://st.pimg.net/tucs/style.css?3 C:\cygwin64\home\Fred\pages2\hunt>perl cpan1.pl 'WWW::Mechanize' 'WWW::Mechanize' passed as text_regex is not a regex at cpan1.pl line +24. url is http://st.pimg.net/tucs/style.css?3 C:\cygwin64\home\Fred\pages2\hunt>perl cpan1.pl "WWW::Mechanize" WWW::Mechanize passed as text_regex is not a regex at cpan1.pl line 24 +. url is http://st.pimg.net/tucs/style.css?3 C:\cygwin64\home\Fred\pages2\hunt>
No matter what I type for the module name, I am told that same thing, and the browser gets opened to the .css page, which I find puzzling indeed. Line 24 is the one with the follow_link command:
#! /usr/bin/perl use warnings; use strict; use 5.010; # work out the name of the module we're looking for my $module_name = $ARGV[0] or die "Must specify module name on command line"; # create a new browser use WWW::Mechanize; my $browser = WWW::Mechanize->new(); # tell it to get the main page $browser->get("http://search.cpan.org/"); # okay, fill in the box with the name of the # module we want to look up $browser->form_number(1); $browser->field( "query", $module_name ); $browser->click(); # click on the link that matches the module name $browser->follow_link( text_regex => $module_name ); my $url = $browser->uri; say "url is $url"; # launch a browser... system( 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe', + $url ); exit(0);
So there it is. Thanks for your comment.
In reply to Using example script correctly for opening cpan module by Aldebaran
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |