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

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.