perlquestion
bobf
<p>
I finally had an occasion to try out [cpan://WWW::Mechanize], so I eagerly read the docs and started coding. I am somewhat embarassed to admit that I got stuck almost immediately. I am trying to log in, but I can't figure out how to post the form once I've filled it in because the submit button is in a table and it is unnamed.
</p>
<p>
The source HTML for this form is as follows:
<code>
<form method="POST" id="loginForm"
action="https://www.pharmgkb.org/cas/login?
service=http%3A%2F%2Fpreview.pharmgkb.org%2F
views%2Findex.jsp%3Fid%3Dhome.welcome" />
<table border="0" cellpadding="4" cellspacing="0">
<tr>
<th align="right">Username:</th>
<td align="left"><input type="text" name="username"
tabindex="1" /></td>
<td rowspan="2">
<a href="/mypharmgkb/profile/accountReminder.action">
Forgot your User ID and/or password?</a></td>
</tr><tr>
<th align="right">Password:</th>
<td align="left"><input type="password" name="password"
tabindex="2" /></td>
</tr><tr>
<td align="right"> </td>
<td align="left" colspan="3"><input type="submit"
value="Sign In" tabindex="3" />
<input type="reset" tabindex="4" /></td>
<td> </td>
</tr>
</table>
</form>
</code>
</p>
<p>
This form is the second form on the page. I confirmed that I had the correct form by doing:
<code>
print Dumper( $mech_obj->current_form() );
</code>
Here is the relevant part of my code (meager, I know):
<code>
use strict;
use warnings;
use WWW::Mechanize;
use HTTP::Cookies;
my $mech_obj = WWW::Mechanize->new();
$mech_obj->get( $signin_url );
if( not $mech_obj->success() )
{
print "Could not retrieve signin page:\n";
print $mech_obj->content();
die;
}
$mech_obj->form_number( 2 );
$mech_obj->set_fields( 'username' => $username,
'password' => $password );
</code>
</p>
<p>
I've tried to submit the form using the <code>submit</code> method, but it seems the first form on the page (a website search box) is submitted instead of the login form. I also tried using the <code>click</code> method, but I can't figure out what the name of the button is (using <code>click</code> without specifying the button name also submits the search box instead of the login form).
</p>
<p>
Since the button is in a table and doesn't appear to have a name, I thought using the optional arguments (x, y coordinates for the button) with the <code>click</code> method, but 1) the name of the button still appears to be required, and 2) I don't know how to determine the button coordinates on the page.
</p>
<p>
I Googled the net and Super Searched the Monastery's archives, but came up empty. Any ideas?
</p>
<p>
Thanks in advance!
</p>