简短 的以下两个解决方案 - 不指定要等待的事件(以便使用其默认列表),或使用click
自行等待的方法,而不是submit_form
.
form_submit
我在, 和方法上看到了同样的问题synchronize
。下一次调用仍然会获取正在提交的页面,或者脚本挂起synchronize
(正确使用,如Borodin 的回答)。我使用一个网站进行测试,该网站在提交表单时会做一些工作。
包装电话synchronize
有一些微妙之处。触发或不触发哪些事件尚不清楚,也可能受到影响(在代码的前面部分)。我发现当调用中没有指定事件时代码可以工作,events()
因此会检查默认列表。
mech->synchronize( sub {
$mech->submit_form( with_fields => { log => 'admin', pwd => 'password' } );
});
$mech->save_content('after_submit.html');
以下调用获取正确的页面。
该文档从未提及等待form
方法,因此需要一些同步。但是,默认情况下,该click
方法确实 wait(可以使用synchronize
选项更改它)。
所以我发现这也可以解决问题:填写表格和click
它。
# Get the page with the form
$mech->fields( log => 'admin', pwd => 'password' );
$mech->click( name => 'Login' ); # whatever the name is
$mech->save_content('after_submit.html');
之后的下一个调用click
获取实际的下一页。
例如,如果表单在 上没有名称<input>
,这也可以
$mech->click_button(input => 'submit');