2

我正在尝试获取我使用的所有内容的会话记录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 幻灯片。

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

4

1 回答 1

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';
于 2012-08-16T03:01:24.800 回答