WWW :: Mechanize关注链接无法找到链接

时间:2013-12-24 21:06:02

标签: perl www-mechanize

我有一组HTML文件,用作访问服务器上某些文件的界面。有一个主页面链接到各种报告页面,然后链接到文件。我正在尝试获取每个页面上的链接文件,并确定它们是否是最新的。但是,我一步一步迈出了一步,我想先把这件作品弄清楚。

作为参考,文件夹结构如下:

//server/
|---pages/
|---+---MainPage.htm
|---+---reports/
|---+---+---Report1.htm
|---+---+---Report2.htm

find_all_links()方法获取我想要的链接。但是,当我尝试将生成的WWW :: Mechanize :: Link对象的URL传递给follow_link()时,它表示该文件不存在。文件存在,而不是它认为存在的位置。奇怪的是,在浏览器中手动链接后工作正常。

以下是解决此问题的代码。

use strict;
use warnings;
use WWW::Mechanize;

my $dir = '//server/pages';
chdir($dir);

my $mech = WWW::Mechanize->new();
$mech->get("file:$dir/MainPage.htm");

my @links = $mech->find_all_links(url_regex => qr/^\/reports\/.*/i);

foreach my $link (@links){
    print $link->url(), "\n";
    $mech->follow_link(url => $link->url());
    # Get all links on this page and check the modified dates
    ...
    $mech->back();
}

它产生以下输出:

/reports/Report1.htm
Error GETing file://server/reports/Report1.htm: File `\\server\reports\Report1.htm` does not exist at script.pl line 15.

它使用的文件路径不正确,这就是它无法找到文件的原因。如何让它使用正确的路径?我也尝试url_abs()代替url()。任何帮助,指导和/或见解将不胜感激。非常感谢!

1 个答案:

答案 0 :(得分:0)

您需要在网址前加$dir。您只需使用其他follow_link(),而不是使用get(),而不允许您指定网址:

$mech->get( "file:$dir/" . $link->url() );