【问题标题】:How can I set fields on an input hidden with Mechanize ?如何在使用 Mechanize 隐藏的输入上设置字段?
【发布时间】:2014-08-07 03:28:00
【问题描述】:

我选择表单来更改页面。 但是输入是隐藏的。

这里是html代码:

<form id="form_pager" method="post" action="">
    <input type="hidden" id="txtPage" name="page">

                <a class="link-paginador" href="javascript:navigatePage('1');">&lt;&lt;</a>
                        <a class="link-paginador" href="javascript:navigatePage('1');">Précédent</a>
            <span id="pager">


                                <a class="link-paginador" href="javascript:navigatePage('1');">1</a>&nbsp;
                                            <strong>2</strong>&nbsp;
                                            <a class="link-paginador" href="javascript:navigatePage('3');">3</a>&nbsp;
                                            <a class="link-paginador" href="javascript:navigatePage('4');">4</a>&nbsp;
                                            <a class="link-paginador" href="javascript:navigatePage('5');">5</a>&nbsp;

            </span>
                <a class="link-paginador" href="javascript:navigatePage('3');">Suivant</a>
                        <a class="link-paginador" href="javascript:navigatePage('5');">&gt;&gt;</a>
        </form>

这是我的代码:

$form = $mech->form_id('form_pager');
$mech->set_fields('txtPage' => 'page='.$nbpage);
$mech->click();

我试图改变输入的状态:

foreach my $forms ($mech->forms()) {
    map { $_->readonly(0) } $forms->inputs();
}

但它不起作用。

请问你有什么想法吗?谢谢!

【问题讨论】:

  • 字段名称是page而不是txtPage,例如试试$mech-&gt;set_fields( page =&gt; $nbpage )

标签: javascript forms perl www-mechanize


【解决方案1】:

看看here

一个问题可能是,WWW::Mechanize 不评估 Javascript。

您可以尝试使用WWW::Mechanize::Firefox,它可以评估javascript,也可以使用WWW::Mechanize::PhantomJS

认为您需要知道何时使用想要使用其中之一:

  • WWW::Mechanize::Firefox使用你安装的火狐来执行,所以你需要安装火狐
  • WWW::Mechanize::PhantomJS 使用 phantomjs。所以当你想使用WWW::Mechanize::PhantomJS 时,你需要安装它。
  • WWW::Mechanize::PhantomJS 完全没有屏幕,所以你看不到页面。 查看页面外观的一部分是使用content_as_png 方法。有关这方面的更多信息,您可以查看 POD。

之后只需使用 javascript 来更改值。


另一个问题可能是set_fields 的调用。

# i'm not sure if this works
$mech->set_fields('page' => $nbpage);

# form WWW::Mechanize::FAQ
# when you have warnings on:
{
   local $^W = 0;
   $mech->field( page => $nbpage );
}

【讨论】:

  • 非常感谢您的回复,但第一条评论:字段名称是 page 而不是 txtPage,例如尝试 $mech->set_fields( page => $nbpage ) 是正确的答案。我不使用javascript,我只用正确的字段填写隐藏表单。
  • 可能是一个简单的错字:),很高兴帮助你:)
猜你喜欢
  • 2013-04-20
  • 2013-10-14
  • 1970-01-01
  • 2013-04-25
  • 2013-07-22
  • 2011-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多