我正在尝试使用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幻灯片中的内容。
我不需要保存对象的当前状态或在关闭后恢复会话。
答案 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';