Re: how to send form action?

Peter Stevens <[email protected]>
Newsgroups gmane.comp.lang.perl.modules.lwp
Message-ID <[email protected]>
Hi Toshiro,

Toshiro (mailing lists) wrote:
>> Get the form object.  perldoc HTML::Form.  Look for action() method.
>> Figure out what the JavaScript would set the action to.  Set it to that.
>>
>
There's an easier way. Get Firefox 1.5 and the TamperData plug-in 
(doesn't work with the 2.0 Beta). Activate the TamperData window. Load 
the desired page and submit the form. Look at the log generated by 
Tamper Data. It's all there.
> I've been trying to do what you suggested, but I don't know how to use
> Mech and HTML::Form together,
>
Try the following...

    $action="whatever";
   # initialize other variables as appropriate....

    $form = $mech->form_name($formname);  # one of several methods which 
return a form.
    if (!$form) {                                      
        # error processing
    }
    $mech->field($targetField,$targetValue);  # user your fieldnames and 
values here...
    $mech->field($usernameField,$userName);
    $mech->field($passwordField,$passWord;
    $form->action ( $action );
    $mech->click();

The above will work if the form is already defined. Sometimes javascript 
defines the form on the fly. In which case, try this:

    my $f = HTML::Form->parse(<<EOT, $loginpage );
    <form>
        <input name="min"           value="$cell">
        <input name="target"        value="Login">
        <input name="action"        value="doLogin">
        <input name="userid"        value="$userId">
        <input name="password"      value="$pswd">
    </form>
EOT

    $f->method ( "POST" ) ;
    $mech->get( $homepage  );
    $mech->{forms} = ( $f ) ;
    $mech->{form} =  $f ;
    $mech->submit();

Not really sure if these last few lines are kosher, but they worked ;-)

Cheers

Peter
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.