2016-04-06 7 views
2

Ich benutze find_link_dom und es funktioniert ... um den ersten passenden Link zu finden. Ich muss den zweiten finden. Hier ist meine Zeile:Wie finde ich den zweiten Link Vorkommen mit WWW :: Mechanize :: Firefox und find_link_dom in Perl?

Gibt es eine Möglichkeit für diesen Befehl, den zweiten Link, der übereinstimmt, zurückzugeben?

Und bevor jemand kommentieren, dass ich meine Suchkriterien ändern muss, ist der Text der gleiche. Das einzige, was anders ist, ist die URL und ich weiß nicht nur von der URL, die ausgewählt werden sollte. Ich brauche den zweiten Link, der der obigen Suche entspricht.

+0

https://metacpan.org/pod/WWW::Mechanize erwähnt keine Methode 'find_link_dom'. – simbabque

+0

Whoops. Ich habe das Firefox vergessen. Ich werde aktualisieren. – Bill

Antwort

2

Die documentation sagt, es gibt Objekte zurück. Das ist Plural. Es gibt auch dieses Stück Code. Beachten Sie die for.

print $_->{innerHTML} . "\n" 
    for $mech->find_link_dom(text_contains => 'CPAN'); 

So können Sie nennen es nur in Listenkontext alle gefundenen Links zu erhalten, oder nehmen Sie nur die, die Sie wollen.

(undef, my $link) = $mech->find_link_dom (text_regex => 'abc'); 

Das sollte Ihnen die zweite geben.

Alternativ können Sie alle von ihnen nehmen und ausgeben, um zu sehen, was los ist.

use Data::Printer; 

my @links = $mech->find_link_dom (text_regex => 'abc'); 
p @links 

Alternativ können Sie die Option n, die ein1-basierter Index ist.

my $second_link = $mech->find_link_dom(text_regex => 'abc', n => 2); 
+0

Danke für die Hilfe. Eine andere Frage, die etwas verwandt ist. Gibt es eine Möglichkeit, anstelle von Text nach "Titel" zu suchen? – Bill

+0

@Bill Ich sehe nicht, dass es eine eingebaute Möglichkeit dafür gibt. Siehe https://metacpan.org/source/CORION/WWW-Mechanize-Firefox-0.78/lib/WWW/Mechanize/Firefox.pm#L2317. Ich denke, du müsstest das mit deinem eigenen XPath-Ausdruck machen. Wenn Sie Probleme damit haben, stellen Sie bitte eine neue Frage. – simbabque

+0

@Bill hast du einen Weg gefunden, das Titel-Ding zu machen? – simbabque

1

Es gibt eine second method, von @simbabque Dokumentation Referenz, dass ich denke, Sie sollten versuchen:

$mech->find_all_links_dom %options 

print $_->{innerHTML} . "\n" 
    for $mech->find_all_links_dom(text_regex => qr/google/i); 

Findet alle passenden linky DOM-Knoten in dem Dokument. Die Optionen sind dokumentiert in -> find_link_dom.

Gibt sie als Liste oder Array-Referenz zurück, abhängig vom Kontext.

Standardmäßig werden die untergeordneten Frames nicht durchsucht.

+0

Guter Ort. Das ist wahrscheinlich die prägnantere Option, obwohl die Schnittstelle ein wenig fragwürdig ist. Aber bitte [bearbeiten] Sie Ihre Antwort und entfernen Sie die erste Zeile. Das ist gut als Antwort, kein Grund sich zu entschuldigen. Sie können jedoch ein funktionierendes Beispiel hinzufügen. – simbabque

+0

Ja, die Schnittstelle und die Dokumentation lassen Raum für Verbesserungen. – eballes

Verwandte Themen