我有一组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()
。任何帮助,指导和/或见解将不胜感激。非常感谢!
答案 0 :(得分:0)
您需要在网址前加$dir
。您只需使用其他follow_link()
,而不是使用get()
,而不允许您指定网址:
$mech->get( "file:$dir/" . $link->url() );