in reply to WWW::Mechanize::Firefox not filling out form

This is a deficiency and maybe even a bug in ->set_fields(). I think ->set_fields needs more tests, as <input type="radio"> fields are not really supported by ->field or ->select.

As a workaround, the following script works for me. It uses ->field() to set the sequence and explicitly ->clicks on the radio input, because that's what the Javascript code expects to happen.

use strict; use WWW::Mechanize::Firefox; my $url = "http://tools.immuneepitope.org/tools/bcell/iedb_input"; my $agent = WWW::Mechanize::Firefox->new( activate => 1, autoclose => 0, ); my $method = 49; my $seq = "ARRRSFASDATRASDFSDARASDAGADFGASDRFREWFASCDSAGAREW"; $agent->get($url); if ( $agent->success() ) { print "Retrieved $url\n"; $agent->form_name('form1'); #$agent->set_fields( 'sequence' => $seq ); $agent->field( 'sequence' => $seq ); my $q = sprintf '//input[@name="method" and @value="%s"]', $method +; my $method_field = $agent->xpath( $q, single => 1 ); $agent->click( $method_field, synchronize => 0 ); #$agent->submit(); }

Update: Confirmed: ->set_fields() has a bug in it and never worked at all. The next release (0.41) will have tests and likely a somewhat more working version of ->set_fields but you should do without it for the time being. Thanks for providing such a convenient, almost self-contained example that replicates the problem.

Replies are listed 'Best First'.
Re^2: WWW::Mechanize::Firefox not filling out form
by Anonymous Monk on Dec 10, 2010 at 16:22 UTC
    Thanks for this. The form now shows data being entered into it, but then Firefox (32-bit Windows version 3.6.12) starts eating up an entire CPU core on my computer and never moves on from clicking the radio button in the script. I can tell that it is the interaction of this script with Firefox since if I break (^C) the script, Firefox immediately drops in CPU usage.

      I can't reproduce your problem.

      My script, as posted above, does not do that, in fact, it never submits because that's commented out. To help me help you better, you could post a minimal version of your script that still reproduces the problem but is no longer than 20 lines. That would enable me, again, to reproduce your problem and maybe find a diagnosis that helps us determine the best approach to a solution.

        My apologies. Here's the code example. It inputs the text into the text box and selects the correct radio button and then Firefox goes to 100% usage on a single core.
        use strict; use WWW::Mechanize::Firefox; my $url = "http://tools.immuneepitope.org/tools/bcell/iedb_input"; my $agent = WWW::Mechanize::Firefox->new( activate => 1, autoclose => 0, ); my $method = 49; my $seq = "ARRRSFASDATRASDFSDARASDAGADFGASDRFREWFASCDSAGAREW"; $agent->get($url); if ( $agent->success() ) { sleep(5); print "Retrieved $url\n"; $agent->form_name('form1'); #$agent->set_fields( 'sequence' => $seq,'method' => $method); $agent->field( 'sequence' => $seq ); my $q = sprintf '//input[@name="method" and @value="%s"]', $method +; my $method_field = $agent->xpath( $q, single => 1 ); $agent->click( $method_field, synchronize => 0 ); sleep(5); $agent->submit(); }