Ich weiß, wie man ein Element mit Nokogiri findet. Ich weiß, wie man mit Mechanize auf einen Link klickt. Aber ich kann nicht herausfinden, wie man einen bestimmten Link findet und darauf klickt. Das scheint so, als sollte es wirklich einfach sein, aber aus irgendeinem Grund kann ich keine Lösung finden.Wie kann ich auf einen bestimmten Link mit Nokogori oder Mechanize klicken?
Sagen wir, ich versuche nur auf das erste Ergebnis einer Google-Suche zu klicken. Ich kann nicht einfach auf den ersten Link mit Mechanize klicken, da die Google-Seite eine Reihe anderer Links enthält, z. B. Einstellungen. Die Suchergebnislinks selbst scheinen keine Klassennamen zu haben, aber sie sind in <h3 class="r"></h3>
eingeschlossen.
Ich kann nur Nokogiri verwenden, um den href
Wert des Link zu folgen, wie so:
document = open("https://www.google.com/search?q=stackoverflow")
parsed_content = Nokogiri::HTML(document.read)
href = parsed_content.css('.r').children.first['href']
new_document = open(href)
# href is equal to "/url?sa=t&rct=j&q=&esrc=s&source=web&url=https%3A%2F%2Fstackoverflow.com%2F"
aber es ist nicht eine direkte URL und gibt einen Fehler zu dieser URL gehen. Der data-href
Wert ist eine direkte URL, aber ich kann nicht herausfinden, wie man diesen Wert bekommt - das Gleiche zu tun, außer mit ...first['data-href']
gibt nil zurück.
Wer weiß, wie ich das erste .r
Element auf der Seite finden und den Link darin klicken kann?
Hier ist der Start in meine Aktion:
require 'open-uri'
require 'nokogiri'
require 'mechanize'
document = open("https://www.google.com/search?q=stackoverflow")
parsed_content = Nokogiri::HTML(document.read)
Hier ist das .r
Element auf der Suchergebnisseite von Google:
<h3 class="r">
<a href="/url?sa=t&rct=j&q=&esrc=s&source=web&url=https%3A%2F%2Fstackoverflow.com%2F" data-href="https://stackoverflow.com/">Stack Overflow</a>
</h3>
Guter Fang, ich tippte statt kopieren + einfügen. Das ist seltsam, aber dieser genaue Code funktioniert nicht für mich, aber mit '('.r'). First.children.first ['href']' und nur 'href' anstelle von' href.value' . –
@JosefKrazinsky du hast Recht, muss einen Fehler beim Kopieren-Einfügen selbst gemacht haben –