2016-07-13 15 views
1

Я пытаюсь написать сценарий в Ruby, который будет автоматически снимать купоны на веб-странице для меня. Эта страница была: Stop and Shop Coupons PageЯ изучаю Ruby и использую Watir для создания проекта отсечения купон. У меня возникли проблемы с циклом процесса, но

Что я до сих пор открою браузеру (Firefox) и перейду на страницу купонов в своей учетной записи, но выберем только один купон, а затем скрипт закроется. Я пробовал в то время как петли, я пробовал существует? и все, что я могу найти в Интернете, и я не могу заставить его непрерывно кликать для всех экземпляров кнопки «+ загрузка на карту».

Я написал сценарий для веб-сайта Publix некоторое время назад, используя сайт: Publix Coupon Page и он работал нормально. Для того, чтобы «клип» Я просто использовал:

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

мне нужен «сон», потому что иногда страница будет висеть на зажиме и сценарий будет закрыть. Когда я попробовал это на странице Stop &, это не сработало. Мне пришлось изменить «кнопку» на «ссылку» и «: класс» на «текст», чтобы даже получить его для клипа.

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 

Я попытался

l.exists? 
l.click 

, который будет работать только на одном экземпляре. Я верю, когда представлен, как показано выше. Я даже использовал цикл while, чтобы «сделать» l.click. Я исчерпал свои ресурсы на этом этапе, а также мое терпение. Любая помощь очень ценится. Спасибо!

EDIT:

Я обнаружил, что если я включаю: индекс => 1 в конце строки

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

, то он будет перемещаться в этом определенном месте в массиве и нажмите что ссылка. Итак, я думаю, в этот момент мне нужна помощь, пытаясь заставить его пересечь массив и щелкнуть по всем этим ссылкам.

РЕДАКТИРОВАТЬ 2: Я надеялся, что смогу опубликовать предложения, однако я начал внезапно сталкиваться с проблемой, когда, когда сайт загружается, я вошел в систему, как обычно, но потом он меня не выпускает причина и перенаправления на

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

РЕДАКТИРОВАТЬ 3: исправлена ​​проблема с редактированием 2. Это проблема с разрешениями/куки в моем браузере. Однако ни одно из предложений не работает.

РЕШЕНИЕ

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

Можете ли вы показать полный код, который вы используете, что работает с: индекс => 1. –

+0

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

+0

Если у вас есть решение по вашему вопросу, которое не включено ни в один из ответов, вы должны ответить на свой вопрос и пометить его как правильно. Нет вреда в этом –

ответ

0

Вы должны быть в состоянии выполнять итерацию по ссылкам, как так:

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

Да, это должно работать, за исключением того, что вам может понадобиться 'b.back' внутри цикла. –

+0

Итак, я положил это как есть, и он вообще не работает. Я не знаю, почему.Но прежде чем я смог получить хотя бы 1 купон для клипа, но теперь он не будет клип, а скрипт закрывается. Я что-то забыл? –

+0

Я не могу сказать, что вы внедрили на основе ограниченной информации в своем комментарии. –