Perl WWW :: Mechanize :: Firefox超时实现

时间:2014-03-10 21:16:10

标签: perl www-mechanize www-mechanize-firefox

我在Firefox中使用WWW :: Mechanize :: Firefox和MozRepl插件。该代码可以通过向它们发送HTTP GET请求来正确地从站点获取内容。

我正在查看URL列表并向每个URL发送HTTP GET请求。

但是,如果请求挂起在特定的URL上,它会一直等待。

请注意,我指的是在部分内容仍处于待处理状态时加载部分网页内容的情况。它发生在网页从第三方网站加载大量内容并且如果无法加载其中一个资源(例如图像)的情况下,浏览器会一直等待它。

我希望请求在' n'之后超时秒,以便我可以从列表中读取下一个URL并继续执行代码。

在WWW :: Mechanize perl模块中,构造函数支持timeout选项,如下所示:

$mech=WWW::Mechanize->new(timeout => 10);

但是,我在这里的Perl模块,WWW :: Mechanize :: Firefox的文档中找不到类似的选项:

http://metacpan.org/pod/WWW::Mechanize::Firefox

我试过了:

$mech=WWW::Mechanize::Firefox->new(timeout => 10);

但我认为它不起作用,因为仍有一些网站请求挂起。

1 个答案:

答案 0 :(得分:0)

WWW::Mechanize::Firefox使用Mozrepl连接Firefox浏览器,因此您不需要声明超时参数,因为Firefox会等待页面加载。

如果要检查网站是否确实已完全加载,您应检查所需的元素(例如div)是否存在:

while (!$mech->is_visible( xpath => '//div[@class="myDivClassAtHtml"]')) {
          sleep 1;
}; 
# do something with your page