我们如何告诉WWW :: Mechanize :: Firefox不等待响应或回发?

时间:2013-04-12 12:29:53

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

您好我正在使用循环到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不等待响应或新页面加载?

由于

2 个答案:

答案 0 :(得分:1)

您是否尝试点击synchronize选项:

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

答案 1 :(得分:1)

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

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

您必须使用selector =>xpath =>

<强>签名:

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

然后点击将不会等待网络服务器的响应。

如:cpan WWW::Mechanize::Firefox::Troubleshooting

所述