使用Perl和WWW :: Mechanize来获取带有填写表单的HTML并将其保存到文件中

时间:2012-08-16 02:21:10

标签: html forms perl www-mechanize

我正在尝试使用WWW::Mechanize来记录我所做的一切。将输入字段填入并保存到文件中的HTML非常重要。

我的代码:

$m->save_content($file); # Saves the page without any forms filled

$m->field('user_name', $user); #fills the form
# I need to save the html with the filled form
# $m->save_content($file_2); won't do it
# $m->dump_forms; shows that mechanize knows about the filled forms

$m->click('SUBMIT.x');
$m->save_content($file); # Too late, already in a different page

有什么想法吗?我看到它与LWP::UserAgent一起使用,但我无法访问代码。

我已经尝试了所有可以提出的内容,但没有任何内容会使用$m->forms()的值更新内容。

编辑:基本上我想要的是具有类型的功能:

$updated_content = merge($m->content, $m->dump_forms);

因此,当我保存它时,我可以看到将表单输入到html幻灯片中的内容。

我不需要保存对象的当前状态或在关闭后恢复会话。

1 个答案:

答案 0 :(得分:2)

解决方案取决于您要实现的目标。 save_content方法仅保存最后一个HTTP响应的内容,而不保存整个WWW::Mechanize状态。

如果您想存储WWW::Mechanize对象,以便可以从给定点随时进行浏览,那么您需要调查序列化一个受祝福的对象。

我的选择是使用Data::Dump。如果你写

use Data::Dump 'dump';
use WWW::Mechanize;

my $mech = WWW::Mechanize->new;
$mech->get('http://www.mysite.com/path/resource.html');
$mech->form_with_fields(qw/ username password /);
$mech->set_fields( username => 'me', password => 'secret');

open my $dump, '>', 'mechanize_freeze.pl' or die $!;
print { $dump } dump $mech;
close $dump or die $!;

...那么您应该有一个文件可以使用

在单独的程序中恢复
my $oldmech = do 'mechanize_freeze.pl';