【问题标题】:WWW::Mechanize follow link can't find linkWWW::Mechanize 跟随链接找不到链接
【发布时间】: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


【解决方案1】:

您需要在 URL 前添加 $dir。不要使用follow_link(),它不会让您指定URL,只需使用另一个get()

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

【讨论】:

  • 这非常有效。我仍然对为什么follow_link() 不会引用正确的绝对路径感到困惑,但我很好,只是不去想它。非常感谢!
  • @Alex follow_link() 只需调用$self->get( $link->url );,在您的情况下$link->url/reports/Report1.htm
  • 感谢您的澄清,这有助于我更好地理解这一点。非常感谢您的帮助!
猜你喜欢
  • 2012-10-24
  • 2012-10-20
  • 2011-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-24
  • 1970-01-01
  • 2011-04-03
相关资源
最近更新 更多