【发布时间】:2013-12-24 21:06:01
【问题描述】:
我有一组 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()。任何帮助、指导和/或见解将不胜感激。非常感谢!
【问题讨论】:
-
更改链接以使用绝对路径,例如
<a href="file://path/to/resource">...</a>. -
@ThisSuitIsBlackNot:不幸的是,我无法控制 HTML 方面的任何内容。我只能在我的代码中处理现有的 HTML。
标签: perl www-mechanize