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特定の時点からいつでもブラウジングを続行できるようにオブジェクトを保存する場合は、bless されたオブジェクトのシリアル化を調査する必要があります。

私の選択は を使用すること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 に答える