Mam funkcję mechanizacji, która wylogowuje mnie z witryny, ale w bardzo rzadkich przypadkach pomija mnie. Funkcja obejmuje przechodzenie do określonej strony, a następnie kliknięcie przycisku wylogowania. Od czasu do czasu, gdy mechanize cierpi z powodu przekroczenia limitu czasu, kiedy następuje przejście do strony wylogowania lub kliknięcie przycisku wylogowania, kod ulega awarii. Więc wprowadziłem małą akcję ratunkową i wygląda na to, że działa jak widać poniżej pierwszego fragmentu kodu.Błędy przekroczenia limitu czasu przy mechanizmie ruby
def logmeout(agent)
page = agent.get('http://www.example.com/')
agent.click(page.link_with(:text => /Log Out/i))
end
Logmeout z ratownictwa:
def logmeout(agent)
begin
page = agent.get('http://www.example.com/')
agent.click(page.link_with(:text => /Log Out/i))
rescue Timeout::Error
puts "Timeout!"
retry
end
end
Zakładając Rozumiem ratowanie poprawnie, będzie to robić zarówno działania na nawet jeśli tylko kliknięcie limit czasu, więc w wysiłkach, aby być skuteczne ja zastanawiałem się, czy Mógłbym użyć proc w tej sytuacji i przekazać mu blok kodu. Czy coś w tej pracy:
def trythreetimes
tries = 0
begin
yield
rescue
tries += 1
puts "Trying again!"
retry if tries <= 3
end
end
def logmeout(agent)
trythreetimes {page = agent.get('http://www.example.com/')}
trythreetimes {agent.click(page.link_with(:text => /Log Out/i))}
end
Uwaga w mojej funkcji trythreetimes Zostawiłem go jako rodzajowy ratunek więc funkcja będzie bardziej wielokrotnego użytku.
Dziękuję bardzo za pomoc, którą każdy może zapewnić, zdaję sobie sprawę, że tutaj jest kilka różnych pytań, ale wszystkie są tym, czego próbuję się nauczyć!
Dzięki za odpowiedź! Twój preferowany kod zakłada, że znalazłeś poprawny link przez kod źródłowy? – Sean
Cóż, nie jest trudno znaleźć link wewnątrz źródła HTML. Preferuję to rozwiązanie ze względu na potrzebny czas i pamięć. ale możesz użyć swojego rozwiązania za pomocą zestawu ['read_timeout'] (http://mechanize.rubyforge.org/Mechanize/HTTP/Agent.html#read_timeout=). To dobry pomysł, jeśli używasz go do wielu domen. Po prostu edytuj mój drugi spokój kodu i zmień go, aby uzyskać dostęp do strony głównej i kliknij link, jeśli wolisz. – cz3ch
O, przykro mi, nie odpowiedziałem na twoje pytanie w rzeczywistości. Tak, zakładam, że znalazłeś poprawny link przez kod źródłowy ... – cz3ch