2

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

我正在浏览一个 URL 列表并向每个 URL 发送一个 HTTP GET 请求。

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

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

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

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

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

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

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

我试过这个:

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

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

4

1 回答 1

0

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

如果你想检查网站是否真的完全加载,你应该检查你想要的元素(例如div)是否存在:

while (!$mech->is_visible( xpath => '//div[@class="myDivClassAtHtml"]')) {
          sleep 1;
}; 
# do something with your page
于 2017-06-29T13:14:48.310 回答