如何在使用Mechanize隐藏的输入上设置字段?

时间:2014-06-17 07:45:26

标签: javascript forms perl www-mechanize

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

这是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();
}

但它没有用。

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

1 个答案:

答案 0 :(得分:0)

看看here

可能有一个问题,WWW::Mechanize没有评估Javascript。

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

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

  • WWW::Mechanize::Firefox使用已安装的Firefox执行,因此您需要安装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 );
}