3

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();

タグテキストのオプションがこのように機能することがわかりましたが、 MozRepl::RemoteObject: SyntaxError: The expression is not a legal expression というエラーが発生しました。テキスト内のいくつかの文字をエスケープしようとしましたが、エラーは同じでした。次に、コードを次のように変更しました。

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++;
}

しかし、ここでもエラーが発生します: No link found matching '//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 で、64 ビット版の Strawberry perl 5.16.2.1 を使用しています。

4

2 に答える 2

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タグの数が含まれている場合、これはおそらくあなたのケースです.彼は狂った。

于 2012-12-20T16:24:23.407 に答える
0

試してみることをお勧めします:

$mech->follow_link( url_regex => qr/selector=All/ );
于 2012-12-19T22:32:13.110 に答える