2016-09-15 4 views
0

Ich arbeite an einem Skript zum Crawlen einer Seite von Suchergebnissen und ich habe eine Schleife erstellt, um das richtige Suchergebnis zu finden, und das funktioniert. Das Problem, auf das ich stoße, ist, dass jede Permutation, die versucht, auf den Link innerhalb des LI-Elements zu klicken, nicht funktioniert. Zuerst habe ich versucht, den Anker innerhalb der LI zu finden, aber es ist ein Nokogiri-Objekt, ich habe versucht, in @page auszugehen und auf das richtige Element zu bohren, aber es kommt nil zurück.Klicken Sie auf Link in .each Schleife in Ruby Mechanize

Gibt es eine Möglichkeit, innerhalb des LI-Elements zu suchen, auf das ich bereits hingebohrt habe?

require 'mechanize' 
require 'nokogiri' 
require 'csv' 

@agent = Mechanize.new do |agent| 
    agent.user_agent_alias = 'Mac Safari' 
end 
@page = @agent.get('https://www.milwaukeetool.com/search-results?FullTextKeywords=48-42-5540') 

def resultsPageSearcher (searchText) 
    @page.search('#results ul > li').each do |li| 
    results_sku = li.css('span.results-sku').text 
    if results_sku == searchText 
      link = @page.link_with(:text => results_sku) 
     @page = link.click 
    end 
    end 
end 

resultsPageSearcher("48-42-5540") 

Relevent LI Element (I Fremd Code ausgeschnitten, die nicht relevant schien, kann ich mehr hinzufügen, wenn notwendig, ich habe einfach nicht über Post wollen)

<li> 
    <a href="/accessories/cutting/48-42-5540" class="results-image"> 
     <img src="//cdn.milwaukeetool.com/~/media/Images/Accessories/Cutting/48-42-5540/21867_48-42-5540.jpg?h=100&amp;thn=1&amp;w=100" alt=""></a> 
    <a class="results-title" href="/accessories/cutting/48-42-5540">4" 10 TPI High-Carbon Steel Jig Saw Blade (5 PK)</a>    
    <span class="results-sku">48-42-5540</span> 
</li> 
+0

Können Sie weitere Einzelheiten darüber angeben, wie es nicht funktioniert? Sehen Sie bestimmte Fehler? Wenn nicht, welches Ergebnis willst du bekommen und was gibt es dir jetzt? –

+0

@StevenSchobert Es kommt derzeit NIL zurück. Diese Version des Codes ist, wo mir die Ideen ausgegangen sind, ich würde es vorziehen, nicht zu '@page' zu gehen, weil ich die Schwierigkeit durchbohre, bis zum richtigen LI-Element zu bohren und ich nicht herausfinden kann, wie ich finde die Verknüpfung innerhalb nur dieses Elements und klicken Sie darauf. –

+1

Willkommen bei Stack Overflow. Bitte lesen Sie "[ask]" und die verlinkten Seiten und "[mcve]". Sie bitten uns, sich den HTML-Code vorzustellen, mit dem Sie navigieren möchten. Reduzieren Sie es stattdessen auf das absolute Mindestmaß und fügen Sie es der entsprechend formatierten Frage hinzu. Das wird uns helfen, aus dem gleichen Input wie Sie zu arbeiten. Erstellen Sie außerdem den Mindestcode neu, der das Problem mithilfe dieses HTML veranschaulicht. Momentan hat deine Frage Code, der nichts zu tun hat und wir müssen HTML zusammenbauen, um zu testen, was unsere Zeit verschwendet. –

Antwort

0

So fand ich eine ziemlich coole Bibliothek den anderen Tag, dass ich denke, wird Ihnen dabei helfen. Es wird zu dem Link gehen, den Sie ihm geben und dann nach einem Link mit dem gewünschten Text suchen und darauf klicken. Wenn Sie Probleme damit haben, lassen Sie es mich wissen.

require 'watir' 
require 'headless' 
require 'csv' 

headless = Headless.new 
headless.start 
browser = Watir::Browser.new 
browser.goto('https://www.milwaukeetool.com/search-results?FullTextKeywords=48-42-5540') 
browser.link(text: searchText).when_present.click 
+0

Hat etwas Fingling genommen, aber ich habe es geschafft zu arbeiten, Danke an alle. –

+0

froh, dass ich Sie in die richtige Richtung zeigen konnte! Sie sollten diese Antwort so bearbeiten, dass sie alles enthält, was Sie möglicherweise anders machen mussten. –

+1

Bearbeiten Sie die Antwort nicht. Lass es so wie es beantwortet wurde. Ein Kommentar würde ausreichen, um zu dokumentieren, was geändert wurde. –