【问题标题】:How can we tell WWW::Mechanize::Firefox to not wait for a response or a postback?我们如何告诉 WWW::Mechanize::Firefox 不要等待响应或回发?
【发布时间】:2013-04-12 12:29:53
【问题描述】:

您好,我正在使用循环到get 各个页面。

代码:

while($stm->fetch()) {
    $mech->get(**#TheURL**);

            $mech->select( 'this', 'that' );
            $mech->tick( 'this' => undef );
            $mech->tick( 'this' => undef  );
            $mech->tick( 'this' => undef  );
            $mech->tick( 'this' => undef  );
            my $button = $mech->selector('input.button', single => 1);
            $mech->click($csvbutton);
} 

上面的代码在点击按钮后下载文件。但是它会在第一次迭代后停止。

我已更改 Firefox 的配置以禁用下载管理器弹出窗口。

我收到过一次这个错误:

MozRepl::RemoteObject::Object has no function addProgressListener at `$mech->get(**#TheURL**);`

我们将不胜感激。谢谢。

更新:

我发现它在第一次下载时卡住了,因为 WWW::Mechanize::Firefox 正在等待它没有得到的响应或回发。刚刚下载了一个文件。

$mech->click($csvbutton);

这是它停止的地方。如果我手动操作页面(即返回或转到主页或新 URL),它将继续循环。所以它正在等待新的页面加载。

我如何告诉 WWW::Mechanize::Firefox 不要等待响应或新页面加载?

谢谢

【问题讨论】:

    标签: perl web-scraping www-mechanize mozrepl www-mechanize-firefox


    【解决方案1】:

    您是否尝试过点击synchronize 选项:

    $mech->click( $csvbutton, { synchronize => 0 } );
    

    【讨论】:

    • 我已经试过了。它仍然挂在第一个链接上,等待回发或新的页面加载。在文档中它说:It is necessary to synchronize with the browser whenever a click performs an action that takes longer and fires an event on the browser object.当我的按钮被点击时,唯一触发的event是创建和下载一个excelcsv
    【解决方案2】:

    行的格式应该是完美的形式:

    $mech->click({selector => ('input.button', single => 1), synchronize => 0});
    

    您必须使用selector =>xpath =>

    签名:

    $mech->click({xpath/selector => 'name' ,synchonize => 0})
    

    那么点击就不会等待网络服务器的响应了。

    如所述:cpan WWW::Mechanize::Firefox::Troubleshooting

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-25
      • 2010-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-12
      相关资源
      最近更新 更多