in reply to Re^2: Using WWW::Mechanize::Firefox to navigate a site
in thread Using WWW::Mechanize::Firefox to navigate a site

The button seems to be added only "later" on, after even DOMContentLoaded has fired. I get your script to work consistently by using sleep 1 to give the page more time to construct itself:

use strict; use warnings; #use local::lib; use WWW::Mechanize::Firefox; warn $WWW::Mechanize::Firefox::VERSION; my $mech = WWW::Mechanize::Firefox->new( autoclose => 0, autodie => 1, ); $mech->get('http://www.rightmove.co.uk/'); # Filling in and submitting the first forms works: $mech->submit_form( with_fields => { searchLocation => 'N1', } ); sleep 1; # give the page more time $mech->click({xpath => '//*[@id="submit"]'});

To make this truely robust, you would need to wait (always with a timeout!) until the search button becomes visible:

my $retries = 10; while ($retries-- and ! $mech->is_visible( xpath => '//*[@id="submit"] +' )) { sleep 1; }; die "Timeout" unless $retries;

Replies are listed 'Best First'.
Re^4: Using WWW::Mechanize::Firefox to navigate a site
by larard (Monk) on Aug 17, 2010 at 21:16 UTC
    Works perfectly! I'll go with your retry and countdown method. Thank you very much for both the module WWW::Mechanize::Firefox and the support.