【问题标题】:using Perl and WWW::Mechanize to get HTML with filled-in forms and save it to file使用 Perl 和 WWW::Mechanize 获取带有填充表单的 HTML 并将其保存到文件
【发布时间】:2012-08-12 08:55:35
【问题描述】:

我正在尝试使用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 幻灯片中。

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

【问题讨论】:

  • 重新编辑:您为什么要这样做?
  • @simbabque 例如,您查看 selenium 记录的会话,您可以看到用户填写的表格和内容。我需要使用 mechanize 的类似功能。
  • Mechanize 放入表单的数据(在提交之前)必须来自某个地方。更具体地说,它必须通过您的代码。你为什么不在你把它交给机械化之前/期间/之后保存它?你(你的程序)必须已经知道它,否则你不能把它交给 Mechanize。
  • 我知道我要传递给 Mechanize 的数据是什么,但是如何在不进行与 Mechanize 相同的处理的情况下将其与 HTML 合并?实际上 mechanize 是使用 HTML::Form 来处理数据,但我需要使用 HTML::Treebuilder 直接处理 HTML。然后,如果我要使用它来修改我的 HTML,那么我不妨从中生成 POST 或 GET 请求,而根本不使用 Mechanize。我显然不想重新实现$self->current_form->find_input('name')->check() 之类的东西,所以我正在寻找更智能的解决方案。

标签: html forms perl www-mechanize


【解决方案1】:

解决方案取决于您要达到的目标。 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';

【讨论】:

  • 感谢您的快速响应,因为我的编辑说我不需要存储 mechanize 对象以稍后继续会话,我需要在填写表格后获取内容的 html 转储(在提交之前)。
猜你喜欢
  • 2021-10-08
  • 1970-01-01
  • 2012-11-26
  • 1970-01-01
  • 2013-07-12
  • 2014-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多