2016-07-13 18 views
1

Ich versuche, ein Skript in Ruby zu schreiben, das automatisch Coupons auf einer Webseite für mich Clip wird. Diese Seite ist: Stop and Shop Coupons PageIch lerne Ruby und verwende Watir, um ein Coupon-Clipping-Projekt zu erstellen. Ich habe Probleme beim Durchlaufen des Prozesses, obwohl

Was ich bisher habe, wird den Browser (Firefox) öffnen und auf die Coupons Seite auf meinem Konto gehen, aber nur einen Coupon klicken und dann schließt das Skript. Ich habe versucht While Loops, habe ich versucht, existiert? und alles, was ich online finden konnte, und ich kann nicht erreichen, dass es für alle Instanzen des Buttons '+ load to card' kontinuierlich klammert.

schrieb ich vor einer Weile ein Skript für die Publix Website mit der Website: Publix Coupon Page und es funktionierte gut. Um „clip“ Früher habe ich nur:

b.buttons(:class => 'dc-clip-btn').each do |b| 
    b.click 
    sleep 2 
end 

Ich brauchte die „Schlaf“, weil manchmal die Seite auf dem Clip hängen würde und das Skript würde schließen. Als ich das gleiche auf der Stop & Shop-Seite versuchte, funktionierte es überhaupt nicht. Ich musste 'Button' zu 'Link' und ': Class' zu ': Text' ändern, um es sogar zu einem Clip zu machen.

require 'rubygems' 
require 'watir' 
require 'watir-webdriver' 

b = Watir::Browser.new :firefox, :profile => 'default' 
b.goto 'https://stopandshop.com/dashboard/coupons-deals/#/coupons-and-deals/exclusive-coupons' 

l = b.link :text => '+ load to card' 

sleep 3 

l.when_present.click 

Ich habe versucht,

l.exists? 
l.click 

, die nur auf eine Instanz arbeiten. Ich habe das when_present wie oben gezeigt gemacht. Ich habe sogar eine While-Schleife benutzt, um l.click zu "machen". Ich habe meine Ressourcen zu diesem Zeitpunkt sowie meine Geduld erschöpft. Jede Hilfe wird sehr geschätzt. Vielen Dank!

EDIT:

Ich habe festgestellt, dass, wenn ich die folgenden: Index => 1 am Ende der Leitung

l = b.link :text => '+ load to card', :index => 1 

dann wird es zu diesem bestimmten Punkt im Array navigieren und klicken Sie auf, dass Verknüpfung. Also, ich denke, an dieser Stelle brauche ich Hilfe, um zu versuchen, das Array zu durchqueren und auf all diese Links zu klicken.

EDIT 2: Ich hatte die Hoffnung zu posten, ob die Vorschläge funktionierten, aber ich begann plötzlich in ein Problem zu laufen, wenn die Seite geladen wird, bin ich wie gewohnt eingeloggt, aber plötzlich meldet es mich für Nein Grund und Weiterleitungen zu

https://stopandshop.com/?DPSLogout=true 

EDIT 3: Das Edit 2 Problem wurde behoben. Es war ein Problem mit Berechtigungen/Cookies in meinem Browser. Keine der Vorschläge funktioniert jedoch.

SOLUTION

while l.exists? do 
    l.click 
    l = b.link :text => '+ load to card', :index => 0+1 
end 
+0

Können Sie den vollständigen Code zeigen Sie, dass verwenden arbeitet mit dem: index => 1. –

+0

l = b.link: text => '+ auf Karte laden',: index => 1 –

+0

Wenn Sie eine Lösung für Ihre Frage haben, die in keiner der Antworten enthalten ist, sollten Sie Ihre eigene Frage beantworten und markieren als richtig. Kein Schaden in diesem –

Antwort

0

Sie sollten wie so durch die Links iterieren können:

coupons = b.links(text: '+ load to card') 
coupons.each do |coupon| 
    coupon.click 
end 
+0

Ja, das sollte funktionieren, außer Sie brauchen möglicherweise eine "b.back" innerhalb der Schleife. –

+0

Also, ich habe das so wie es ist und es funktioniert überhaupt nicht. Ich bin mir nicht sicher warum.Aber vorher konnte ich noch mindestens 1 Coupon zum clip bekommen, aber jetzt wird es keinen clip mehr geben und das Script schließt sich. Vergesse ich etwas? –

+0

Ich kann nicht sagen, was Sie basierend auf den begrenzten Informationen in Ihrem Kommentar implementiert haben. –