WWW :: Mechanize :: Firefox follow_link不起作用

时间:2012-12-19 22:29:42

标签: perl hyperlink www-mechanize-firefox

我正在尝试关注Perl中的链接。 我的初始代码:

use WWW::Mechanize::Firefox;
use Crypt::SSLeay;
use HTML::TagParser;
use URI::Fetch;
$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME}=0; #not verifying certificate
my $url = 'https://';
$url = $url.@ARGV[0]; 

my $mech = WWW::Mechanize::Firefox->new;
$mech->get($url);

$mech->follow_link(tag => 'a', text => '<span class=\"normalNode\">VSCs</span>');
$mech->reload();

我发现here 标记 text 选项以这种方式工作但我收到错误 MozRepl :: RemoteObject:SyntaxError:表达式不是法律表达。我试图逃避文本中的一些字符,但错误仍然是相同的。 然后我改变了我的代码:

my @list = $mech->find_all_links();
my $found = 0;
my $i=0;
while($i<=$#list && $found == 0){
    print @list[$i]->url()."\n";
    if(@list[$i]->text() =~ /VSCs/){
    print @list[$i]->text()."\n";
    my $follow =@list[$i]->url();
    $mech->follow_link( url => $follow);
}
    $i++;
}

但是又一次出现了错误:找不到匹配'// a [(@ href =“https:// ... )的链接以及更多似乎是链接的文字描述。 我希望自己明确表示,如果没有,请告诉我还有什么要补充的。感谢大家的帮助。

以下是我想要关注的链接部分:

<li id="1" class="liClosed"><span class="bullet clickable">&#160;</span><b><a href="/centcfg/vsc_list.asp?entity=allvsc&amp;selector=All"><span class="normalNode">VSCs</span></a></b>
      <ul id="1.l1">
        <li id="i1.i1" class="liBullet"><span class="bullet">&#160;</span><b><a href="/centcfg/vsc_edit.asp?entity=vsc&amp;selector=1"><span class="normalNode">First</span></a></b></li>
        <li id="i1.i2" class="liBullet"><span class="bullet">&#160;</span><b><a href="/centcfg/vsc_edit.asp?entity=vsc&amp;selector=2"><span class="normalNode">Second</span></a></b></li>
        <li id="i1.i3" class="liBullet"><span class="bullet">&#160;</span><b><a href="/centcfg/vsc_edit.asp?entity=vsc&amp;selector=3"><span class="normalNode">Third</span></a></b></li>
        <li id="i1.i4" class="liBullet"><span class="bullet">&#160;</span><b><a href="/centcfg/vsc_edit.asp?entity=vsc&amp;selector=4"><span class="normalNode">Fourth</span></a></b></li>
        <li id="i1.i5" class="liBullet"><span class="bullet">&#160;</span><b><a href="/centcfg/vsc_edit.asp?entity=vsc&amp;selector=5"><span class="normalNode">None</span></a></b></li>
</ul>

我在Windows 7中工作,MozRepl是1.1版,我使用草莓perl 5.16.2.1 for 64位

2 个答案:

答案 0 :(得分:2)

在使用给定代码进行探讨之后,我能够使W :: M :: F以下列方式跟踪链接:

use WWW::Mechanize::Firefox;
use Crypt::SSLeay;
use HTML::TagParser;
use URI::Fetch;

...

$mech->follow_link(xpath => '//a[text() = "<span class=\"normalNode\">VSCs</span>"]');
$mech->reload();

请注意xpath参数,而不是text

我没有仔细研究W :: M :: F源代码,但是它会尝试将给定的text参数转换为XPath字符串,如果text包含的数量为XML / HTML标签,这是你的情况,它可能会让他发疯。

答案 1 :(得分:0)

我建议你试试:

$mech->follow_link( url_regex => qr/selector=All/ );